resources-data.js revision b927ec199c8d6d11f16f94a936352cbe842187b2
1var 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',
23    'multitasking': 'Multi-tasking',
24    'newfeature': 'New Features',
25    'performance': 'Performance',
26    'search': 'Search',
27    'testing': 'Testing',
28    'ui': 'User Interface',
29    'web': 'Web Content',
30    'widgets': 'App Widgets'
31  },
32  misc: {
33    'external': 'External',
34    'new': 'New',
35    'updated': 'Updated'
36  }
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  {
186    tags: ['article', 'ui'],
187    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  {
196    tags: ['article', 'ui'],
197    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  {
206    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  {
216    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  {
246    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  {
256    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  {
266    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  {
286    tags: ['article'],
287    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  {
296    tags: ['article'],
297    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  {
326    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  {
336    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///////////////////
389
390  {
391    tags: ['sample'],
392    path: 'samples/AccelerometerPlay/index.html',
393    title: {
394      en: 'Accelerometer Play'
395    },
396    description: {
397      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.'
398    }
399  },
400  {
401    tags: ['sample', 'accessibility'],
402    path: 'samples/AccessibilityService/index.html',
403    title: {
404      en: 'Accessibility Service'
405    },
406    description: {
407      en: 'Illustrates an accessibility service that provides custom feedback for the Clock application which comes by default with Android devices'
408    }
409  },
410  {
411    tags: ['sample', 'layout', 'ui'],
412    path: 'samples/ApiDemos/index.html',
413    title: {
414      en: 'API Demos'
415    },
416    description: {
417      en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
418    }
419  },
420  {
421    tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
422    path: 'samples/Support4Demos/index.html',
423    title: {
424      en: 'API 4+ Support Demos'
425    },
426    description: {
427      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).'
428    }
429  },
430  {
431    tags: ['sample', 'layout', 'ui'],
432    path: 'samples/Support13Demos/index.html',
433    title: {
434      en: 'API 13+ Support Demos'
435    },
436    description: {
437      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).'
438    }
439  },
440  {
441    tags: ['sample', 'data', 'newfeature', 'accountsync'],
442    path: 'samples/BackupRestore/index.html',
443    title: {
444      en: 'Backup and Restore'
445    },
446    description: {
447      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.'
448    }
449  },
450  {
451    tags: ['sample', 'communication'],
452    path: 'samples/BluetoothChat/index.html',
453    title: {
454      en: 'Bluetooth Chat'
455    },
456    description: {
457      en: 'An application for two-way text messaging over Bluetooth.'
458    }
459  },
460  {
461    tags: ['sample', 'accountsync'],
462    path: 'samples/BusinessCard/index.html',
463    title: {
464      en: 'BusinessCard'
465    },
466    description: {
467      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.'
468    }
469  },
470  {
471    tags: ['sample', 'accountsync'],
472    path: 'samples/ContactManager/index.html',
473    title: {
474      en: 'Contact Manager'
475    },
476    description: {
477      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.'
478    }
479  },
480  {
481    tags: ['sample', 'ui'],
482    path: 'samples/CubeLiveWallpaper/index.html',
483    title: {
484      en: 'Cube Live Wallpaper'
485    },
486    description: {
487      en: 'An application that demonstrates how to create a live wallpaper and  bundle it in an application that users can install on their devices.'
488    }
489  },
490  {
491    tags: ['sample'],
492    path: 'samples/Home/index.html',
493    title: {
494      en: 'Home'
495    },
496    description: {
497      en: 'A home screen replacement application.'
498    }
499  },
500  {
501    tags: ['sample', 'updated', 'newfeature', 'ui'],
502    path: 'samples/HoneycombGallery/index.html',
503    title: {
504      en: 'Honeycomb Gallery'
505    },
506    description: {
507      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.'
508    }
509  },
510  {
511    tags: ['sample', 'gamedev', 'media'],
512    path: 'samples/JetBoy/index.html',
513    title: {
514      en: 'JetBoy'
515    },
516    description: {
517      en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
518    }
519  },
520  {
521    tags: ['sample', 'gamedev', 'media'],
522    path: 'samples/LunarLander/index.html',
523    title: {
524      en: 'Lunar Lander'
525    },
526    description: {
527      en: 'A classic Lunar Lander game.'
528    }
529  },
530  {
531    tags: ['sample', 'ui', 'bestpractice', 'layout'],
532    path: 'samples/MultiResolution/index.html',
533    title: {
534      en: 'Multiple Resolutions'
535    },
536    description: {
537      en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
538    }
539  },
540  {
541    tags: ['sample', 'data'],
542    path: 'samples/NFCDemo/index.html',
543    title: {
544      en: 'NFC Demo'
545    },
546    description: {
547      en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
548    }
549  },
550  {
551    tags: ['sample', 'data'],
552    path: 'samples/NotePad/index.html',
553    title: {
554      en: 'Note Pad'
555    },
556    description: {
557      en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
558    }
559  },
560  {
561    tags: ['sample', 'media', 'updated'],
562    path: 'samples/RandomMusicPlayer/index.html',
563    title: {
564      en: 'Random Music Player'
565    },
566    description: {
567      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.'
568    }
569  },
570  {
571    tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl'],
572    path: 'samples/RenderScript/index.html',
573    title: {
574      en: 'RenderScript'
575    },
576    description: {
577      en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
578    }
579  },
580  {
581    tags: ['sample', 'accountsync'],
582    path: 'samples/SampleSyncAdapter/index.html',
583    title: {
584      en: 'SampleSyncAdapter'
585    },
586    description: {
587      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).'
588    }
589  },
590  {
591    tags: ['sample', 'ui', 'search'],
592    path: 'samples/SearchableDictionary/index.html',
593    title: {
594      en: 'Searchable Dictionary v2'
595    },
596    description: {
597      en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
598    }
599  },
600  {
601    tags: ['sample'],
602    path: 'samples/SipDemo/index.html',
603    title: {
604      en: 'SIP Demo'
605    },
606    description: {
607      en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
608    }
609  },
610  {
611    tags: ['sample', 'layout', 'ui'],
612    path: 'samples/Snake/index.html',
613    title: {
614      en: 'Snake'
615    },
616    description: {
617      en: 'An implementation of the classic game "Snake."'
618    }
619  },
620  {
621    tags: ['sample', 'input'],
622    path: 'samples/SoftKeyboard/index.html',
623    title: {
624      en: 'Soft Keyboard'
625    },
626    description: {
627      en: 'An example of writing an input method for a software keyboard.'
628    }
629  },
630  {
631    tags: ['sample', 'testing'],
632    path: 'samples/Spinner/index.html',
633    title: {
634      en: 'Spinner'
635    },
636    description: {
637      en: 'A simple application that serves as an application under test for the SpinnerTest example.'
638    }
639  },
640  {
641    tags: ['sample', 'testing'],
642    path: 'samples/SpinnerTest/index.html',
643    title: {
644      en: 'SpinnerTest'
645    },
646    description: {
647      en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
648    }
649  },
650  {
651    tags: ['sample', 'newfeature', 'widgets'],
652    path: 'samples/StackWidget/index.html',
653    title: {
654      en: 'StackView Widget'
655    },
656    description: {
657      en: 'Demonstrates how to create a simple collection widget containing a StackView.'
658    }
659  },
660  {
661    tags: ['sample', 'newfeature'],
662    path: 'samples/TicTacToeLib/index.html',
663    title: {
664      en: 'TicTacToeLib'
665    },
666    description: {
667      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.'
668    }
669  },
670  {
671    tags: ['sample', 'newfeature',],
672    path: 'samples/TicTacToeMain/index.html',
673    title: {
674      en: 'TicTacToeMain'
675    },
676    description: {
677      en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
678    }
679  },
680  {
681    tags: ['sample', 'newfeature'],
682    path: 'samples/USB/index.html',
683    title: {
684      en: 'USB'
685    },
686    description: {
687      en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
688    }
689  },
690  {
691    tags: ['sample', 'data', 'new'],
692    path: 'samples/VoicemailProviderDemo/index.html',
693    title: {
694      en: 'Voicemail Provider Demo'
695    },
696    description: {
697      en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
698    }
699  },
700  {
701    tags: ['sample', 'ui', 'widgets'],
702    path: 'samples/Wiktionary/index.html',
703    title: {
704      en: 'Wiktionary'
705    },
706    description: {
707      en: 'An example of creating interactive widgets for display on the Android home screen.'
708    }
709  },
710  {
711    tags: ['sample', 'ui', 'widgets'],
712    path: 'samples/WiktionarySimple/index.html',
713    title: {
714      en: 'Wiktionary (Simplified)'
715    },
716    description: {
717      en: 'A simple Android home screen widgets example.'
718    }
719  },
720  {
721    tags: ['sample', 'widgets', 'newfeature'],
722    path: 'samples/WeatherListWidget/index.html',
723    title: {
724      en: 'Weather List Widget'
725    },
726    description: {
727      en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
728    }
729  },
730  {
731    tags: ['sample', 'layout'],
732    path: 'samples/XmlAdapters/index.html',
733    title: {
734      en: 'XML Adapters'
735    },
736    description: {
737      en: 'Binding data to views using XML Adapters examples.'
738    }
739  },
740  {
741    tags: ['sample', 'new', 'accessibility'],
742    path: 'samples/TtsEngine/index.html',
743    title: {
744      en: 'Text To Speech Engine'
745    },
746    description: {
747      en: 'An example Text To Speech engine written using the Android text to speech engine API in Android 4.0.'
748    }
749  },
750
751/////////////////
752/// TUTORIALS ///
753/////////////////
754
755  {
756    tags: ['tutorial'],
757    path: 'tutorials/hello-world.html',
758    title: {
759      en: 'Hello World'
760    },
761    description: {
762      en: 'Beginning basic application development with the Android SDK.'
763    }
764  },
765  {
766    tags: ['tutorial', 'ui', 'layout'],
767    path: 'tutorials/views/index.html',
768    title: {
769      en: 'Hello Views'
770    },
771    description: {
772      en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
773    }
774  },
775  {
776    tags: ['tutorial', 'ui', 'bestpractice'],
777    path: 'tutorials/localization/index.html',
778    title: {
779      en: 'Hello Localization'
780    },
781    description: {
782      en: 'The basics of localizing your applications for multiple languages and locales.'
783    }
784  },
785  {
786    tags: ['tutorial', 'data'],
787    path: 'tutorials/notepad/index.html',
788    title: {
789      en: 'Notepad Tutorial'
790    },
791    description: {
792      en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
793    }
794  },
795  {
796    tags: ['tutorial', 'gl', 'new'],
797    path: 'tutorials/opengl/opengl-es10.html',
798    title: {
799      en: 'OpenGL ES 1.0'
800    },
801    description: {
802      en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
803    }
804  },
805  {
806    tags: ['tutorial', 'gl', 'new'],
807    path: 'tutorials/opengl/opengl-es20.html',
808    title: {
809      en: 'OpenGL ES 2.0'
810    },
811    description: {
812      en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
813    }
814  },
815  {
816    tags: ['tutorial', 'testing'],
817    path: 'tutorials/testing/helloandroid_test.html',
818    title: {
819      en: 'Hello Testing'
820    },
821    description: {
822      en: 'A basic introduction to the Android testing framework.'
823    }
824  },
825  {
826    tags: ['tutorial', 'testing'],
827    path: 'tutorials/testing/activity_test.html',
828    title: {
829      en: 'Activity Testing'
830    },
831    description: {
832      en: 'A more advanced demonstration of the Android testing framework and tools.'
833    }
834  }
835];
836