1e577d72a3be20e589437271f0e5ca474fab38124Roman Nurikvar ANDROID_TAGS = {
2e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  type: {
3e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'article': 'Article',
4e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'tutorial': 'Tutorial',
5e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'sample': 'Sample',
6e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'video': 'Video',
7e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'library': 'Code Library'
8e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
9e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  topic: {
10e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'accessibility': 'Accessibility',
11e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'accountsync': 'Accounts & Sync',
12e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'bestpractice': 'Best Practices',
13e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'communication': 'Communication',
14e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'compatibility': 'Compatibility',
15e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'data': 'Data Access',
16e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'drawing': 'Canvas Drawing',
17e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'gamedev': 'Game Development',
18e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'gl': 'OpenGL ES',
19e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'input': 'Input Methods',
20e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'intent': 'Intents',
21e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'layout': 'Layouts/Views',
22e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'media': 'Multimedia',
23e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    'multitasking': 'Multi-tasking',
24e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'newfeature': 'New Features',
25e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'performance': 'Performance',
26e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'search': 'Search',
27e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'testing': 'Testing',
28e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'ui': 'User Interface',
2994be4a5e1ad833d7e5d0dbed29b806ba8fd5409eRoman Nurik    'web': 'Web Content',
3094be4a5e1ad833d7e5d0dbed29b806ba8fd5409eRoman Nurik    'widgets': 'App Widgets'
31e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
32e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  misc: {
33e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'external': 'External',
349ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    'new': 'New',
359ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    'updated': 'Updated'
36e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  }
37e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik};
38e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
39e577d72a3be20e589437271f0e5ca474fab38124Roman Nurikvar ANDROID_RESOURCES = [
40e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
41e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik//////////////////////////
42e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// TECHNICAL ARTICLES ///
43e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik//////////////////////////
44e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
45e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
46e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
47e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/avoiding-memory-leaks.html',
48e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
49e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Avoiding Memory Leaks'
50e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
51e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
52e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
53e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
54e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
55e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
56e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'compatibility'],
57e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/backward-compatibility.html',
58e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
59e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Backward Compatibility'
60e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
61e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
62e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
63e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
64e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
65e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
66e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'intent'],
67e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/can-i-use-this-intent.html',
68e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
69e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Can I Use this Intent?'
70e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
71e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
72e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
73e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
74e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
75e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
76e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
77e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/creating-input-method.html',
78e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
79e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Creating an Input Method'
80e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
81e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
82e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
83e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
84e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
85e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
86e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'drawing', 'ui'],
87e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/drawable-mutations.html',
88e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
89e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Drawable Mutations'
90e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
91e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
92e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
93e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
94e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
95e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
96e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'bestpractice', 'ui'],
97e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/faster-screen-orientation-change.html',
98e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
99e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Faster Screen Orientation Change'
100e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
101e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
102e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
103e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
104e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
105e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
106e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'compatibility'],
107e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/future-proofing.html',
108e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
109e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Future-Proofing Your Apps'
110e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
111e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
112e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
113e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
114e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
115e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
116e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
117e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/gestures.html',
118e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
119e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Gestures'
120e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
121e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
122e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
123e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
124e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
125e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
126e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'gamedev', 'gl'],
127e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/glsurfaceview.html',
128e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
129e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Introducing GLSurfaceView'
130e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
131e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
132e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
133e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
134e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
135e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
136e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'layout'],
137e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-reuse.html',
138e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
139e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Creating Reusable UI Components'
140e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
141e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
142e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.'
143e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
144e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
145e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
146e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
147e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-efficiency.html',
148e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
149e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Creating Efficient Layouts'
150e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
151e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
152e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
153e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
154e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
155e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
156e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
157e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-stubs.html',
158e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
159e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Using ViewStubs'
160e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
161e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
162e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
163e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
164e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
165e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
166e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
167e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-merge.html',
168e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
169e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Merging Layouts'
170e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
171e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
172e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
173e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
174e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
175e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
176e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'performance'],
177e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/listview-backgrounds.html',
178e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
179e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'ListView Backgrounds: An Optimization'
180e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
181e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
182e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
183e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
184e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
185e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
186a35f65692d9f97264dc939d5749db86845141810Roman Nurik    tags: ['article', 'ui'],
187e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/live-folders.html',
188e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
189e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Live Folders'
190e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
191e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
192e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
193e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
194e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
195e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
196a35f65692d9f97264dc939d5749db86845141810Roman Nurik    tags: ['article', 'ui'],
197e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/live-wallpapers.html',
198e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
199e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Live Wallpapers'
200e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
201e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
202e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
203e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
204e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
205e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
206e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    tags: ['article', 'bestpractice', 'multitasking'],
207e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    path: 'articles/multitasking-android-way.html',
208e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    title: {
209e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik      en: 'Multitasking the Android Way'
210e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    },
211e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    description: {
212e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik      en: 'This article describes best practices and user experience guidelines for multi-tasking on Android.'
213e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    }
214e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik  },
215e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik  {
216e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
217e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/on-screen-inputs.html',
218e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
219e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Onscreen Input Methods'
220e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
221e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
222e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
223e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
224e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
225e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
226e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
227e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/painless-threading.html',
228e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
229e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Painless Threading'
230e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
231e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
232e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
233e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
234e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
235e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
236e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'search'],
237e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/qsb.html',
238e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
239e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Quick Search Box'
240e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
241e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
242e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
243e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
244e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
245e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
246ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    tags: ['article', 'input', 'search', 'ui'],
247ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    path: 'articles/speech-input.html',
248ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    title: {
249ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik      en: 'Speech Input'
250ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    },
251ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    description: {
252ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik      en: 'This articles describes the basics of integrating speech recognition into Android applications.'
253ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik    }
254ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik  },
255ecaf3f4f28ac3ec12fa1c5dd967c0f2ffd5bd3a7Roman Nurik  {
256e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    tags: ['article', 'compatibility', 'multitasking'],
257e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    path: 'articles/service-api-changes-starting-with.html',
258e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    title: {
259e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik      en: 'Service API changes starting with Android 2.0'
260e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    },
261e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    description: {
262e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik      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.'
263e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik    }
264e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik  },
265e7d6007872af7f27b62bfb46aadf2b7a07c0eac0Roman Nurik  {
266e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui'],
267e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/touch-mode.html',
268e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
269e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Touch Mode'
270e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
271e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
272e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
273e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
274e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
275e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
276e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
277e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/track-mem.html',
278e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
279e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Tracking Memory Allocations'
280e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
281e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
282e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
283e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
284e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
285e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
286a35f65692d9f97264dc939d5749db86845141810Roman Nurik    tags: ['article'],
287e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/ui-1.5.html',
288e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
289e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'UI Framework Changes in Android 1.5'
290e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
291e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
292e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.'
293e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
294e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
295e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
296a35f65692d9f97264dc939d5749db86845141810Roman Nurik    tags: ['article'],
297e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/ui-1.6.html',
298e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
299e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'UI Framework Changes in Android 1.6'
300e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
301e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
302e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
303e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
304e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
305e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
306e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'bestpractice'],
307e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/timed-ui-updates.html',
308e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
309e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Updating the UI from a Timer'
310e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
311e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
312e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
313e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
314e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
315e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
316e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'accessibility'],
317e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/tts.html',
318e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
319e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Using Text-to-Speech'
320e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
321e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
322e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
323e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
324e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
325e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
326b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    tags: ['article', 'accountsync', 'data'],
327b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    path: 'articles/contacts.html',
328b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    title: {
329b410330b2eb1617fe75b2e61995a6987a5172510Scott Main      en: 'Using the Contacts API'
330b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    },
331b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    description: {
332b410330b2eb1617fe75b2e61995a6987a5172510Scott Main      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.'
333b410330b2eb1617fe75b2e61995a6987a5172510Scott Main    }
334b410330b2eb1617fe75b2e61995a6987a5172510Scott Main  },
335b410330b2eb1617fe75b2e61995a6987a5172510Scott Main  {
336e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'web'],
337e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/using-webviews.html',
338e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
339e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Using WebViews'
340e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
341e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
342e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
343e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
344e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
345e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
346e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui'],
347e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/wikinotes-linkify.html',
348e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
349e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'WikiNotes: Linkify your Text!'
350e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
351e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
352e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
353e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
354e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
355e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
356e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'intent'],
357e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/wikinotes-intents.html',
358e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
359e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'WikiNotes: Routing Intents'
360e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
361e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
362e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
363e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
364e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
365e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
366e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'performance'],
367e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/window-bg-speed.html',
368e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
369e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Window Backgrounds & UI Speed'
370e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
371e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
372e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
373e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
374e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
375e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
376e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
377e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/zipalign.html',
378e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
379e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Zipalign: an Easy Optimization'
380e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
381e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
382e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
383e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
384e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
385e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
386e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik///////////////////
387e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// SAMPLE CODE ///
388e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik///////////////////
3893f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly
3903f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
3919ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample'],
3923f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    path: 'samples/AccelerometerPlay/index.html',
3933f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    title: {
3943f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'Accelerometer Play'
3953f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    },
3963f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    description: {
39794be4a5e1ad833d7e5d0dbed29b806ba8fd5409eRoman Nurik      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.'
3983f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    }
3993f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  },
4003f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
401f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    tags: ['sample', 'new', 'ui', 'compatibility', 'newfeature'],
402f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    path: 'samples/ActionBarCompat/index.html',
403f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    title: {
404f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik      en: 'Action Bar Compatibility'
405f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    },
406f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    description: {
407f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik      en: 'Shows how to use the action bar on both pre-API 11 and API 11+ devices, maximizing code re-use.'
408f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik    }
409f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik  },
410f4b2ba18942eb2ae06a8f64dda5c691b2a2a914bRoman Nurik  {
411d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly    tags: ['sample', 'new'],
41249eb519696526fa066830bd4a2341b6a105ce5c8Scott Main    path: 'samples/AndroidBeamDemo/index.html',
413d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly    title: {
41449eb519696526fa066830bd4a2341b6a105ce5c8Scott Main      en: 'Android Beam Demo'
415d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly    },
416d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly    description: {
417d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly      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.'
418d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly    }
419d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly  },
420d8afdb49ffaf727ff5d493854501d42c27faae28Robert Ly  {
421e09743279ffb104fa44aa1f499b83331b4ff8dc2Scott Main    tags: ['sample', 'layout', 'ui', 'updated'],
422e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/ApiDemos/index.html',
423e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
424e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'API Demos'
425e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
426e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
427e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
428e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
429e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
430e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
4319ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
4322f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    path: 'samples/Support4Demos/index.html',
4332f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    title: {
4342f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn      en: 'API 4+ Support Demos'
4352f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    },
4362f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    description: {
4372f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn      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).'
4382f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    }
4392f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn  },
4402f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn  {
4419ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'layout', 'ui'],
4422f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    path: 'samples/Support13Demos/index.html',
4432f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    title: {
4442f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn      en: 'API 13+ Support Demos'
4452f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    },
4462f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    description: {
4472f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn      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).'
4482f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn    }
4492f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn  },
4502f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn  {
4513f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample', 'data', 'newfeature', 'accountsync'],
452e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BackupRestore/index.html',
453e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
454e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Backup and Restore'
455e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
456e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
457e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
458e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
459e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
460e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
461e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'communication'],
462e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BluetoothChat/index.html',
463e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
464e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Bluetooth Chat'
465e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
466e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
467e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An application for two-way text messaging over Bluetooth.'
468e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
469e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
470e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
4712d410df1c7852aec4131f276841758d43e9507f1Fred Chung    tags: ['sample', 'communication', 'new'],
4722d410df1c7852aec4131f276841758d43e9507f1Fred Chung    path: 'samples/BluetoothHDP/index.html',
4732d410df1c7852aec4131f276841758d43e9507f1Fred Chung    title: {
4742d410df1c7852aec4131f276841758d43e9507f1Fred Chung      en: 'Bluetooth HDP Demo'
4752d410df1c7852aec4131f276841758d43e9507f1Fred Chung    },
4762d410df1c7852aec4131f276841758d43e9507f1Fred Chung    description: {
4772d410df1c7852aec4131f276841758d43e9507f1Fred Chung      en: 'A sample application that demonstrates how to communicate with a Bluetooth Health Device Profile (HDP) device.'
4782d410df1c7852aec4131f276841758d43e9507f1Fred Chung    }
4792d410df1c7852aec4131f276841758d43e9507f1Fred Chung  },
4802d410df1c7852aec4131f276841758d43e9507f1Fred Chung  {
481e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'accountsync'],
482e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BusinessCard/index.html',
483e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
484e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'BusinessCard'
485e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
486e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
487e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
488e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
489e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
490e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
491e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'accountsync'],
492e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/ContactManager/index.html',
493e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
494e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Contact Manager'
495e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
496e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
497e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
498e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
499e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
500e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
5013f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample', 'ui'],
5023f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    path: 'samples/CubeLiveWallpaper/index.html',
5033f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    title: {
5043f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'Cube Live Wallpaper'
5053f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    },
5063f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    description: {
5073f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'An application that demonstrates how to create a live wallpaper and  bundle it in an application that users can install on their devices.'
5083f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    }
5093f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  },
5103f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
511e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample'],
512e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Home/index.html',
513e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
514e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Home'
515e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
516e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
517e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A home screen replacement application.'
518d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas    }
519d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas  },
520d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas  {
5219ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'updated', 'newfeature', 'ui'],
522a35f65692d9f97264dc939d5749db86845141810Roman Nurik    path: 'samples/HoneycombGallery/index.html',
523d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas    title: {
524d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas      en: 'Honeycomb Gallery'
525d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas    },
526d84725401d7b79b79020793d06427cad43fa95b1Alexander Lucas    description: {
5279ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main      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.'
528e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
529e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
530e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
531e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'gamedev', 'media'],
532e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/JetBoy/index.html',
533e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
534e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'JetBoy'
535e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
536e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
537e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
538e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
539e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
540e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
541e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'gamedev', 'media'],
542e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/LunarLander/index.html',
543e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
544e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Lunar Lander'
545e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
546e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
547e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A classic Lunar Lander game.'
548e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
549e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
550e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
551e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui', 'bestpractice', 'layout'],
552e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/MultiResolution/index.html',
553e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
554e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Multiple Resolutions'
555e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
556e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
557e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
558e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
559e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
560e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
561801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    tags: ['sample', 'new', 'bestpractices'],
562801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    path: 'samples/newsreader/index.html',
563801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    title: {
564801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main      en: 'News Reader'
565801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    },
566801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    description: {
567801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main      en: 'A sample app demonstrating best practices to support multiple screen sizes and densities.'
568801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main    }
569801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main  },
570801fda548c719a8618e7f4cd64cad8404b0970b9Scott Main  {
571e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'data'],
5723f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    path: 'samples/NFCDemo/index.html',
5733f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    title: {
5743f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'NFC Demo'
5753f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    },
5763f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    description: {
5773f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
5783f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    }
5793f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  },
5803f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
5813f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample', 'data'],
582e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/NotePad/index.html',
583e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
584e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Note Pad'
585e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
586e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
587e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
588e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
589e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
590e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
591b927ec199c8d6d11f16f94a936352cbe842187b2Roman Nurik    tags: ['sample', 'media', 'updated'],
5929e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira    path: 'samples/RandomMusicPlayer/index.html',
5939e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira    title: {
5949e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira      en: 'Random Music Player'
5959e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira    },
5969e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira    description: {
597b927ec199c8d6d11f16f94a936352cbe842187b2Roman Nurik      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.'
5989e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira    }
5999e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira  },
6009e67587d022675f4b6f62e565b23745c4a550ed9Bruno Oliveira  {
60192ebfd7f803d0ccd7b4dec1c5048b417e83b98cdRobert Ly    tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl', 'updated'],
60244b362c34066764b6711ce04923ce71b5d011283Robert Ly    path: 'samples/RenderScript/index.html',
6036518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly    title: {
60444b362c34066764b6711ce04923ce71b5d011283Robert Ly      en: 'RenderScript'
6056518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly    },
6066518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly    description: {
60744b362c34066764b6711ce04923ce71b5d011283Robert Ly      en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
6086518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly    }
6096518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly  },
6106518f486a5b9cdcb48df3ca09732b51b6df249bfRobert Ly  {
611c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main    tags: ['sample', 'input', 'new'],
61244619d3e087138775fb19fbd5d7b9f497a0805f4satok    path: 'samples/SpellChecker/SampleSpellCheckerService/index.html',
613c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main    title: {
614182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok      en: 'Spell Checker Service'
615c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main    },
616c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main    description: {
617182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok      en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerService</code></a>.'
618182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    }
619182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok  },
620182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok  {
621182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    tags: ['sample', 'input', 'new'],
622182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    path: 'samples/SpellChecker/HelloSpellChecker/index.html',
623182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    title: {
624182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok      en: 'Spell Checker Client'
625182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    },
626182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok    description: {
627182e4ae2f4bbfdd2272f6e425c6f3734b3f157bfsatok        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>.'
628c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main    }
629c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main  },
630c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main  {
631e1e9e9379dc1236e15bd379f2bdc871c096a882cScott Main    tags: ['sample', 'accountsync', 'updated'],
632e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SampleSyncAdapter/index.html',
633e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
634e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'SampleSyncAdapter'
635e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
636e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
637e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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).'
638e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
639e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
640e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
641183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['sample', 'ui', 'search'],
642e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SearchableDictionary/index.html',
643e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
644e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Searchable Dictionary v2'
645e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
646e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
647e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
648e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
649e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
650e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
6513f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample'],
6523f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    path: 'samples/SipDemo/index.html',
6533f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    title: {
6543f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'SIP Demo'
6553f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    },
6563f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    description: {
6573f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
6583f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    }
6593f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  },
6603f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
661e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'layout', 'ui'],
662e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Snake/index.html',
663e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
664e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Snake'
665e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
666e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
667e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An implementation of the classic game "Snake."'
668e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
669e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
670e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
6713f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample', 'input'],
6723f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    path: 'samples/SoftKeyboard/index.html',
6733f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    title: {
6743f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'Soft Keyboard'
6753f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    },
6763f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    description: {
6773f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly      en: 'An example of writing an input method for a software keyboard.'
6783f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    }
6793f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  },
6803f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly  {
681183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['sample', 'testing'],
682e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Spinner/index.html',
683e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
684e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Spinner'
685e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
686e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
687e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A simple application that serves as an application under test for the SpinnerTest example.'
688e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
689e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
690e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
691183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['sample', 'testing'],
692e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SpinnerTest/index.html',
693e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
694e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'SpinnerTest'
695e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
696e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
697e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
698e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
699e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
700e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
7019ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'newfeature', 'widgets'],
702fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen    path: 'samples/StackWidget/index.html',
703fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen    title: {
704d873e660c57eabb15a95acf71398c38929504284Scott Main      en: 'StackView Widget'
705fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen    },
706fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen    description: {
707fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen      en: 'Demonstrates how to create a simple collection widget containing a StackView.'
708fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen    }
709fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen  },
710fca67c5525bf26ac9eadb03476fb846c167387f4Adam Cohen  {
711183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['sample', 'newfeature'],
712e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/TicTacToeLib/index.html',
713e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
714e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'TicTacToeLib'
715e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
716e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
717e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      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.'
718e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
719e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
720e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
721183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['sample', 'newfeature',],
722e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/TicTacToeMain/index.html',
723e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
724e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'TicTacToeMain'
725e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
726e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
727e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
7288e076fe774386762da21d78823f905751f2803d9Fred Chung    }
7298e076fe774386762da21d78823f905751f2803d9Fred Chung  },
7308e076fe774386762da21d78823f905751f2803d9Fred Chung  {
7318e076fe774386762da21d78823f905751f2803d9Fred Chung    tags: ['sample', 'communication', 'new'],
7328e076fe774386762da21d78823f905751f2803d9Fred Chung    path: 'samples/ToyVpn/index.html',
7338e076fe774386762da21d78823f905751f2803d9Fred Chung    title: {
7348e076fe774386762da21d78823f905751f2803d9Fred Chung      en: 'Toy VPN Client'
7358e076fe774386762da21d78823f905751f2803d9Fred Chung    },
7368e076fe774386762da21d78823f905751f2803d9Fred Chung    description: {
7378e076fe774386762da21d78823f905751f2803d9Fred Chung      en: 'A sample application that illustrates the creation of a custom VPN client.'
738e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
739e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
740e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
7419ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'newfeature'],
7428cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly    path: 'samples/USB/index.html',
7438cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly    title: {
7448cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly      en: 'USB'
7458cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly    },
7468cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly    description: {
7478cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly      en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
7488cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly    }
7498cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly  },
7508cdb2e2d834fc1dbff8d02124a08c0f426aa1de7Robert Ly  {
751acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    tags: ['sample', 'data', 'new'],
752acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    path: 'samples/VoicemailProviderDemo/index.html',
753acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    title: {
754c4c541a0dab65c2808e0a927a2c91d6e596e7a0dScott Main      en: 'Voicemail Provider'
755acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    },
756acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    description: {
7579ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main      en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
758acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee    }
759acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee  },
760acd6f5fcfae019f7bd1fdb47b42c7771049df645Debashish Chatterjee  {
7615d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    tags: ['sample','newfeature', 'new'],
7625d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    path: 'samples/WiFiDirectDemo/index.html',
7635d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    title: {
7645d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani      en: 'Wi-Fi Direct Demo'
7655d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    },
7665d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    description: {
7675d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani      en: 'A demo application to demonstrate how to use Wi-Fi Direct APIs.'
7685d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani    }
7695d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani  },
7705d0dbea9e9630ff2792a76b00b1016ae8215cdd9Anirudh Dewani  {
77194be4a5e1ad833d7e5d0dbed29b806ba8fd5409eRoman Nurik    tags: ['sample', 'ui', 'widgets'],
772e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Wiktionary/index.html',
773e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
774e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Wiktionary'
775e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
776e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
777e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An example of creating interactive widgets for display on the Android home screen.'
778e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
779e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
780e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
78194be4a5e1ad833d7e5d0dbed29b806ba8fd5409eRoman Nurik    tags: ['sample', 'ui', 'widgets'],
782e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/WiktionarySimple/index.html',
783e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
784e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Wiktionary (Simplified)'
785e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
786e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
787e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A simple Android home screen widgets example.'
788e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
789e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
7903eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne  {
7919ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main    tags: ['sample', 'widgets', 'newfeature'],
79206d2fa705ba5a11f712187229238b0d41b446a52Winson Chung    path: 'samples/WeatherListWidget/index.html',
79306d2fa705ba5a11f712187229238b0d41b446a52Winson Chung    title: {
794d873e660c57eabb15a95acf71398c38929504284Scott Main      en: 'Weather List Widget'
79506d2fa705ba5a11f712187229238b0d41b446a52Winson Chung    },
79606d2fa705ba5a11f712187229238b0d41b446a52Winson Chung    description: {
79706d2fa705ba5a11f712187229238b0d41b446a52Winson Chung      en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
79806d2fa705ba5a11f712187229238b0d41b446a52Winson Chung    }
79906d2fa705ba5a11f712187229238b0d41b446a52Winson Chung  },
80006d2fa705ba5a11f712187229238b0d41b446a52Winson Chung  {
8013f9b6445cb9c384a428364a1cca85ca3c172fbe6Robert Ly    tags: ['sample', 'layout'],
8023eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne    path: 'samples/XmlAdapters/index.html',
8033eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne    title: {
8043eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne      en: 'XML Adapters'
8053eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne    },
8063eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne    description: {
8073eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne      en: 'Binding data to views using XML Adapters examples.'
8083eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne    }
8093eb9b66deb18888d7f52ed901abf342506aa3db7Gilles Debunne  },
810af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath  {
811af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    tags: ['sample', 'new', 'accessibility'],
812af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    path: 'samples/TtsEngine/index.html',
813af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    title: {
814af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath      en: 'Text To Speech Engine'
815af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    },
816af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    description: {
8179ed517da9be5a1090522e9fd7be217d1f1da6445Scott Main      en: 'An example Text To Speech engine written using the Android text to speech engine API in Android 4.0.'
818af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath    }
819af1ad3cc2d6152dfe62520a87bf5fa85337ca1abNarayan Kamath  },
820e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
821e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/////////////////
822e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// TUTORIALS ///
823e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/////////////////
824e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
825e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
826e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial'],
827e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/hello-world.html',
828e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
829e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello World'
830e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
831e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
832e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Beginning basic application development with the Android SDK.'
833e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
834e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
835e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
836e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'ui', 'layout'],
837e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/views/index.html',
838e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
839e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Views'
840e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
841e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
842e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
843e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
844e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
845e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
846e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'ui', 'bestpractice'],
847e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/localization/index.html',
848e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
849e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Localization'
850e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
851e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
852e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'The basics of localizing your applications for multiple languages and locales.'
853e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
854e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
855e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
856e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'data'],
857e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/notepad/index.html',
858e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
859e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Notepad Tutorial'
860e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
861e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
862e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
863e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
864e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
865e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
8660664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    tags: ['tutorial', 'gl', 'new'],
8670664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    path: 'tutorials/opengl/opengl-es10.html',
8680664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    title: {
8690664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez      en: 'OpenGL ES 1.0'
8700664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    },
8710664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    description: {
8720664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez      en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
8730664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    }
8740664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez  },
8750664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez  {
8760664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    tags: ['tutorial', 'gl', 'new'],
8770664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    path: 'tutorials/opengl/opengl-es20.html',
8780664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    title: {
8790664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez      en: 'OpenGL ES 2.0'
8800664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    },
8810664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    description: {
8820664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez      en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
8830664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez    }
8840664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez  },
8850664a8f661e15991e20cab1c0daa41f5e21977abJoe Fernandez  {
886183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['tutorial', 'testing'],
887e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/testing/helloandroid_test.html',
888e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
889e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Testing'
890e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
891e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
892e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A basic introduction to the Android testing framework.'
893e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
894e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
895e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
896183ecbc229d70e30effe7e8e7173ff9228728316Scott Main    tags: ['tutorial', 'testing'],
897e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/testing/activity_test.html',
898e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
899e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Activity Testing'
900e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
901e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
902e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A more advanced demonstration of the Android testing framework and tools.'
903e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
904e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  }
905e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik];
906