resources-data.js revision e577d72a3be20e589437271f0e5ca474fab38124
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',
23e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'newfeature': 'New Features',
24e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'performance': 'Performance',
25e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'search': 'Search',
26e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'testing': 'Testing',
27e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'ui': 'User Interface',
28e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'web': 'Web Content'
29e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
30e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  misc: {
31e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'external': 'External',
32e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    'new': 'New'
33e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  }
34e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik};
35e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
36e577d72a3be20e589437271f0e5ca474fab38124Roman Nurikvar ANDROID_RESOURCES = [
37e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
38e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik//////////////////////////
39e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// TECHNICAL ARTICLES ///
40e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik//////////////////////////
41e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
42e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
43e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
44e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/avoiding-memory-leaks.html',
45e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
46e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Avoiding Memory Leaks'
47e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
48e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
49e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
50e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
51e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
52e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
53e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'compatibility'],
54e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/backward-compatibility.html',
55e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
56e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Backward Compatibility'
57e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
58e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
59e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
60e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
61e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
62e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
63e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'intent'],
64e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/can-i-use-this-intent.html',
65e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
66e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Can I Use this Intent?'
67e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
68e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
69e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
70e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
71e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
72e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
73e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
74e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/creating-input-method.html',
75e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
76e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Creating an Input Method'
77e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
78e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
79e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
80e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
81e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
82e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
83e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'drawing', 'ui'],
84e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/drawable-mutations.html',
85e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
86e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Drawable Mutations'
87e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
88e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
89e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
90e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
91e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
92e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
93e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'bestpractice', 'ui'],
94e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/faster-screen-orientation-change.html',
95e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
96e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Faster Screen Orientation Change'
97e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
98e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
99e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
100e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
101e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
102e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
103e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'compatibility'],
104e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/future-proofing.html',
105e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
106e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Future-Proofing Your Apps'
107e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
108e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
109e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
110e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
111e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
112e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
113e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
114e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/gestures.html',
115e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
116e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Gestures'
117e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
118e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
119e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
120e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
121e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
122e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
123e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'gamedev', 'gl'],
124e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/glsurfaceview.html',
125e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
126e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Introducing GLSurfaceView'
127e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
128e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
129e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
130e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
131e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
132e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
133e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'layout'],
134e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-reuse.html',
135e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
136e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Creating Reusable UI Components'
137e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
138e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
139e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.'
140e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
141e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
142e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
143e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
144e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-efficiency.html',
145e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
146e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Creating Efficient Layouts'
147e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
148e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
149e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
150e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
151e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
152e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
153e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
154e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-stubs.html',
155e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
156e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Using ViewStubs'
157e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
158e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
159e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
160e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
161e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
162e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
163e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
164e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/layout-tricks-merge.html',
165e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
166e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Layout Tricks: Merging Layouts'
167e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
168e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
169e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
170e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
171e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
172e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
173e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'performance'],
174e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/listview-backgrounds.html',
175e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
176e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'ListView Backgrounds: An Optimization'
177e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
178e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
179e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
180e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
181e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
182e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
183e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'newfeature'],
184e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/live-folders.html',
185e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
186e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Live Folders'
187e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
188e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
189e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
190e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
191e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
192e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
193e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'newfeature'],
194e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/live-wallpapers.html',
195e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
196e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Live Wallpapers'
197e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
198e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
199e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
200e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
201e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
202e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
203e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'input'],
204e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/on-screen-inputs.html',
205e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
206e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Onscreen Input Methods'
207e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
208e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
209e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
210e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
211e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
212e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
213e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
214e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/painless-threading.html',
215e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
216e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Painless Threading'
217e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
218e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
219e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
220e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
221e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
222e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
223e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'search'],
224e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/qsb.html',
225e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
226e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Quick Search Box'
227e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
228e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
229e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
230e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
231e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
232e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
233e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui'],
234e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/touch-mode.html',
235e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
236e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Touch Mode'
237e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
238e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
239e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
240e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
241e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
242e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
243e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
244e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/track-mem.html',
245e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
246e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Tracking Memory Allocations'
247e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
248e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
249e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
250e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
251e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
252e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
253e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'newfeature'],
254e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/ui-1.5.html',
255e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
256e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'UI Framework Changes in Android 1.5'
257e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
258e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
259e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
260e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
261e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
262e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
263e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'newfeature'],
264e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/ui-1.6.html',
265e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
266e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'UI Framework Changes in Android 1.6'
267e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
268e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
269e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
270e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
271e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
272e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
273e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'bestpractice'],
274e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/timed-ui-updates.html',
275e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
276e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Updating the UI from a Timer'
277e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
278e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
279e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
280e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
281e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
282e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
283e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'accessibility'],
284e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/tts.html',
285e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
286e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Using Text-to-Speech'
287e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
288e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
289e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
290e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
291e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
292e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
293e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'web'],
294e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/using-webviews.html',
295e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
296e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Using WebViews'
297e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
298e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
299e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
300e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
301e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
302e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
303e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui'],
304e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/wikinotes-linkify.html',
305e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
306e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'WikiNotes: Linkify your Text!'
307e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
308e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
309e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
310e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
311e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
312e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
313e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'intent'],
314e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/wikinotes-intents.html',
315e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
316e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'WikiNotes: Routing Intents'
317e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
318e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
319e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
320e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
321e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
322e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
323e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'ui', 'performance'],
324e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/window-bg-speed.html',
325e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
326e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Window Backgrounds & UI Speed'
327e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
328e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
329e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
330e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
331e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
332e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
333e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['article', 'performance', 'bestpractice'],
334e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'articles/zipalign.html',
335e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
336e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Zipalign: an Easy Optimization'
337e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
338e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
339e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
340e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
341e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
342e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
343e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik///////////////////
344e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// SAMPLE CODE ///
345e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik///////////////////
346e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
347e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
348e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'layout', 'ui'],
349e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/ApiDemos/index.html',
350e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
351e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'API Demos'
352e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
353e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
354e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
355e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
356e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
357e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
358e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'data', 'newfeature', 'accountsync', 'new'],
359e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BackupRestore/index.html',
360e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
361e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Backup and Restore'
362e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
363e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
364e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
365e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
366e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
367e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
368e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'communication'],
369e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BluetoothChat/index.html',
370e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
371e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Bluetooth Chat'
372e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
373e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
374e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An application for two-way text messaging over Bluetooth.'
375e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
376e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
377e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
378e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'accountsync'],
379e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/BusinessCard/index.html',
380e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
381e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'BusinessCard'
382e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
383e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
384e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
385e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
386e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
387e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
388e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'accountsync'],
389e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/ContactManager/index.html',
390e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
391e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Contact Manager'
392e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
393e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
394e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
395e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
396e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
397e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
398e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample'],
399e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Home/index.html',
400e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
401e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Home'
402e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
403e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
404e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A home screen replacement application.'
405e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
406e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
407e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
408e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'gamedev', 'media'],
409e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/JetBoy/index.html',
410e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
411e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'JetBoy'
412e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
413e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
414e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
415e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
416e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
417e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
418e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui', 'newfeature'],
419e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/CubeLiveWallpaper/index.html',
420e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
421e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Live Wallpaper'
422e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
423e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
424e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An application that demonstrates how to create a live wallpaper and  bundle it in an application that users can install on their devices.'
425e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
426e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
427e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
428e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'gamedev', 'media'],
429e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/LunarLander/index.html',
430e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
431e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Lunar Lander'
432e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
433e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
434e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A classic Lunar Lander game.'
435e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
436e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
437e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
438e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui', 'bestpractice', 'layout'],
439e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/MultiResolution/index.html',
440e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
441e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Multiple Resolutions'
442e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
443e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
444e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
445e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
446e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
447e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
448e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'data'],
449e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/NotePad/index.html',
450e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
451e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Note Pad'
452e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
453e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
454e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
455e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
456e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
457e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
458e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'accountsync'],
459e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SampleSyncAdapter/index.html',
460e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
461e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'SampleSyncAdapter'
462e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
463e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
464e577d72a3be20e589437271f0e5ca474fab38124Roman 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).'
465e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
466e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
467e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
468e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui', 'search', 'new'],
469e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SearchableDictionary/index.html',
470e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
471e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Searchable Dictionary v2'
472e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
473e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
474e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
475e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
476e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
477e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
478e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'layout', 'ui'],
479e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Snake/index.html',
480e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
481e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Snake'
482e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
483e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
484e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An implementation of the classic game "Snake."'
485e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
486e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
487e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
488e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'testing', 'new'],
489e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Spinner/index.html',
490e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
491e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Spinner'
492e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
493e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
494e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A simple application that serves as an application under test for the SpinnerTest example.'
495e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
496e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
497e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
498e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'testing', 'new'],
499e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SpinnerTest/index.html',
500e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
501e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'SpinnerTest'
502e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
503e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
504e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
505e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
506e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
507e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
508e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'newfeature', 'new'],
509e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/TicTacToeLib/index.html',
510e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
511e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'TicTacToeLib'
512e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
513e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
514e577d72a3be20e589437271f0e5ca474fab38124Roman 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.'
515e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
516e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
517e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
518e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'newfeature', 'new'],
519e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/TicTacToeMain/index.html',
520e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
521e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'TicTacToeMain'
522e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
523e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
524e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
525e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
526e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
527e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
528e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'input'],
529e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/SoftKeyboard/index.html',
530e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
531e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Soft Keyboard'
532e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
533e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
534e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An example of writing an input method for a software keyboard.'
535e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
536e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
537e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
538e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui'],
539e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/Wiktionary/index.html',
540e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
541e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Wiktionary'
542e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
543e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
544e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'An example of creating interactive widgets for display on the Android home screen.'
545e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
546e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
547e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
548e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['sample', 'ui'],
549e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'samples/WiktionarySimple/index.html',
550e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
551e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Wiktionary (Simplified)'
552e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
553e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
554e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A simple Android home screen widgets example.'
555e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
556e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
557e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
558e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/////////////////
559e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/// TUTORIALS ///
560e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik/////////////////
561e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik
562e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
563e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial'],
564e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/hello-world.html',
565e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
566e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello World'
567e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
568e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
569e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Beginning basic application development with the Android SDK.'
570e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
571e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
572e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
573e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'ui', 'layout'],
574e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/views/index.html',
575e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
576e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Views'
577e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
578e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
579e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
580e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
581e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
582e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
583e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'ui', 'bestpractice'],
584e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/localization/index.html',
585e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
586e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Localization'
587e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
588e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
589e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'The basics of localizing your applications for multiple languages and locales.'
590e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
591e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
592e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
593e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'data'],
594e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/notepad/index.html',
595e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
596e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Notepad Tutorial'
597e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
598e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
599e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
600e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
601e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
602e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
603e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'testing', 'new'],
604e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/testing/helloandroid_test.html',
605e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
606e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Hello Testing'
607e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
608e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
609e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A basic introduction to the Android testing framework.'
610e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
611e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  },
612e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  {
613e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    tags: ['tutorial', 'testing', 'new'],
614e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    path: 'tutorials/testing/activity_test.html',
615e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    title: {
616e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'Activity Testing'
617e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    },
618e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    description: {
619e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik      en: 'A more advanced demonstration of the Android testing framework and tools.'
620e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik    }
621e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik  }
622e577d72a3be20e589437271f0e5ca474fab38124Roman Nurik];
623