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