diff options
104 files changed, 1207 insertions, 89 deletions
diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java index 619ba0a..1f173eb 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java @@ -133,50 +133,50 @@ public class BlockingStateListener extends CameraDevice.StateListener { @Override public void onOpened(CameraDevice camera) { - setCurrentState(STATE_OPENED); if (mProxy != null) mProxy.onOpened(camera); + setCurrentState(STATE_OPENED); } @Override public void onDisconnected(CameraDevice camera) { - setCurrentState(STATE_DISCONNECTED); if (mProxy != null) mProxy.onDisconnected(camera); + setCurrentState(STATE_DISCONNECTED); } @Override public void onError(CameraDevice camera, int error) { - setCurrentState(STATE_ERROR); if (mProxy != null) mProxy.onError(camera, error); + setCurrentState(STATE_ERROR); } @Override public void onUnconfigured(CameraDevice camera) { - setCurrentState(STATE_UNCONFIGURED); if (mProxy != null) mProxy.onUnconfigured(camera); + setCurrentState(STATE_UNCONFIGURED); } @Override public void onIdle(CameraDevice camera) { - setCurrentState(STATE_IDLE); if (mProxy != null) mProxy.onIdle(camera); + setCurrentState(STATE_IDLE); } @Override public void onActive(CameraDevice camera) { - setCurrentState(STATE_ACTIVE); if (mProxy != null) mProxy.onActive(camera); + setCurrentState(STATE_ACTIVE); } @Override public void onBusy(CameraDevice camera) { - setCurrentState(STATE_BUSY); if (mProxy != null) mProxy.onBusy(camera); + setCurrentState(STATE_BUSY); } @Override public void onClosed(CameraDevice camera) { - setCurrentState(STATE_CLOSED); if (mProxy != null) mProxy.onClosed(camera); + setCurrentState(STATE_CLOSED); } /** diff --git a/carousel/test/res/values-am/strings.xml b/carousel/test/res/values-am/strings.xml index 5f4b961..f1e8da2 100644 --- a/carousel/test/res/values-am/strings.xml +++ b/carousel/test/res/values-am/strings.xml @@ -21,7 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="music_demo_activity_label" msgid="4382090808250495841">"የሙዚቃ Carousel"</string> <string name="carousel_test_activity_label" msgid="6014624482213318747">"የCarousel ፍተሻ"</string> - <string name="carousel_test_activity_description" msgid="1632693812604375483">"የCarouselን ጥቅም የሚያሳይ ትግበራ"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"የCarouselን ጥቅም የሚያሳይ መተግበሪያ"</string> <string name="task_switcher_activity_label" msgid="714620143340933546">"ክንውን ቀያያሪ"</string> <string name="recent_tasks_title" msgid="1030287226205477117">"የቅርብ ጊዜ ትግበራዎች"</string> <string name="no_recent_tasks" msgid="6884096266670555780">"ምንም የቅርብ ጊዜ ክንውን የለም"</string> diff --git a/carousel/test/res/values-be/strings.xml b/carousel/test/res/values-az-rAZ/strings.xml index 631a815..634f926 100644 --- a/carousel/test/res/values-be/strings.xml +++ b/carousel/test/res/values-az-rAZ/strings.xml @@ -21,8 +21,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> - <string name="carousel_test_activity_description" msgid="1632693812604375483">"Прыкладанне, якое адлюстроўвае выкарыстанне Carousel"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Carousel istifadəsini göstərmək üçün tətbiq"</string> <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> - <string name="recent_tasks_title" msgid="1030287226205477117">"Апошнія прыкладанні"</string> - <string name="no_recent_tasks" msgid="6884096266670555780">"Няма апошніх задач"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Son Tətbiqlər"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"Son tapşırıqlar yoxdur"</string> </resources> diff --git a/carousel/test/res/values-az/strings.xml b/carousel/test/res/values-az/strings.xml new file mode 100644 index 0000000..634f926 --- /dev/null +++ b/carousel/test/res/values-az/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Carousel istifadəsini göstərmək üçün tətbiq"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Son Tətbiqlər"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"Son tapşırıqlar yoxdur"</string> +</resources> diff --git a/carousel/test/res/values-ca/strings.xml b/carousel/test/res/values-ca/strings.xml index 15d758c..9f85f5e 100644 --- a/carousel/test/res/values-ca/strings.xml +++ b/carousel/test/res/values-ca/strings.xml @@ -21,7 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> - <string name="carousel_test_activity_description" msgid="1632693812604375483">"Una aplicació per mostrar l\'ús de Carousel"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Una aplicació per mostrar com es fa servir l\'expositor giratori"</string> <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> <string name="recent_tasks_title" msgid="1030287226205477117">"Aplicacions usades recentment"</string> <string name="no_recent_tasks" msgid="6884096266670555780">"No hi ha tasques recents"</string> diff --git a/carousel/test/res/values-en-rIN/strings.xml b/carousel/test/res/values-en-rIN/strings.xml new file mode 100644 index 0000000..86ea2cb --- /dev/null +++ b/carousel/test/res/values-en-rIN/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"Music Carousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"Carousel Test"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"An application to show the use of Carousel"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"Task Switcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Recent Applications"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"No recent tasks"</string> +</resources> diff --git a/carousel/test/res/values-et/strings.xml b/carousel/test/res/values-et-rEE/strings.xml index 59f0b5c..59f0b5c 100644 --- a/carousel/test/res/values-et/strings.xml +++ b/carousel/test/res/values-et-rEE/strings.xml diff --git a/carousel/test/res/values-fr-rCA/strings.xml b/carousel/test/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000..87aeb34 --- /dev/null +++ b/carousel/test/res/values-fr-rCA/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Une application expliquant l\'utilisation de Carousel"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Applications récentes"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"Aucune tâche récente"</string> +</resources> diff --git a/carousel/test/res/values-hy-rAM/strings.xml b/carousel/test/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000..39bf205 --- /dev/null +++ b/carousel/test/res/values-hy-rAM/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Հավելված` Carousel-ի օգտագործումը ցույց տալու համար"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Վերջին հավելվածները"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"Վերջին առաջադրանքներ չկան"</string> +</resources> diff --git a/carousel/test/res/values-iw/strings.xml b/carousel/test/res/values-iw/strings.xml index 53fa5d2..a4163c5 100644 --- a/carousel/test/res/values-iw/strings.xml +++ b/carousel/test/res/values-iw/strings.xml @@ -21,8 +21,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> - <string name="carousel_test_activity_description" msgid="1632693812604375483">"יישום להצגת השימוש בקרוסלה"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"אפליקציה להצגת השימוש בקרוסלה"</string> <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> - <string name="recent_tasks_title" msgid="1030287226205477117">"יישומים אחרונים"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"אפליקציות אחרונות"</string> <string name="no_recent_tasks" msgid="6884096266670555780">"אין משימות אחרונות"</string> </resources> diff --git a/carousel/test/res/values-ka-rGE/strings.xml b/carousel/test/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000..0764f3f --- /dev/null +++ b/carousel/test/res/values-ka-rGE/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Carousel-ის გამოყენების მაჩვენებელი აპლიკაცია"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"ბოლოდროინდელი აპლიკაციები"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"ბოლოდროინდელი ამოცანები არ არის."</string> +</resources> diff --git a/carousel/test/res/values-km-rKH/strings.xml b/carousel/test/res/values-km-rKH/strings.xml new file mode 100644 index 0000000..5bb198d --- /dev/null +++ b/carousel/test/res/values-km-rKH/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"កម្មវិធីត្រូវបង្ហាញការប្រើ Carousel"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"កម្មវិធីថ្មីៗ"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"គ្មានភារកិច្ចថ្មីៗ"</string> +</resources> diff --git a/carousel/test/res/values-lo-rLA/strings.xml b/carousel/test/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000..83a4cbd --- /dev/null +++ b/carousel/test/res/values-lo-rLA/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"ແອັບພລິເຄຊັນທີ່ໃຊ້ສະແດງປະໂຫຍດຂອງ Carousel"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"ແອັບຯພລິເຄຊັນທີ່ຫາກໍໃຊ້"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"ບໍ່ມີວຽກເມື່ອໄວໆນີ້ເທື່ອ"</string> +</resources> diff --git a/carousel/test/res/values-mn-rMN/strings.xml b/carousel/test/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000..20d9f8d --- /dev/null +++ b/carousel/test/res/values-mn-rMN/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"Хөгжмийн тойруулга"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"Тойруулга тест"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Тойруулга ашиглалтыг харуулах аппликешн"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"Даалгавар солигч"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Сүүлийн аппликешн"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"Сүүлийн даалгавар хоосон"</string> +</resources> diff --git a/carousel/test/res/values-ms/strings.xml b/carousel/test/res/values-ms-rMY/strings.xml index ab9381a..ab9381a 100644 --- a/carousel/test/res/values-ms/strings.xml +++ b/carousel/test/res/values-ms-rMY/strings.xml diff --git a/carousel/test/res/values-nb/strings.xml b/carousel/test/res/values-nb/strings.xml index 8cddca0..751baf9 100644 --- a/carousel/test/res/values-nb/strings.xml +++ b/carousel/test/res/values-nb/strings.xml @@ -21,8 +21,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> - <string name="carousel_test_activity_description" msgid="1632693812604375483">"En applikasjon som viser bruken av Carousel"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"En app som viser bruken av Carousel"</string> <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> - <string name="recent_tasks_title" msgid="1030287226205477117">"Nylige applikasjoner"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"Nylige apper"</string> <string name="no_recent_tasks" msgid="6884096266670555780">"Ingen nylige oppgaver"</string> </resources> diff --git a/carousel/test/res/values-ne-rNP/strings.xml b/carousel/test/res/values-ne-rNP/strings.xml new file mode 100644 index 0000000..838502f --- /dev/null +++ b/carousel/test/res/values-ne-rNP/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"संगीत करउसेल"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"करउसेल परीक्षण"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"कारउसेलको प्रयोग देखाउन एउटा अनुप्रयोग"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"कार्य स्विच गर्ने"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"भर्खरैका अनुप्रयोगहरू"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"कुनै भरखरका कार्यहरू छैनन्।"</string> +</resources> diff --git a/carousel/test/res/values-ne/strings.xml b/carousel/test/res/values-ne/strings.xml new file mode 100644 index 0000000..838502f --- /dev/null +++ b/carousel/test/res/values-ne/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"संगीत करउसेल"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"करउसेल परीक्षण"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"कारउसेलको प्रयोग देखाउन एउटा अनुप्रयोग"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"कार्य स्विच गर्ने"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"भर्खरैका अनुप्रयोगहरू"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"कुनै भरखरका कार्यहरू छैनन्।"</string> +</resources> diff --git a/carousel/test/res/values-si-rLK/strings.xml b/carousel/test/res/values-si-rLK/strings.xml new file mode 100644 index 0000000..5a1aa48 --- /dev/null +++ b/carousel/test/res/values-si-rLK/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"සංගීත Carousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"Carousel පරීක්ෂණය"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Carousel භාවිතය පෙන්වීමට යෙදුමකි"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"කාර්ය ස්විචය"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"මෑත කාලීන යෙදුම්"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"මෑත කාර්යයන් නැත"</string> +</resources> diff --git a/carousel/test/res/values-si/strings.xml b/carousel/test/res/values-si/strings.xml new file mode 100644 index 0000000..5a1aa48 --- /dev/null +++ b/carousel/test/res/values-si/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"සංගීත Carousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"Carousel පරීක්ෂණය"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"Carousel භාවිතය පෙන්වීමට යෙදුමකි"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"කාර්ය ස්විචය"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"මෑත කාලීන යෙදුම්"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"මෑත කාර්යයන් නැත"</string> +</resources> diff --git a/carousel/test/res/values-zh-rHK/strings.xml b/carousel/test/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000..193cb4a --- /dev/null +++ b/carousel/test/res/values-zh-rHK/strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +* Copyright (C) 2009 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="music_demo_activity_label" msgid="4382090808250495841">"MusicCarousel"</string> + <string name="carousel_test_activity_label" msgid="6014624482213318747">"CarouselTest"</string> + <string name="carousel_test_activity_description" msgid="1632693812604375483">"展示輪轉使用方法的應用程式"</string> + <string name="task_switcher_activity_label" msgid="714620143340933546">"TaskSwitcher"</string> + <string name="recent_tasks_title" msgid="1030287226205477117">"最近使用的應用程式"</string> + <string name="no_recent_tasks" msgid="6884096266670555780">"最近沒有任務"</string> +</resources> diff --git a/chips/res/values-be/strings.xml b/chips/res/values-az-rAZ/strings.xml index e71f0e2..c1e8567 100644 --- a/chips/res/values-be/strings.xml +++ b/chips/res/values-az-rAZ/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> - <string name="copy_email" msgid="7869435992461603532">"Скапіраваць адрас электроннай пошты"</string> - <string name="copy_number" msgid="530057841276106843">"Скапіраваць нумар тэлефона"</string> - <string name="done" msgid="2356320650733788862">"Назад"</string> + <string name="copy_email" msgid="7869435992461603532">"E-poçt ünvanını kopyalayın"</string> + <string name="copy_number" msgid="530057841276106843">"Telefon nömrəsini kopyalayın"</string> + <string name="done" msgid="2356320650733788862">"Geri qayıt"</string> </resources> diff --git a/chips/res/values-az/strings.xml b/chips/res/values-az/strings.xml new file mode 100644 index 0000000..c1e8567 --- /dev/null +++ b/chips/res/values-az/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"E-poçt ünvanını kopyalayın"</string> + <string name="copy_number" msgid="530057841276106843">"Telefon nömrəsini kopyalayın"</string> + <string name="done" msgid="2356320650733788862">"Geri qayıt"</string> +</resources> diff --git a/chips/res/values-en-rIN/strings.xml b/chips/res/values-en-rIN/strings.xml new file mode 100644 index 0000000..1ae784b --- /dev/null +++ b/chips/res/values-en-rIN/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"Copy email address"</string> + <string name="copy_number" msgid="530057841276106843">"Copy phone number"</string> + <string name="done" msgid="2356320650733788862">"Return"</string> +</resources> diff --git a/chips/res/values-et/strings.xml b/chips/res/values-et-rEE/strings.xml index f32e66d..f32e66d 100644 --- a/chips/res/values-et/strings.xml +++ b/chips/res/values-et-rEE/strings.xml diff --git a/chips/res/values-fr-rCA/strings.xml b/chips/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000..758f5a8 --- /dev/null +++ b/chips/res/values-fr-rCA/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"Copier l\'adresse de courriel"</string> + <string name="copy_number" msgid="530057841276106843">"Copier le numéro de téléphone"</string> + <string name="done" msgid="2356320650733788862">"Renvoyer"</string> +</resources> diff --git a/chips/res/values-hy-rAM/strings.xml b/chips/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000..ca2695c --- /dev/null +++ b/chips/res/values-hy-rAM/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"Պատճենել էլփոստի հասցեն"</string> + <string name="copy_number" msgid="530057841276106843">"Պատճենել հեռախոսահամարը"</string> + <string name="done" msgid="2356320650733788862">"Վերադառնալ"</string> +</resources> diff --git a/chips/res/values-ka-rGE/strings.xml b/chips/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000..9d24e05 --- /dev/null +++ b/chips/res/values-ka-rGE/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"ელფოსტის მისამართის კოპირება"</string> + <string name="copy_number" msgid="530057841276106843">"ტელეფონის ნომრის კოპირება"</string> + <string name="done" msgid="2356320650733788862">"დაბრუნება"</string> +</resources> diff --git a/chips/res/values-km-rKH/strings.xml b/chips/res/values-km-rKH/strings.xml new file mode 100644 index 0000000..e51c667 --- /dev/null +++ b/chips/res/values-km-rKH/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"ចម្លងអាសយដ្ឋានអ៊ីមែល"</string> + <string name="copy_number" msgid="530057841276106843">"ចម្លងលេខទូរស័ព្ទ"</string> + <string name="done" msgid="2356320650733788862">"ត្រឡប់"</string> +</resources> diff --git a/chips/res/values-lo-rLA/strings.xml b/chips/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000..44912af --- /dev/null +++ b/chips/res/values-lo-rLA/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"ສຳເນົາທີ່ຢູ່ອີເມວ"</string> + <string name="copy_number" msgid="530057841276106843">"ສຳເນົາເບີໂທລະສັບ"</string> + <string name="done" msgid="2356320650733788862">"ກັບຄືນ"</string> +</resources> diff --git a/chips/res/values-mn-rMN/strings.xml b/chips/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000..89923c3 --- /dev/null +++ b/chips/res/values-mn-rMN/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"Имэйл хаяг хуулах"</string> + <string name="copy_number" msgid="530057841276106843">"Утасны дугаар хуулах"</string> + <string name="done" msgid="2356320650733788862">"Оруулах"</string> +</resources> diff --git a/chips/res/values-ms/strings.xml b/chips/res/values-ms-rMY/strings.xml index 76320f9..76320f9 100644 --- a/chips/res/values-ms/strings.xml +++ b/chips/res/values-ms-rMY/strings.xml diff --git a/chips/res/values-ne-rNP/strings.xml b/chips/res/values-ne-rNP/strings.xml new file mode 100644 index 0000000..4710484 --- /dev/null +++ b/chips/res/values-ne-rNP/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"इमेल ठेगानाको प्रतिलिपि बनाउनुहोस्"</string> + <string name="copy_number" msgid="530057841276106843">"फोन नम्बरको प्रतिलिपि गर्नुहोस्"</string> + <string name="done" msgid="2356320650733788862">"फिर्ता हुनुहोस्"</string> +</resources> diff --git a/chips/res/values-ne/strings.xml b/chips/res/values-ne/strings.xml new file mode 100644 index 0000000..4710484 --- /dev/null +++ b/chips/res/values-ne/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"इमेल ठेगानाको प्रतिलिपि बनाउनुहोस्"</string> + <string name="copy_number" msgid="530057841276106843">"फोन नम्बरको प्रतिलिपि गर्नुहोस्"</string> + <string name="done" msgid="2356320650733788862">"फिर्ता हुनुहोस्"</string> +</resources> diff --git a/chips/res/values-si-rLK/strings.xml b/chips/res/values-si-rLK/strings.xml new file mode 100644 index 0000000..313405f --- /dev/null +++ b/chips/res/values-si-rLK/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"ඊ-තැපැල් ලිපිනය පිටපත් කරන්න"</string> + <string name="copy_number" msgid="530057841276106843">"දුරකථන අංකය පිටපත් කරන්න"</string> + <string name="done" msgid="2356320650733788862">"ආපසු එවන්න"</string> +</resources> diff --git a/chips/res/values-si/strings.xml b/chips/res/values-si/strings.xml new file mode 100644 index 0000000..313405f --- /dev/null +++ b/chips/res/values-si/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string> + <string name="copy_email" msgid="7869435992461603532">"ඊ-තැපැල් ලිපිනය පිටපත් කරන්න"</string> + <string name="copy_number" msgid="530057841276106843">"දුරකථන අංකය පිටපත් කරන්න"</string> + <string name="done" msgid="2356320650733788862">"ආපසු එවන්න"</string> +</resources> diff --git a/chips/res/values-zh-rHK/strings.xml b/chips/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000..31a122a --- /dev/null +++ b/chips/res/values-zh-rHK/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g> 人"</string> + <string name="copy_email" msgid="7869435992461603532">"複製電郵地址"</string> + <string name="copy_number" msgid="530057841276106843">"複製電話號碼"</string> + <string name="done" msgid="2356320650733788862">"Return 鍵"</string> +</resources> diff --git a/chips/sample/res/values-af/strings.xml b/chips/sample/res/values-af/strings.xml index e4c4945..b29edff 100644 --- a/chips/sample/res/values-af/strings.xml +++ b/chips/sample/res/values-af/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips-voorbeeld"</string> <string name="email_addresses" msgid="5320415175940315400">"E-posadresse"</string> <string name="phone_numbers" msgid="7836326833170390688">"Foonnommers"</string> </resources> diff --git a/chips/sample/res/values-am/strings.xml b/chips/sample/res/values-am/strings.xml index d19c4e8..1da685a 100644 --- a/chips/sample/res/values-am/strings.xml +++ b/chips/sample/res/values-am/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"የቺፕስ ናሙና"</string> <string name="email_addresses" msgid="5320415175940315400">"የኢሜይል አድራሻዎች"</string> <string name="phone_numbers" msgid="7836326833170390688">"ስልክ ቁጥሮች"</string> </resources> diff --git a/chips/sample/res/values-ar/strings.xml b/chips/sample/res/values-ar/strings.xml index 4492ec7..09f9e76 100644 --- a/chips/sample/res/values-ar/strings.xml +++ b/chips/sample/res/values-ar/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"عينة شرائح"</string> <string name="email_addresses" msgid="5320415175940315400">"عناوين البريد الإلكتروني"</string> <string name="phone_numbers" msgid="7836326833170390688">"أرقام الهواتف"</string> </resources> diff --git a/chips/sample/res/values-bg/strings.xml b/chips/sample/res/values-bg/strings.xml index 4c118c1..24d690b 100644 --- a/chips/sample/res/values-bg/strings.xml +++ b/chips/sample/res/values-bg/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Имейл адреси"</string> <string name="phone_numbers" msgid="7836326833170390688">"Телефонни номера"</string> </resources> diff --git a/chips/sample/res/values-ca/strings.xml b/chips/sample/res/values-ca/strings.xml index 847cc6f..054ee13 100644 --- a/chips/sample/res/values-ca/strings.xml +++ b/chips/sample/res/values-ca/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Mostra de xips"</string> <string name="email_addresses" msgid="5320415175940315400">"Adreces electròniques"</string> <string name="phone_numbers" msgid="7836326833170390688">"Números de telèfon"</string> </resources> diff --git a/chips/sample/res/values-cs/strings.xml b/chips/sample/res/values-cs/strings.xml index 3e0a928..fcdb9cf 100644 --- a/chips/sample/res/values-cs/strings.xml +++ b/chips/sample/res/values-cs/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Vzorové čipy"</string> <string name="email_addresses" msgid="5320415175940315400">"E-mailové adresy"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonní čísla"</string> </resources> diff --git a/chips/sample/res/values-da/strings.xml b/chips/sample/res/values-da/strings.xml index e55fcc6..41279d3 100644 --- a/chips/sample/res/values-da/strings.xml +++ b/chips/sample/res/values-da/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Eksempel på chips"</string> <string name="email_addresses" msgid="5320415175940315400">"E-mailadresser"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonnumre"</string> </resources> diff --git a/chips/sample/res/values-de/strings.xml b/chips/sample/res/values-de/strings.xml index 614081c..c234ec4 100644 --- a/chips/sample/res/values-de/strings.xml +++ b/chips/sample/res/values-de/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"E-Mail-Adressen"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonnummern"</string> </resources> diff --git a/chips/sample/res/values-el/strings.xml b/chips/sample/res/values-el/strings.xml index a90018a..ea827d9 100644 --- a/chips/sample/res/values-el/strings.xml +++ b/chips/sample/res/values-el/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Δείγμα τσιπ"</string> <string name="email_addresses" msgid="5320415175940315400">"Διευθύνσεις ηλεκτρονικού ταχυδρομείου"</string> <string name="phone_numbers" msgid="7836326833170390688">"Αριθμοί τηλεφώνου"</string> </resources> diff --git a/chips/sample/res/values-en-rGB/strings.xml b/chips/sample/res/values-en-rGB/strings.xml index aaccb10..8cf71de 100644 --- a/chips/sample/res/values-en-rGB/strings.xml +++ b/chips/sample/res/values-en-rGB/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Email Addresses"</string> <string name="phone_numbers" msgid="7836326833170390688">"Phone Numbers"</string> </resources> diff --git a/chips/sample/res/values-en-rIN/strings.xml b/chips/sample/res/values-en-rIN/strings.xml index aaccb10..8cf71de 100644 --- a/chips/sample/res/values-en-rIN/strings.xml +++ b/chips/sample/res/values-en-rIN/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Email Addresses"</string> <string name="phone_numbers" msgid="7836326833170390688">"Phone Numbers"</string> </resources> diff --git a/chips/sample/res/values-es-rUS/strings.xml b/chips/sample/res/values-es-rUS/strings.xml index e314778..270a120 100644 --- a/chips/sample/res/values-es-rUS/strings.xml +++ b/chips/sample/res/values-es-rUS/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Muestra de chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Direcciones de correo electrónico"</string> <string name="phone_numbers" msgid="7836326833170390688">"Números de teléfono"</string> </resources> diff --git a/chips/sample/res/values-es/strings.xml b/chips/sample/res/values-es/strings.xml index dd64514..270a120 100644 --- a/chips/sample/res/values-es/strings.xml +++ b/chips/sample/res/values-es/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Muestra de Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Direcciones de correo electrónico"</string> <string name="phone_numbers" msgid="7836326833170390688">"Números de teléfono"</string> </resources> diff --git a/chips/sample/res/values-et-rEE/strings.xml b/chips/sample/res/values-et-rEE/strings.xml index 5c7d6e5..e343cf4 100644 --- a/chips/sample/res/values-et-rEE/strings.xml +++ b/chips/sample/res/values-et-rEE/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"E-posti aadressid"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefoninumbrid"</string> </resources> diff --git a/chips/sample/res/values-fa/strings.xml b/chips/sample/res/values-fa/strings.xml index 8ee4162..d31e347 100644 --- a/chips/sample/res/values-fa/strings.xml +++ b/chips/sample/res/values-fa/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"نمونه تراشهها"</string> <string name="email_addresses" msgid="5320415175940315400">"آدرسهای ایمیل"</string> <string name="phone_numbers" msgid="7836326833170390688">"شماره تلفنها"</string> </resources> diff --git a/chips/sample/res/values-fi/strings.xml b/chips/sample/res/values-fi/strings.xml index c72df4d..348473d 100644 --- a/chips/sample/res/values-fi/strings.xml +++ b/chips/sample/res/values-fi/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Sähköpostiosoitteet"</string> <string name="phone_numbers" msgid="7836326833170390688">"Puhelinnumerot"</string> </resources> diff --git a/chips/sample/res/values-fr-rCA/strings.xml b/chips/sample/res/values-fr-rCA/strings.xml index e88de2d..68dcf33 100644 --- a/chips/sample/res/values-fr-rCA/strings.xml +++ b/chips/sample/res/values-fr-rCA/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Échantillon Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Adresses de courriel"</string> <string name="phone_numbers" msgid="7836326833170390688">"Numéros de téléphone"</string> </resources> diff --git a/chips/sample/res/values-fr/strings.xml b/chips/sample/res/values-fr/strings.xml index 2b1c18e..e0bf7ac 100644 --- a/chips/sample/res/values-fr/strings.xml +++ b/chips/sample/res/values-fr/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Échantillon Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Adresses e-mail"</string> <string name="phone_numbers" msgid="7836326833170390688">"Numéros de téléphone"</string> </resources> diff --git a/chips/sample/res/values-hi/strings.xml b/chips/sample/res/values-hi/strings.xml index bae6585..20a8435 100644 --- a/chips/sample/res/values-hi/strings.xml +++ b/chips/sample/res/values-hi/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"चिप्स नमूने"</string> <string name="email_addresses" msgid="5320415175940315400">"ईमेल पते"</string> <string name="phone_numbers" msgid="7836326833170390688">"फ़ोन नंबर"</string> </resources> diff --git a/chips/sample/res/values-hr/strings.xml b/chips/sample/res/values-hr/strings.xml index 6eb8a8e..d6da228 100644 --- a/chips/sample/res/values-hr/strings.xml +++ b/chips/sample/res/values-hr/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"E-adrese"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonski brojevi"</string> </resources> diff --git a/chips/sample/res/values-hu/strings.xml b/chips/sample/res/values-hu/strings.xml index 1d00752..b2ba000 100644 --- a/chips/sample/res/values-hu/strings.xml +++ b/chips/sample/res/values-hu/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"„Chips” minta"</string> <string name="email_addresses" msgid="5320415175940315400">"E-mail címek"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonszámok"</string> </resources> diff --git a/chips/sample/res/values-hy-rAM/strings.xml b/chips/sample/res/values-hy-rAM/strings.xml index fbdcb21..09ad981 100644 --- a/chips/sample/res/values-hy-rAM/strings.xml +++ b/chips/sample/res/values-hy-rAM/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Չիպերի նմուշ"</string> <string name="email_addresses" msgid="5320415175940315400">"Էլփոստի հասցեներ"</string> <string name="phone_numbers" msgid="7836326833170390688">"Հեռախոսահամարներ"</string> </resources> diff --git a/chips/sample/res/values-in/strings.xml b/chips/sample/res/values-in/strings.xml index 1ebd148..036e97d 100644 --- a/chips/sample/res/values-in/strings.xml +++ b/chips/sample/res/values-in/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Contoh Chip"</string> <string name="email_addresses" msgid="5320415175940315400">"Alamat Email"</string> <string name="phone_numbers" msgid="7836326833170390688">"Nomor Telepon"</string> </resources> diff --git a/chips/sample/res/values-it/strings.xml b/chips/sample/res/values-it/strings.xml index aefbd01..67bca55 100644 --- a/chips/sample/res/values-it/strings.xml +++ b/chips/sample/res/values-it/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Indirizzi email"</string> <string name="phone_numbers" msgid="7836326833170390688">"Numeri di telefono"</string> </resources> diff --git a/chips/sample/res/values-iw/strings.xml b/chips/sample/res/values-iw/strings.xml index 24c7e69..7ead2ae 100644 --- a/chips/sample/res/values-iw/strings.xml +++ b/chips/sample/res/values-iw/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"דוגמאות שבבים"</string> <string name="email_addresses" msgid="5320415175940315400">"כתובות דוא\"ל"</string> <string name="phone_numbers" msgid="7836326833170390688">"מספרי טלפון"</string> </resources> diff --git a/chips/sample/res/values-ja/strings.xml b/chips/sample/res/values-ja/strings.xml index c75120a..6b0c0a7 100644 --- a/chips/sample/res/values-ja/strings.xml +++ b/chips/sample/res/values-ja/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"チップサンプル"</string> <string name="email_addresses" msgid="5320415175940315400">"メールアドレス"</string> <string name="phone_numbers" msgid="7836326833170390688">"電話番号"</string> </resources> diff --git a/chips/sample/res/values-ka-rGE/strings.xml b/chips/sample/res/values-ka-rGE/strings.xml index a21dab5..ec7f764 100644 --- a/chips/sample/res/values-ka-rGE/strings.xml +++ b/chips/sample/res/values-ka-rGE/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"ჩიპების ნიმუში"</string> <string name="email_addresses" msgid="5320415175940315400">"ელფოსტის მისამართები"</string> <string name="phone_numbers" msgid="7836326833170390688">"ტელეფონის ნომრები"</string> </resources> diff --git a/chips/sample/res/values-km-rKH/strings.xml b/chips/sample/res/values-km-rKH/strings.xml index 3730a7d..70ca37e 100644 --- a/chips/sample/res/values-km-rKH/strings.xml +++ b/chips/sample/res/values-km-rKH/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"គំរូបន្ទះសៀគ្វី"</string> <string name="email_addresses" msgid="5320415175940315400">"អាសយដ្ឋានអ៊ីមែល"</string> <string name="phone_numbers" msgid="7836326833170390688">"លេខទូរស័ព្ទ"</string> </resources> diff --git a/chips/sample/res/values-ko/strings.xml b/chips/sample/res/values-ko/strings.xml index 24d2793..32b49a7 100644 --- a/chips/sample/res/values-ko/strings.xml +++ b/chips/sample/res/values-ko/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"칩 샘플"</string> <string name="email_addresses" msgid="5320415175940315400">"이메일 주소"</string> <string name="phone_numbers" msgid="7836326833170390688">"전화번호"</string> </resources> diff --git a/chips/sample/res/values-lo-rLA/strings.xml b/chips/sample/res/values-lo-rLA/strings.xml index 6357807..6ccf492 100644 --- a/chips/sample/res/values-lo-rLA/strings.xml +++ b/chips/sample/res/values-lo-rLA/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"ທີ່ຢູ່ອີເມວ"</string> <string name="phone_numbers" msgid="7836326833170390688">"ເບີໂທລະສັບ:"</string> </resources> diff --git a/chips/sample/res/values-lt/strings.xml b/chips/sample/res/values-lt/strings.xml index b966062..ce73b40 100644 --- a/chips/sample/res/values-lt/strings.xml +++ b/chips/sample/res/values-lt/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Lustų pavyzdžiai"</string> <string name="email_addresses" msgid="5320415175940315400">"El. pašto adresai"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonų numeriai"</string> </resources> diff --git a/chips/sample/res/values-lv/strings.xml b/chips/sample/res/values-lv/strings.xml index fec05b5..6dd6ffe 100644 --- a/chips/sample/res/values-lv/strings.xml +++ b/chips/sample/res/values-lv/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"E-pasta adreses"</string> <string name="phone_numbers" msgid="7836326833170390688">"Tālruņa numuri"</string> </resources> diff --git a/chips/sample/res/values-mn-rMN/strings.xml b/chips/sample/res/values-mn-rMN/strings.xml index 5289e5c..1398a43 100644 --- a/chips/sample/res/values-mn-rMN/strings.xml +++ b/chips/sample/res/values-mn-rMN/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Чипний дээж"</string> <string name="email_addresses" msgid="5320415175940315400">"Имэйл хаягууд"</string> <string name="phone_numbers" msgid="7836326833170390688">"Утасны дугаарууд"</string> </resources> diff --git a/chips/sample/res/values-ms-rMY/strings.xml b/chips/sample/res/values-ms-rMY/strings.xml index 12ab807..696871d 100644 --- a/chips/sample/res/values-ms-rMY/strings.xml +++ b/chips/sample/res/values-ms-rMY/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Sampel Cip"</string> <string name="email_addresses" msgid="5320415175940315400">"Alamat E-mel"</string> <string name="phone_numbers" msgid="7836326833170390688">"Nombor Telefon"</string> </resources> diff --git a/chips/sample/res/values-nb/strings.xml b/chips/sample/res/values-nb/strings.xml index 3bff3e2..2d5e56a 100644 --- a/chips/sample/res/values-nb/strings.xml +++ b/chips/sample/res/values-nb/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips-eksempel"</string> <string name="email_addresses" msgid="5320415175940315400">"E-postadresser"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonnumre"</string> </resources> diff --git a/chips/sample/res/values-nl/strings.xml b/chips/sample/res/values-nl/strings.xml index 8951311..f47ff3a 100644 --- a/chips/sample/res/values-nl/strings.xml +++ b/chips/sample/res/values-nl/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chipsvoorbeeld"</string> <string name="email_addresses" msgid="5320415175940315400">"E-mailadressen"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefoonnummers"</string> </resources> diff --git a/chips/sample/res/values-pl/strings.xml b/chips/sample/res/values-pl/strings.xml index fedec0d..573d22e 100644 --- a/chips/sample/res/values-pl/strings.xml +++ b/chips/sample/res/values-pl/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Próbka chipsów"</string> <string name="email_addresses" msgid="5320415175940315400">"Adresy e-mail"</string> <string name="phone_numbers" msgid="7836326833170390688">"Numery telefonów"</string> </resources> diff --git a/chips/sample/res/values-pt-rPT/strings.xml b/chips/sample/res/values-pt-rPT/strings.xml index 951d30a..675e2eb 100644 --- a/chips/sample/res/values-pt-rPT/strings.xml +++ b/chips/sample/res/values-pt-rPT/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Amostra de Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Endereços de email"</string> <string name="phone_numbers" msgid="7836326833170390688">"Números de telefone"</string> </resources> diff --git a/chips/sample/res/values-pt/strings.xml b/chips/sample/res/values-pt/strings.xml index 9d2e732..5f8e346 100644 --- a/chips/sample/res/values-pt/strings.xml +++ b/chips/sample/res/values-pt/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Amostra de chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Endereços de e-mail"</string> <string name="phone_numbers" msgid="7836326833170390688">"Números de telefone"</string> </resources> diff --git a/chips/sample/res/values-ro/strings.xml b/chips/sample/res/values-ro/strings.xml index bcffb5e..eb71526 100644 --- a/chips/sample/res/values-ro/strings.xml +++ b/chips/sample/res/values-ro/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Mostră Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Adrese de e-mail"</string> <string name="phone_numbers" msgid="7836326833170390688">"Numere de telefon"</string> </resources> diff --git a/chips/sample/res/values-ru/strings.xml b/chips/sample/res/values-ru/strings.xml index 10f052e..215e40a 100644 --- a/chips/sample/res/values-ru/strings.xml +++ b/chips/sample/res/values-ru/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Адреса эл. почты"</string> <string name="phone_numbers" msgid="7836326833170390688">"Номера телефонов"</string> </resources> diff --git a/chips/sample/res/values-sk/strings.xml b/chips/sample/res/values-sk/strings.xml index 1297298..11d71c5 100644 --- a/chips/sample/res/values-sk/strings.xml +++ b/chips/sample/res/values-sk/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Ukážka čipov"</string> <string name="email_addresses" msgid="5320415175940315400">"E-mailové adresy"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefónne čísla"</string> </resources> diff --git a/chips/sample/res/values-sl/strings.xml b/chips/sample/res/values-sl/strings.xml index 0e1c855..1e1c566 100644 --- a/chips/sample/res/values-sl/strings.xml +++ b/chips/sample/res/values-sl/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Vzorec čipov"</string> <string name="email_addresses" msgid="5320415175940315400">"E-poštni naslovi"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonske številke"</string> </resources> diff --git a/chips/sample/res/values-sr/strings.xml b/chips/sample/res/values-sr/strings.xml index dbd91a5..4bca249 100644 --- a/chips/sample/res/values-sr/strings.xml +++ b/chips/sample/res/values-sr/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Пример чипова"</string> <string name="email_addresses" msgid="5320415175940315400">"Адресе е-поште"</string> <string name="phone_numbers" msgid="7836326833170390688">"Бројеви телефона"</string> </resources> diff --git a/chips/sample/res/values-sv/strings.xml b/chips/sample/res/values-sv/strings.xml index d787c85..d7f6773 100644 --- a/chips/sample/res/values-sv/strings.xml +++ b/chips/sample/res/values-sv/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chipsprov"</string> <string name="email_addresses" msgid="5320415175940315400">"E-postadresser"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefonnummer"</string> </resources> diff --git a/chips/sample/res/values-sw/strings.xml b/chips/sample/res/values-sw/strings.xml index 5afd792..62f4048 100644 --- a/chips/sample/res/values-sw/strings.xml +++ b/chips/sample/res/values-sw/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Sampuli ya Chips"</string> <string name="email_addresses" msgid="5320415175940315400">"Anwani za Barua Pepe"</string> <string name="phone_numbers" msgid="7836326833170390688">"Nambari za Simu"</string> </resources> diff --git a/chips/sample/res/values-th/strings.xml b/chips/sample/res/values-th/strings.xml index 80bf67d..3658256 100644 --- a/chips/sample/res/values-th/strings.xml +++ b/chips/sample/res/values-th/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"ตัวอย่างชิป"</string> <string name="email_addresses" msgid="5320415175940315400">"ที่อยู่อีเมล"</string> <string name="phone_numbers" msgid="7836326833170390688">"หมายเลขโทรศัพท์"</string> </resources> diff --git a/chips/sample/res/values-tl/strings.xml b/chips/sample/res/values-tl/strings.xml index 411e0d4..96cd1c7 100644 --- a/chips/sample/res/values-tl/strings.xml +++ b/chips/sample/res/values-tl/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Sample ng Mga Chip"</string> <string name="email_addresses" msgid="5320415175940315400">"Mga Email Address"</string> <string name="phone_numbers" msgid="7836326833170390688">"Mga Numero ng Telepono"</string> </resources> diff --git a/chips/sample/res/values-tr/strings.xml b/chips/sample/res/values-tr/strings.xml index dad01bb..13395ab 100644 --- a/chips/sample/res/values-tr/strings.xml +++ b/chips/sample/res/values-tr/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Fiş Örneği"</string> <string name="email_addresses" msgid="5320415175940315400">"E-posta Adresleri"</string> <string name="phone_numbers" msgid="7836326833170390688">"Telefon Numaraları"</string> </resources> diff --git a/chips/sample/res/values-uk/strings.xml b/chips/sample/res/values-uk/strings.xml index f09cb8c..cdf5837 100644 --- a/chips/sample/res/values-uk/strings.xml +++ b/chips/sample/res/values-uk/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"Електронні адреси"</string> <string name="phone_numbers" msgid="7836326833170390688">"Номери телефонів"</string> </resources> diff --git a/chips/sample/res/values-vi/strings.xml b/chips/sample/res/values-vi/strings.xml index b9bc474..a93a8c9 100644 --- a/chips/sample/res/values-vi/strings.xml +++ b/chips/sample/res/values-vi/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Mẫu chip"</string> <string name="email_addresses" msgid="5320415175940315400">"Địa chỉ email"</string> <string name="phone_numbers" msgid="7836326833170390688">"Số điện thoại"</string> </resources> diff --git a/chips/sample/res/values-zh-rCN/strings.xml b/chips/sample/res/values-zh-rCN/strings.xml index ebee45c..40f6ef1 100644 --- a/chips/sample/res/values-zh-rCN/strings.xml +++ b/chips/sample/res/values-zh-rCN/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"电子邮件地址"</string> <string name="phone_numbers" msgid="7836326833170390688">"电话号码"</string> </resources> diff --git a/chips/sample/res/values-zh-rHK/strings.xml b/chips/sample/res/values-zh-rHK/strings.xml index d2c3bb0..18c7f2e 100644 --- a/chips/sample/res/values-zh-rHK/strings.xml +++ b/chips/sample/res/values-zh-rHK/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"電郵地址"</string> <string name="phone_numbers" msgid="7836326833170390688">"電話號碼"</string> </resources> diff --git a/chips/sample/res/values-zh-rTW/strings.xml b/chips/sample/res/values-zh-rTW/strings.xml index b502833..971df5d 100644 --- a/chips/sample/res/values-zh-rTW/strings.xml +++ b/chips/sample/res/values-zh-rTW/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Chips Sample"</string> <string name="email_addresses" msgid="5320415175940315400">"電子郵件地址"</string> <string name="phone_numbers" msgid="7836326833170390688">"電話號碼"</string> </resources> diff --git a/chips/sample/res/values-zu/strings.xml b/chips/sample/res/values-zu/strings.xml index 6a106b7..de6722b 100644 --- a/chips/sample/res/values-zu/strings.xml +++ b/chips/sample/res/values-zu/strings.xml @@ -16,7 +16,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="4076638519189386225">"Isempula yama-chip"</string> <string name="email_addresses" msgid="5320415175940315400">"Amakheli we-imeyili"</string> <string name="phone_numbers" msgid="7836326833170390688">"Izinombolo zefoni"</string> </resources> diff --git a/common/build.gradle b/common/build.gradle index d2612c5..ed3dba9 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,10 +1,8 @@ apply plugin: 'android-library' -buildDir = "$project.rootBuildDir/android-$project.name" - android { compileSdkVersion 17 - buildToolsVersion = 17 + buildToolsVersion = '19.0.1' logtags { srcDirs = ['java'] @@ -29,6 +27,10 @@ android { assets.srcDirs = ['assets'] } } + lintOptions { + // TODO: fix errors and reenable. + abortOnError false + } } android.libraryVariants.each { variant -> diff --git a/common/java/com/android/common/GoogleLogTags.logtags b/common/java/com/android/common/GoogleLogTags.logtags index 8314368..4a86970 100644 --- a/common/java/com/android/common/GoogleLogTags.logtags +++ b/common/java/com/android/common/GoogleLogTags.logtags @@ -99,3 +99,8 @@ option java_package com.android.common 205009 gls_account_saved (status|1) 205010 gls_authenticate (status|1),(service|3) 205011 google_mail_switch (direction|1) + +# Event for Android SNet +206001 snet (payload|3) +# TODO(williamluh): Remove this once switch to snet completed. +206003 exp_det_snet (payload|3) diff --git a/framesequence/jni/Android.mk b/framesequence/jni/Android.mk index ee86fc1..e9d0ec5 100644 --- a/framesequence/jni/Android.mk +++ b/framesequence/jni/Android.mk @@ -19,12 +19,13 @@ include $(CLEAR_VARS) ## Main library -LOCAL_STATIC_LIBRARIES += libgif +LOCAL_STATIC_LIBRARIES += libgif libwebp-decode LOCAL_LDFLAGS := -llog -ljnigraphics LOCAL_C_INCLUDES := \ - external/giflib + external/giflib \ + external/webp/include LOCAL_MODULE := libframesequence LOCAL_SRC_FILES := \ @@ -32,6 +33,7 @@ LOCAL_SRC_FILES := \ FrameSequence.cpp \ FrameSequenceJNI.cpp \ FrameSequence_gif.cpp \ + FrameSequence_webp.cpp \ JNIHelpers.cpp \ Registry.cpp \ Stream.cpp diff --git a/framesequence/jni/FrameSequence_webp.cpp b/framesequence/jni/FrameSequence_webp.cpp new file mode 100644 index 0000000..bced919 --- /dev/null +++ b/framesequence/jni/FrameSequence_webp.cpp @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <string.h> +#include "JNIHelpers.h" +#include "utils/log.h" +#include "utils/math.h" +#include "webp/format_constants.h" + +#include "FrameSequence_webp.h" + +#define WEBP_DEBUG 0 + +//////////////////////////////////////////////////////////////////////////////// +// Frame sequence +//////////////////////////////////////////////////////////////////////////////// + +static uint32_t GetLE32(const uint8_t* const data) { + return MKFOURCC(data[0], data[1], data[2], data[3]); +} + +// Returns true if the frame covers full canvas. +static bool isFullFrame(const WebPIterator& frame, int canvasWidth, int canvasHeight) { + return (frame.width == canvasWidth && frame.height == canvasHeight); +} + +// Construct mIsKeyFrame array. +void FrameSequence_webp::constructDependencyChain() { + const size_t frameCount = getFrameCount(); + mIsKeyFrame = new bool[frameCount]; + const int canvasWidth = getWidth(); + const int canvasHeight = getHeight(); + + WebPIterator prev; + WebPIterator curr; + + // Note: WebPDemuxGetFrame() uses base-1 counting. + int ok = WebPDemuxGetFrame(mDemux, 1, &curr); + ALOG_ASSERT(ok, "Could not retrieve frame# 0"); + mIsKeyFrame[0] = true; // 0th frame is always a key frame. + for (size_t i = 1; i < frameCount; i++) { + prev = curr; + ok = WebPDemuxGetFrame(mDemux, i + 1, &curr); // Get ith frame. + ALOG_ASSERT(ok, "Could not retrieve frame# %d", i); + + if ((!curr.has_alpha || curr.blend_method == WEBP_MUX_NO_BLEND) && + isFullFrame(curr, canvasWidth, canvasHeight)) { + mIsKeyFrame[i] = true; + } else { + mIsKeyFrame[i] = (prev.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) && + (isFullFrame(prev, canvasWidth, canvasHeight) || mIsKeyFrame[i - 1]); + } + } + WebPDemuxReleaseIterator(&prev); + WebPDemuxReleaseIterator(&curr); + +#if WEBP_DEBUG + ALOGD("Dependency chain:"); + for (size_t i = 0; i < frameCount; i++) { + ALOGD("Frame# %zu: %s", i, mIsKeyFrame[i] ? "Key frame" : "NOT a key frame"); + } +#endif +} + +FrameSequence_webp::FrameSequence_webp(Stream* stream) { + // Read RIFF header to get file size. + uint8_t riff_header[RIFF_HEADER_SIZE]; + if (stream->read(riff_header, RIFF_HEADER_SIZE) != RIFF_HEADER_SIZE) { + ALOGE("WebP header load failed"); + return; + } + mData.size = CHUNK_HEADER_SIZE + GetLE32(riff_header + TAG_SIZE); + mData.bytes = new uint8_t[mData.size]; + memcpy((void*)mData.bytes, riff_header, RIFF_HEADER_SIZE); + + // Read rest of the bytes. + void* remaining_bytes = (void*)(mData.bytes + RIFF_HEADER_SIZE); + size_t remaining_size = mData.size - RIFF_HEADER_SIZE; + if (stream->read(remaining_bytes, remaining_size) != remaining_size) { + ALOGE("WebP full load failed"); + return; + } + + // Construct demux. + mDemux = WebPDemux(&mData); + if (!mDemux) { + ALOGE("Parsing of WebP container file failed"); + return; + } + mLoopCount = WebPDemuxGetI(mDemux, WEBP_FF_LOOP_COUNT); + mFormatFlags = WebPDemuxGetI(mDemux, WEBP_FF_FORMAT_FLAGS); +#if WEBP_DEBUG + ALOGD("FrameSequence_webp created with size = %d x %d, number of frames = %d, flags = 0x%X", + getWidth(), getHeight(), getFrameCount(), mFormatFlags); +#endif + constructDependencyChain(); +} + +FrameSequence_webp::~FrameSequence_webp() { + WebPDemuxDelete(mDemux); + delete[] mData.bytes; + delete[] mIsKeyFrame; +} + +FrameSequenceState* FrameSequence_webp::createState() const { + return new FrameSequenceState_webp(*this); +} + +//////////////////////////////////////////////////////////////////////////////// +// draw helpers +//////////////////////////////////////////////////////////////////////////////// + +static bool willBeCleared(const WebPIterator& iter) { + return iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND; +} + +// return true if area of 'target' completely covers area of 'covered' +static bool checkIfCover(const WebPIterator& target, const WebPIterator& covered) { + const int covered_x_max = covered.x_offset + covered.width; + const int target_x_max = target.x_offset + target.width; + const int covered_y_max = covered.y_offset + covered.height; + const int target_y_max = target.y_offset + target.height; + return target.x_offset <= covered.x_offset + && covered_x_max <= target_x_max + && target.y_offset <= covered.y_offset + && covered_y_max <= target_y_max; +} + +// Clear all pixels in a line to transparent. +static void clearLine(Color8888* dst, int width) { + memset(dst, 0, width * sizeof(*dst)); // Note: Assumes TRANSPARENT == 0x0. +} + +// Copy all pixels from 'src' to 'dst'. +static void copyFrame(const Color8888* src, int srcStride, Color8888* dst, int dstStride, + int width, int height) { + for (int y = 0; y < height; y++) { + memcpy(dst, src, width * sizeof(*dst)); + src += srcStride; + dst += dstStride; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// Frame sequence state +//////////////////////////////////////////////////////////////////////////////// + +FrameSequenceState_webp::FrameSequenceState_webp(const FrameSequence_webp& frameSequence) : + mFrameSequence(frameSequence) { + WebPInitDecoderConfig(&mDecoderConfig); + mDecoderConfig.output.is_external_memory = 1; + mDecoderConfig.output.colorspace = MODE_rgbA; // Pre-multiplied alpha mode. + const int canvasWidth = mFrameSequence.getWidth(); + const int canvasHeight = mFrameSequence.getHeight(); + mPreservedBuffer = new Color8888[canvasWidth * canvasHeight]; +} + +FrameSequenceState_webp::~FrameSequenceState_webp() { + delete[] mPreservedBuffer; +} + +void FrameSequenceState_webp::initializeFrame(const WebPIterator& currIter, Color8888* currBuffer, + int currStride, const WebPIterator& prevIter, const Color8888* prevBuffer, int prevStride) { + const int canvasWidth = mFrameSequence.getWidth(); + const int canvasHeight = mFrameSequence.getHeight(); + const bool currFrameIsKeyFrame = mFrameSequence.isKeyFrame(currIter.frame_num - 1); + + if (currFrameIsKeyFrame) { // Clear canvas. + for (int y = 0; y < canvasHeight; y++) { + Color8888* dst = currBuffer + y * currStride; + clearLine(dst, canvasWidth); + } + } else { + // Preserve previous frame as starting state of current frame. + copyFrame(prevBuffer, prevStride, currBuffer, currStride, canvasWidth, canvasHeight); + + // Dispose previous frame rectangle to Background if needed. + bool prevFrameCompletelyCovered = + (!currIter.has_alpha || currIter.blend_method == WEBP_MUX_NO_BLEND) && + checkIfCover(currIter, prevIter); + if ((prevIter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) && + !prevFrameCompletelyCovered) { + Color8888* dst = currBuffer + prevIter.x_offset + prevIter.y_offset * currStride; + for (int j = 0; j < prevIter.height; j++) { + clearLine(dst, prevIter.width); + dst += currStride; + } + } + } +} + +bool FrameSequenceState_webp::decodeFrame(const WebPIterator& currIter, Color8888* currBuffer, + int currStride, const WebPIterator& prevIter, const Color8888* prevBuffer, int prevStride) { + Color8888* dst = currBuffer + currIter.x_offset + currIter.y_offset * currStride; + mDecoderConfig.output.u.RGBA.rgba = (uint8_t*)dst; + mDecoderConfig.output.u.RGBA.stride = currStride * 4; + mDecoderConfig.output.u.RGBA.size = mDecoderConfig.output.u.RGBA.stride * currIter.height; + + const WebPData& currFrame = currIter.fragment; + if (WebPDecode(currFrame.bytes, currFrame.size, &mDecoderConfig) != VP8_STATUS_OK) { + return false; + } + + const int canvasWidth = mFrameSequence.getWidth(); + const int canvasHeight = mFrameSequence.getHeight(); + const bool currFrameIsKeyFrame = mFrameSequence.isKeyFrame(currIter.frame_num - 1); + // During the decoding of current frame, we may have set some pixels to be transparent + // (i.e. alpha < 255). However, the value of each of these pixels should have been determined + // by blending it against the value of that pixel in the previous frame if WEBP_MUX_BLEND was + // specified. So, we correct these pixels based on disposal method of the previous frame and + // the previous frame buffer. + if (currIter.blend_method == WEBP_MUX_BLEND && !currFrameIsKeyFrame) { + if (prevIter.dispose_method == WEBP_MUX_DISPOSE_NONE) { + for (int y = 0; y < currIter.height; y++) { + const int canvasY = currIter.y_offset + y; + for (int x = 0; x < currIter.width; x++) { + const int canvasX = currIter.x_offset + x; + Color8888& currPixel = currBuffer[canvasY * currStride + canvasX]; + // FIXME: Use alpha-blending when alpha is between 0 and 255. + if (!(currPixel & COLOR_8888_ALPHA_MASK)) { + const Color8888 prevPixel = prevBuffer[canvasY * prevStride + canvasX]; + currPixel = prevPixel; + } + } + } + } else { // prevIter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND + // Need to restore transparent pixels to as they were just after frame initialization. + // That is: + // * Transparent if it belongs to previous frame rectangle <-- This is a no-op. + // * Pixel in the previous canvas otherwise <-- Need to restore. + for (int y = 0; y < currIter.height; y++) { + const int canvasY = currIter.y_offset + y; + for (int x = 0; x < currIter.width; x++) { + const int canvasX = currIter.x_offset + x; + Color8888& currPixel = currBuffer[canvasY * currStride + canvasX]; + // FIXME: Use alpha-blending when alpha is between 0 and 255. + if (!(currPixel & COLOR_8888_ALPHA_MASK) && + isFullFrame(prevIter, canvasWidth, canvasHeight)) { + const Color8888 prevPixel = prevBuffer[canvasY * prevStride + canvasX]; + currPixel = prevPixel; + } + } + } + } + } + return true; +} + +long FrameSequenceState_webp::drawFrame(int frameNr, + Color8888* outputPtr, int outputPixelStride, int previousFrameNr) { + WebPDemuxer* demux = mFrameSequence.getDemuxer(); + ALOG_ASSERT(demux, "Cannot drawFrame, mDemux is NULL"); + +#if WEBP_DEBUG + ALOGD(" drawFrame called for frame# %d, previous frame# %d", frameNr, previousFrameNr); +#endif + + const int canvasWidth = mFrameSequence.getWidth(); + const int canvasHeight = mFrameSequence.getHeight(); + + // Find the first frame to be decoded. + int start = max(previousFrameNr + 1, 0); + int earliestRequired = frameNr; + while (earliestRequired > start) { + if (mFrameSequence.isKeyFrame(earliestRequired)) { + start = earliestRequired; + break; + } + earliestRequired--; + } + + WebPIterator currIter; + WebPIterator prevIter; + int ok = WebPDemuxGetFrame(demux, start, &currIter); // Get frame number 'start - 1'. + ALOG_ASSERT(ok, "Could not retrieve frame# %d", start - 1); + + // Use preserve buffer only if needed. + Color8888* prevBuffer = (frameNr == 0) ? outputPtr : mPreservedBuffer; + int prevStride = (frameNr == 0) ? outputPixelStride : canvasWidth; + Color8888* currBuffer = outputPtr; + int currStride = outputPixelStride; + + for (int i = start; i <= frameNr; i++) { + prevIter = currIter; + ok = WebPDemuxGetFrame(demux, i + 1, &currIter); // Get ith frame. + ALOG_ASSERT(ok, "Could not retrieve frame# %d", i); +#if WEBP_DEBUG + ALOGD(" producing frame %d (has_alpha = %d, dispose = %s, blend = %s, duration = %d)", + i, currIter.has_alpha, + (currIter.dispose_method == WEBP_MUX_DISPOSE_NONE) ? "none" : "background", + (currIter.blend_method == WEBP_MUX_BLEND) ? "yes" : "no", currIter.duration); +#endif + // We swap the prev/curr buffers as we go. + Color8888* tmpBuffer = prevBuffer; + prevBuffer = currBuffer; + currBuffer = tmpBuffer; + + int tmpStride = prevStride; + prevStride = currStride; + currStride = tmpStride; + +#if WEBP_DEBUG + ALOGD(" prev = %p, curr = %p, out = %p, tmp = %p", + prevBuffer, currBuffer, outputPtr, mPreservedBuffer); +#endif + // Process this frame. + initializeFrame(currIter, currBuffer, currStride, prevIter, prevBuffer, prevStride); + + if (i == frameNr || !willBeCleared(currIter)) { + if (!decodeFrame(currIter, currBuffer, currStride, prevIter, prevBuffer, prevStride)) { + ALOGE("Error decoding frame# %d", i); + return -1; + } + } + } + + if (outputPtr != currBuffer) { + copyFrame(currBuffer, currStride, outputPtr, outputPixelStride, canvasWidth, canvasHeight); + } + + // Return last frame's delay. + const int frameCount = mFrameSequence.getFrameCount(); + const int lastFrame = (frameNr + frameCount - 1) % frameCount; + ok = WebPDemuxGetFrame(demux, lastFrame, &currIter); + ALOG_ASSERT(ok, "Could not retrieve frame# %d", lastFrame - 1); + const int lastFrameDelay = currIter.duration; + + WebPDemuxReleaseIterator(&currIter); + WebPDemuxReleaseIterator(&prevIter); + + return lastFrameDelay; +} + +//////////////////////////////////////////////////////////////////////////////// +// Registry +//////////////////////////////////////////////////////////////////////////////// + +#include "Registry.h" + +static bool isWebP(void* header, int header_size) { + const uint8_t* const header_str = (const uint8_t*)header; + return (header_size >= RIFF_HEADER_SIZE) && + !memcmp("RIFF", header_str, 4) && + !memcmp("WEBP", header_str + 8, 4); +} + +static FrameSequence* createFramesequence(Stream* stream) { + return new FrameSequence_webp(stream); +} + +static RegistryEntry gEntry = { + RIFF_HEADER_SIZE, + isWebP, + createFramesequence, + NULL, +}; +static Registry gRegister(gEntry); + diff --git a/framesequence/jni/FrameSequence_webp.h b/framesequence/jni/FrameSequence_webp.h new file mode 100644 index 0000000..9fcf3d8 --- /dev/null +++ b/framesequence/jni/FrameSequence_webp.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RASTERMILL_FRAMESQUENCE_WEBP_H +#define RASTERMILL_FRAMESQUENCE_WEBP_H + +#include "config.h" +#include "webp/decode.h" +#include "webp/demux.h" + +#include "Stream.h" +#include "Color.h" +#include "FrameSequence.h" + +// Parser for a possibly-animated WebP bitstream. +class FrameSequence_webp : public FrameSequence { +public: + FrameSequence_webp(Stream* stream); + virtual ~FrameSequence_webp(); + + virtual int getWidth() const { + return WebPDemuxGetI(mDemux, WEBP_FF_CANVAS_WIDTH); + } + + virtual int getHeight() const { + return WebPDemuxGetI(mDemux, WEBP_FF_CANVAS_HEIGHT); + } + + virtual bool isOpaque() const { + return !(mFormatFlags & ALPHA_FLAG); + } + + virtual int getFrameCount() const { + return WebPDemuxGetI(mDemux, WEBP_FF_FRAME_COUNT); + } + + virtual int getDefaultLoopCount() const { + return mLoopCount; + } + + virtual FrameSequenceState* createState() const; + + WebPDemuxer* getDemuxer() const { return mDemux; } + + bool isKeyFrame(size_t frameNr) const { return mIsKeyFrame[frameNr]; /* TODO: CHECK BOUNDS*/ } + +private: + void constructDependencyChain(); + + WebPData mData; + WebPDemuxer* mDemux; + int mLoopCount; + uint32_t mFormatFlags; + // mIsKeyFrame[i] is true if ith canvas can be constructed without decoding any prior frames. + bool* mIsKeyFrame; +}; + +// Produces frames of a possibly-animated WebP file for display. +class FrameSequenceState_webp : public FrameSequenceState { +public: + FrameSequenceState_webp(const FrameSequence_webp& frameSequence); + virtual ~FrameSequenceState_webp(); + + // Returns frame's delay time in milliseconds. + virtual long drawFrame(int frameNr, + Color8888* outputPtr, int outputPixelStride, int previousFrameNr); + +private: + void initializeFrame(const WebPIterator& currIter, Color8888* currBuffer, int currStride, + const WebPIterator& prevIter, const Color8888* prevBuffer, int prevStride); + bool decodeFrame(const WebPIterator& iter, Color8888* currBuffer, int currStride, + const WebPIterator& prevIter, const Color8888* prevBuffer, int prevStride); + + const FrameSequence_webp& mFrameSequence; + WebPDecoderConfig mDecoderConfig; + Color8888* mPreservedBuffer; +}; + +#endif //RASTERMILL_FRAMESQUENCE_WEBP_H diff --git a/framesequence/jni/utils/log.h b/framesequence/jni/utils/log.h index 5e15f30..d8441dc 100644 --- a/framesequence/jni/utils/log.h +++ b/framesequence/jni/utils/log.h @@ -267,6 +267,20 @@ extern "C" { if (__android_log_assert(ANDROID_##priority, tag)) #endif +/* Returns 2nd arg. Used to substitute default value if caller's vararg list + * is empty. + */ +#define __android_second(dummy, second, ...) second + +/* If passed multiple args, returns ',' followed by all but 1st arg, otherwise + * returns nothing. + */ +#define __android_rest(first, ...) , ## __VA_ARGS__ + +#define android_printAssert(cond, tag, fmt...) \ + __android_log_assert(cond, tag, \ + __android_second(0, ## fmt, NULL) __android_rest(fmt)) + #ifdef __cplusplus } #endif diff --git a/variablespeed/jni/jni_entry.cc b/variablespeed/jni/jni_entry.cc index 93c12ba..20bcf3c 100644 --- a/variablespeed/jni/jni_entry.cc +++ b/variablespeed/jni/jni_entry.cc @@ -81,9 +81,12 @@ JNI_METHOD(initializeEngine, void) (JNIEnv*, jclass, jfloat initialRate, jint decodeInitialSize, jint decodeMaxSize, jint startPositionMillis, jint audioStreamType) { MethodLog _("initializeEngine"); - AudioEngine::SetEngine(new AudioEngine(targetFrames, + AudioEngine *engine = new AudioEngine(targetFrames, windowDuration, windowOverlapDuration, maxPlayBufferCount, initialRate, - decodeInitialSize, decodeMaxSize, startPositionMillis, audioStreamType)); + decodeInitialSize, decodeMaxSize, startPositionMillis, audioStreamType); + if (!AudioEngine::CompareAndSetEngine(NULL, engine)) { + delete engine; + } } JNI_METHOD(shutdownEngine, void) (JNIEnv*, jclass) { diff --git a/variablespeed/jni/variablespeed.cc b/variablespeed/jni/variablespeed.cc index b5d9067..8e161fc 100644 --- a/variablespeed/jni/variablespeed.cc +++ b/variablespeed/jni/variablespeed.cc @@ -129,14 +129,21 @@ void AudioEngine::SetEngine(AudioEngine* engine) { audioEngine_ = engine; } +bool AudioEngine::CompareAndSetEngine(AudioEngine* expect, AudioEngine* update) { + android::Mutex::Autolock autoLock(publishEngineLock_); + if (audioEngine_ == expect) { + DeleteEngine(); + audioEngine_ = update; + return true; + } + return false; +} + void AudioEngine::DeleteEngine() { - if (audioEngine_ == NULL) { - LOGE("you haven't initialized the audio engine"); - CHECK(false); - return; + if (audioEngine_ != NULL) { + delete audioEngine_; + audioEngine_ = NULL; } - delete audioEngine_; - audioEngine_ = NULL; } // **************************************************************************** diff --git a/variablespeed/jni/variablespeed.h b/variablespeed/jni/variablespeed.h index cf856da..74710e5 100644 --- a/variablespeed/jni/variablespeed.h +++ b/variablespeed/jni/variablespeed.h @@ -64,6 +64,7 @@ class AudioEngine { static AudioEngine* GetEngine(); static void SetEngine(AudioEngine* engine); + static bool CompareAndSetEngine(AudioEngine* expect, AudioEngine* update); static void DeleteEngine(); private: diff --git a/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java b/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java index 8489dc1..3b7b576 100644 --- a/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java +++ b/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java @@ -42,6 +42,7 @@ public interface MediaPlayerProxy { int getDuration(); void seekTo(int startPosition); void start(); + boolean isReadyToPlay(); boolean isPlaying(); int getCurrentPosition(); void pause(); diff --git a/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java index 17692f7..c9a9741 100644 --- a/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java +++ b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java @@ -85,6 +85,11 @@ public class SingleThreadedMediaPlayerProxy implements MediaPlayerProxy { } @Override + public synchronized boolean isReadyToPlay() { + return mDelegate.isReadyToPlay(); + } + + @Override public synchronized boolean isPlaying() { return mDelegate.isPlaying(); } diff --git a/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java b/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java index 5c93d26..e44a375 100644 --- a/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java +++ b/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java @@ -337,9 +337,16 @@ public class VariableSpeed implements MediaPlayerProxy { } @Override + public boolean isReadyToPlay() { + synchronized (lock) { + return !mHasBeenReleased && mHasDuration; + } + } + + @Override public boolean isPlaying() { synchronized (lock) { - return mHasStartedPlayback && !hasPlaybackFinished(); + return isReadyToPlay() && mHasStartedPlayback && !hasPlaybackFinished(); } } |