blob: 77aee46e7749578f50d4696e8bb1992378a4a52d [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',
34 'new': 'New'
35 }
36};
37
38var ANDROID_RESOURCES = [
39
40//////////////////////////
41/// TECHNICAL ARTICLES ///
42//////////////////////////
43
44 {
45 tags: ['article', 'performance', 'bestpractice'],
46 path: 'articles/avoiding-memory-leaks.html',
47 title: {
48 en: 'Avoiding Memory Leaks'
49 },
50 description: {
51 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.'
52 }
53 },
54 {
55 tags: ['article', 'compatibility'],
56 path: 'articles/backward-compatibility.html',
57 title: {
58 en: 'Backward Compatibility'
59 },
60 description: {
61 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.'
62 }
63 },
64 {
65 tags: ['article', 'intent'],
66 path: 'articles/can-i-use-this-intent.html',
67 title: {
68 en: 'Can I Use this Intent?'
69 },
70 description: {
71 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.'
72 }
73 },
74 {
75 tags: ['article', 'input'],
76 path: 'articles/creating-input-method.html',
77 title: {
78 en: 'Creating an Input Method'
79 },
80 description: {
81 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.'
82 }
83 },
84 {
85 tags: ['article', 'drawing', 'ui'],
86 path: 'articles/drawable-mutations.html',
87 title: {
88 en: 'Drawable Mutations'
89 },
90 description: {
91 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.'
92 }
93 },
94 {
95 tags: ['article', 'bestpractice', 'ui'],
96 path: 'articles/faster-screen-orientation-change.html',
97 title: {
98 en: 'Faster Screen Orientation Change'
99 },
100 description: {
101 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.'
102 }
103 },
104 {
105 tags: ['article', 'compatibility'],
106 path: 'articles/future-proofing.html',
107 title: {
108 en: 'Future-Proofing Your Apps'
109 },
110 description: {
111 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.'
112 }
113 },
114 {
115 tags: ['article', 'input'],
116 path: 'articles/gestures.html',
117 title: {
118 en: 'Gestures'
119 },
120 description: {
121 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.'
122 }
123 },
124 {
125 tags: ['article', 'gamedev', 'gl'],
126 path: 'articles/glsurfaceview.html',
127 title: {
128 en: 'Introducing GLSurfaceView'
129 },
130 description: {
131 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.'
132 }
133 },
134 {
135 tags: ['article', 'ui', 'layout'],
136 path: 'articles/layout-tricks-reuse.html',
137 title: {
138 en: 'Layout Tricks: Creating Reusable UI Components'
139 },
140 description: {
141 en: 'Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.'
142 }
143 },
144 {
145 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
146 path: 'articles/layout-tricks-efficiency.html',
147 title: {
148 en: 'Layout Tricks: Creating Efficient Layouts'
149 },
150 description: {
151 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.'
152 }
153 },
154 {
155 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
156 path: 'articles/layout-tricks-stubs.html',
157 title: {
158 en: 'Layout Tricks: Using ViewStubs'
159 },
160 description: {
161 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.'
162 }
163 },
164 {
165 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
166 path: 'articles/layout-tricks-merge.html',
167 title: {
168 en: 'Layout Tricks: Merging Layouts'
169 },
170 description: {
171 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.'
172 }
173 },
174 {
175 tags: ['article', 'ui', 'performance'],
176 path: 'articles/listview-backgrounds.html',
177 title: {
178 en: 'ListView Backgrounds: An Optimization'
179 },
180 description: {
181 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.'
182 }
183 },
184 {
Roman Nurika35f6562011-02-04 14:28:22 -0800185 tags: ['article', 'ui'],
Roman Nurike577d722010-04-16 15:57:34 -0700186 path: 'articles/live-folders.html',
187 title: {
188 en: 'Live Folders'
189 },
190 description: {
191 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.'
192 }
193 },
194 {
Roman Nurika35f6562011-02-04 14:28:22 -0800195 tags: ['article', 'ui'],
Roman Nurike577d722010-04-16 15:57:34 -0700196 path: 'articles/live-wallpapers.html',
197 title: {
198 en: 'Live Wallpapers'
199 },
200 description: {
201 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.'
202 }
203 },
204 {
Roman Nurike7d60072011-05-18 17:50:39 -0700205 tags: ['article', 'bestpractice', 'multitasking'],
206 path: 'articles/multitasking-android-way.html',
207 title: {
208 en: 'Multitasking the Android Way'
209 },
210 description: {
211 en: 'This article describes best practices and user experience guidelines for multi-tasking on Android.'
212 }
213 },
214 {
Roman Nurike577d722010-04-16 15:57:34 -0700215 tags: ['article', 'input'],
216 path: 'articles/on-screen-inputs.html',
217 title: {
218 en: 'Onscreen Input Methods'
219 },
220 description: {
221 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.'
222 }
223 },
224 {
225 tags: ['article', 'performance', 'bestpractice'],
226 path: 'articles/painless-threading.html',
227 title: {
228 en: 'Painless Threading'
229 },
230 description: {
231 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.'
232 }
233 },
234 {
235 tags: ['article', 'ui', 'search'],
236 path: 'articles/qsb.html',
237 title: {
238 en: 'Quick Search Box'
239 },
240 description: {
241 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.'
242 }
243 },
244 {
Roman Nurikecaf3f42011-05-16 14:00:13 -0700245 tags: ['article', 'input', 'search', 'ui'],
246 path: 'articles/speech-input.html',
247 title: {
248 en: 'Speech Input'
249 },
250 description: {
251 en: 'This articles describes the basics of integrating speech recognition into Android applications.'
252 }
253 },
254 {
Roman Nurike7d60072011-05-18 17:50:39 -0700255 tags: ['article', 'compatibility', 'multitasking'],
256 path: 'articles/service-api-changes-starting-with.html',
257 title: {
258 en: 'Service API changes starting with Android 2.0'
259 },
260 description: {
261 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.'
262 }
263 },
264 {
Roman Nurike577d722010-04-16 15:57:34 -0700265 tags: ['article', 'ui'],
266 path: 'articles/touch-mode.html',
267 title: {
268 en: 'Touch Mode'
269 },
270 description: {
271 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.'
272 }
273 },
274 {
275 tags: ['article', 'performance', 'bestpractice'],
276 path: 'articles/track-mem.html',
277 title: {
278 en: 'Tracking Memory Allocations'
279 },
280 description: {
281 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.'
282 }
283 },
284 {
Roman Nurika35f6562011-02-04 14:28:22 -0800285 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700286 path: 'articles/ui-1.5.html',
287 title: {
288 en: 'UI Framework Changes in Android 1.5'
289 },
290 description: {
291 en: 'Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.'
292 }
293 },
294 {
Roman Nurika35f6562011-02-04 14:28:22 -0800295 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700296 path: 'articles/ui-1.6.html',
297 title: {
298 en: 'UI Framework Changes in Android 1.6'
299 },
300 description: {
301 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.'
302 }
303 },
304 {
305 tags: ['article', 'ui', 'bestpractice'],
306 path: 'articles/timed-ui-updates.html',
307 title: {
308 en: 'Updating the UI from a Timer'
309 },
310 description: {
311 en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
312 }
313 },
314 {
315 tags: ['article', 'ui', 'accessibility'],
316 path: 'articles/tts.html',
317 title: {
318 en: 'Using Text-to-Speech'
319 },
320 description: {
321 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.'
322 }
323 },
324 {
325 tags: ['article', 'ui', 'web'],
326 path: 'articles/using-webviews.html',
327 title: {
328 en: 'Using WebViews'
329 },
330 description: {
331 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.'
332 }
333 },
334 {
335 tags: ['article', 'ui'],
336 path: 'articles/wikinotes-linkify.html',
337 title: {
338 en: 'WikiNotes: Linkify your Text!'
339 },
340 description: {
341 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.'
342 }
343 },
344 {
345 tags: ['article', 'intent'],
346 path: 'articles/wikinotes-intents.html',
347 title: {
348 en: 'WikiNotes: Routing Intents'
349 },
350 description: {
351 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.'
352 }
353 },
354 {
355 tags: ['article', 'ui', 'performance'],
356 path: 'articles/window-bg-speed.html',
357 title: {
358 en: 'Window Backgrounds & UI Speed'
359 },
360 description: {
361 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.'
362 }
363 },
364 {
365 tags: ['article', 'performance', 'bestpractice'],
366 path: 'articles/zipalign.html',
367 title: {
368 en: 'Zipalign: an Easy Optimization'
369 },
370 description: {
371 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.'
372 }
373 },
374
375///////////////////
376/// SAMPLE CODE ///
377///////////////////
Robert Ly3f9b6442011-01-19 18:14:50 -0800378
379 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800380 tags: ['sample', 'new'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800381 path: 'samples/AccelerometerPlay/index.html',
382 title: {
383 en: 'Accelerometer Play'
384 },
385 description: {
Roman Nurik94be4a52011-02-11 14:46:00 -0800386 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 -0800387 }
388 },
389 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800390 tags: ['sample', 'new', 'accessibility'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800391 path: 'samples/AccessibilityService/index.html',
392 title: {
393 en: 'Accessibility Service'
394 },
395 description: {
396 en: 'Illustrates an accessibility service that provides custom feedback for the Clock application which comes by default with Android devices'
397 }
398 },
Roman Nurike577d722010-04-16 15:57:34 -0700399 {
400 tags: ['sample', 'layout', 'ui'],
401 path: 'samples/ApiDemos/index.html',
402 title: {
403 en: 'API Demos'
404 },
405 description: {
406 en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
407 }
408 },
409 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800410 tags: ['sample', 'data', 'newfeature', 'accountsync'],
Roman Nurike577d722010-04-16 15:57:34 -0700411 path: 'samples/BackupRestore/index.html',
412 title: {
413 en: 'Backup and Restore'
414 },
415 description: {
416 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.'
417 }
418 },
419 {
420 tags: ['sample', 'communication'],
421 path: 'samples/BluetoothChat/index.html',
422 title: {
423 en: 'Bluetooth Chat'
424 },
425 description: {
426 en: 'An application for two-way text messaging over Bluetooth.'
427 }
428 },
429 {
430 tags: ['sample', 'accountsync'],
431 path: 'samples/BusinessCard/index.html',
432 title: {
433 en: 'BusinessCard'
434 },
435 description: {
436 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.'
437 }
438 },
439 {
440 tags: ['sample', 'accountsync'],
441 path: 'samples/ContactManager/index.html',
442 title: {
443 en: 'Contact Manager'
444 },
445 description: {
446 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.'
447 }
448 },
449 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800450 tags: ['sample', 'ui'],
451 path: 'samples/CubeLiveWallpaper/index.html',
452 title: {
453 en: 'Cube Live Wallpaper'
454 },
455 description: {
456 en: 'An application that demonstrates how to create a live wallpaper and bundle it in an application that users can install on their devices.'
457 }
458 },
459 {
Roman Nurike577d722010-04-16 15:57:34 -0700460 tags: ['sample'],
461 path: 'samples/Home/index.html',
462 title: {
463 en: 'Home'
464 },
465 description: {
466 en: 'A home screen replacement application.'
467 }
468 },
469 {
Roman Nurika35f6562011-02-04 14:28:22 -0800470 tags: ['sample', 'new', 'newfeature', 'ui'],
471 path: 'samples/HoneycombGallery/index.html',
Alexander Lucasd8472542011-01-19 12:15:38 -0800472 title: {
473 en: 'Honeycomb Gallery'
474 },
475 description: {
Roman Nurika35f6562011-02-04 14:28:22 -0800476 en: 'An image gallery application using APIs that are new in Android 3.0 (a.k.a. Honeycomb).'
Alexander Lucasd8472542011-01-19 12:15:38 -0800477 }
478 },
479 {
Roman Nurike577d722010-04-16 15:57:34 -0700480 tags: ['sample', 'gamedev', 'media'],
481 path: 'samples/JetBoy/index.html',
482 title: {
483 en: 'JetBoy'
484 },
485 description: {
486 en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
487 }
488 },
489 {
Roman Nurike577d722010-04-16 15:57:34 -0700490 tags: ['sample', 'gamedev', 'media'],
491 path: 'samples/LunarLander/index.html',
492 title: {
493 en: 'Lunar Lander'
494 },
495 description: {
496 en: 'A classic Lunar Lander game.'
497 }
498 },
499 {
500 tags: ['sample', 'ui', 'bestpractice', 'layout'],
501 path: 'samples/MultiResolution/index.html',
502 title: {
503 en: 'Multiple Resolutions'
504 },
505 description: {
506 en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
507 }
508 },
509 {
510 tags: ['sample', 'data'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800511 path: 'samples/NFCDemo/index.html',
512 title: {
513 en: 'NFC Demo'
514 },
515 description: {
516 en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
517 }
518 },
519 {
520 tags: ['sample', 'data'],
Roman Nurike577d722010-04-16 15:57:34 -0700521 path: 'samples/NotePad/index.html',
522 title: {
523 en: 'Note Pad'
524 },
525 description: {
526 en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
527 }
528 },
529 {
Roman Nurikcba8efd2011-02-22 14:58:45 -0800530 tags: ['sample', 'new', 'newfeature', 'performance', 'gamedev', 'gl'],
Robert Ly44b362c2011-02-28 15:53:15 -0800531 path: 'samples/RenderScript/index.html',
Robert Ly6518f482011-02-14 18:57:46 -0800532 title: {
Robert Ly44b362c2011-02-28 15:53:15 -0800533 en: 'RenderScript'
Robert Ly6518f482011-02-14 18:57:46 -0800534 },
535 description: {
Robert Ly44b362c2011-02-28 15:53:15 -0800536 en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
Robert Ly6518f482011-02-14 18:57:46 -0800537 }
538 },
539 {
Roman Nurike577d722010-04-16 15:57:34 -0700540 tags: ['sample', 'accountsync'],
541 path: 'samples/SampleSyncAdapter/index.html',
542 title: {
543 en: 'SampleSyncAdapter'
544 },
545 description: {
546 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).'
547 }
548 },
549 {
Scott Main183ecbc2010-11-19 10:20:45 -0800550 tags: ['sample', 'ui', 'search'],
Roman Nurike577d722010-04-16 15:57:34 -0700551 path: 'samples/SearchableDictionary/index.html',
552 title: {
553 en: 'Searchable Dictionary v2'
554 },
555 description: {
556 en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
557 }
558 },
559 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800560 tags: ['sample'],
561 path: 'samples/SipDemo/index.html',
562 title: {
563 en: 'SIP Demo'
564 },
565 description: {
566 en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
567 }
568 },
569 {
Roman Nurike577d722010-04-16 15:57:34 -0700570 tags: ['sample', 'layout', 'ui'],
571 path: 'samples/Snake/index.html',
572 title: {
573 en: 'Snake'
574 },
575 description: {
576 en: 'An implementation of the classic game "Snake."'
577 }
578 },
579 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800580 tags: ['sample', 'input'],
581 path: 'samples/SoftKeyboard/index.html',
582 title: {
583 en: 'Soft Keyboard'
584 },
585 description: {
586 en: 'An example of writing an input method for a software keyboard.'
587 }
588 },
589 {
Scott Main183ecbc2010-11-19 10:20:45 -0800590 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700591 path: 'samples/Spinner/index.html',
592 title: {
593 en: 'Spinner'
594 },
595 description: {
596 en: 'A simple application that serves as an application under test for the SpinnerTest example.'
597 }
598 },
599 {
Scott Main183ecbc2010-11-19 10:20:45 -0800600 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700601 path: 'samples/SpinnerTest/index.html',
602 title: {
603 en: 'SpinnerTest'
604 },
605 description: {
606 en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
607 }
608 },
609 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800610 tags: ['sample', 'new', 'newfeature', 'widgets'],
Adam Cohenfca67c52011-02-10 18:57:45 -0800611 path: 'samples/StackWidget/index.html',
612 title: {
Scott Maind873e662011-02-15 10:58:34 -0800613 en: 'StackView Widget'
Adam Cohenfca67c52011-02-10 18:57:45 -0800614 },
615 description: {
616 en: 'Demonstrates how to create a simple collection widget containing a StackView.'
617 }
618 },
619 {
Scott Main183ecbc2010-11-19 10:20:45 -0800620 tags: ['sample', 'newfeature'],
Roman Nurike577d722010-04-16 15:57:34 -0700621 path: 'samples/TicTacToeLib/index.html',
622 title: {
623 en: 'TicTacToeLib'
624 },
625 description: {
626 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.'
627 }
628 },
629 {
Scott Main183ecbc2010-11-19 10:20:45 -0800630 tags: ['sample', 'newfeature',],
Roman Nurike577d722010-04-16 15:57:34 -0700631 path: 'samples/TicTacToeMain/index.html',
632 title: {
633 en: 'TicTacToeMain'
634 },
635 description: {
636 en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
637 }
638 },
639 {
Robert Ly8cdb2e22011-05-02 17:49:05 -0700640 tags: ['sample', 'new', 'newfeature'],
641 path: 'samples/USB/index.html',
642 title: {
643 en: 'USB'
644 },
645 description: {
646 en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
647 }
648 },
649 {
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100650 tags: ['sample', 'data', 'new'],
651 path: 'samples/VoicemailProviderDemo/index.html',
652 title: {
653 en: 'Voicemail Provider Demo'
654 },
655 description: {
656 en: 'A sample application to demonstrate how to use voicemail content provider APIs.'
657 }
658 },
659 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800660 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700661 path: 'samples/Wiktionary/index.html',
662 title: {
663 en: 'Wiktionary'
664 },
665 description: {
666 en: 'An example of creating interactive widgets for display on the Android home screen.'
667 }
668 },
669 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800670 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700671 path: 'samples/WiktionarySimple/index.html',
672 title: {
673 en: 'Wiktionary (Simplified)'
674 },
675 description: {
676 en: 'A simple Android home screen widgets example.'
677 }
678 },
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700679 {
Winson Chung06d2fa72011-02-10 19:11:33 -0800680 tags: ['sample', 'widgets', 'newfeature', 'new'],
681 path: 'samples/WeatherListWidget/index.html',
682 title: {
Scott Maind873e662011-02-15 10:58:34 -0800683 en: 'Weather List Widget'
Winson Chung06d2fa72011-02-10 19:11:33 -0800684 },
685 description: {
686 en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
687 }
688 },
689 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800690 tags: ['sample', 'layout'],
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700691 path: 'samples/XmlAdapters/index.html',
692 title: {
693 en: 'XML Adapters'
694 },
695 description: {
696 en: 'Binding data to views using XML Adapters examples.'
697 }
698 },
Roman Nurike577d722010-04-16 15:57:34 -0700699
700/////////////////
701/// TUTORIALS ///
702/////////////////
703
704 {
705 tags: ['tutorial'],
706 path: 'tutorials/hello-world.html',
707 title: {
708 en: 'Hello World'
709 },
710 description: {
711 en: 'Beginning basic application development with the Android SDK.'
712 }
713 },
714 {
715 tags: ['tutorial', 'ui', 'layout'],
716 path: 'tutorials/views/index.html',
717 title: {
718 en: 'Hello Views'
719 },
720 description: {
721 en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
722 }
723 },
724 {
725 tags: ['tutorial', 'ui', 'bestpractice'],
726 path: 'tutorials/localization/index.html',
727 title: {
728 en: 'Hello Localization'
729 },
730 description: {
731 en: 'The basics of localizing your applications for multiple languages and locales.'
732 }
733 },
734 {
735 tags: ['tutorial', 'data'],
736 path: 'tutorials/notepad/index.html',
737 title: {
738 en: 'Notepad Tutorial'
739 },
740 description: {
741 en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
742 }
743 },
744 {
Scott Main183ecbc2010-11-19 10:20:45 -0800745 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700746 path: 'tutorials/testing/helloandroid_test.html',
747 title: {
748 en: 'Hello Testing'
749 },
750 description: {
751 en: 'A basic introduction to the Android testing framework.'
752 }
753 },
754 {
Scott Main183ecbc2010-11-19 10:20:45 -0800755 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700756 path: 'tutorials/testing/activity_test.html',
757 title: {
758 en: 'Activity Testing'
759 },
760 description: {
761 en: 'A more advanced demonstration of the Android testing framework and tools.'
762 }
763 }
764];