am 761306fa: Remove CameraUtil.launchGallery, ensure SecureCamera uses Gallery up icon
* commit '761306fadfa94b538f43e8cf3463bf6d22814947':
Remove CameraUtil.launchGallery, ensure SecureCamera uses Gallery up icon
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
deleted file mode 100644
index c47c0cf..0000000
--- a/res/values-az-rAZ/strings.xml
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2007 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="app_name" msgid="8338864393568040722">"Kamera"</string>
- <string name="details_ms" msgid="4368407634456462224">"%1$02d:%2$02d"</string>
- <string name="details_hms" msgid="681695897098326459">"%1$d:%2$02d:%3$02d"</string>
- <string name="set_image" msgid="3011821258780340803">"Şəkli bu kimi istifadə edin:"</string>
- <string name="delete" msgid="7258764001896874869">"Sil"</string>
- <plurals name="delete_selection">
- <item quantity="one" msgid="2984228592820245170">"Seçilmiş element silinsin?"</item>
- <item quantity="other" msgid="882035505847338991">"Seçilmiş elementlər silinsin?"</item>
- </plurals>
- <string name="share" msgid="319799706929863109">"Paylaşın"</string>
- <string name="share_panorama" msgid="7488525470543070168">"Panoramanı paylaş"</string>
- <string name="share_as_photo" msgid="8960831195285082544">"Foto kimi paylaşın"</string>
- <string name="deleted" msgid="1144434522200481802">"Silindi"</string>
- <string name="undo" msgid="7561810819827468379">"Geri al"</string>
- <string name="details" msgid="3581943734736871564">"Detallar"</string>
- <string name="close" msgid="7196876073399885123">"Bağla"</string>
- <plurals name="number_of_items_selected">
- <item quantity="zero" msgid="629802015400399691">"%1$d seçilib"</item>
- <item quantity="one" msgid="4283105620980058761">"%1$d seçilib"</item>
- <item quantity="other" msgid="6433812272993337098">"%1$d seçilib"</item>
- </plurals>
- <plurals name="number_of_albums_selected">
- <item quantity="zero" msgid="7322496523426352621">"%1$d seçilib"</item>
- <item quantity="one" msgid="3571296348626418242">"%1$d seçilib"</item>
- <item quantity="other" msgid="3103452138866993468">"%1$d seçilib"</item>
- </plurals>
- <plurals name="number_of_groups_selected">
- <item quantity="zero" msgid="3312206920893882756">"%1$d seçilib"</item>
- <item quantity="one" msgid="7749557015923438739">"%1$d seçilib"</item>
- <item quantity="other" msgid="3562299676983425193">"%1$d seçilib"</item>
- </plurals>
- <string name="show_on_map" msgid="1986264085815015696">"Xəritədə göstərin"</string>
- <string name="rotate_left" msgid="6719855780237705569">"Sola fırlat"</string>
- <string name="rotate_right" msgid="8558343437940821771">"Sağa fırlat"</string>
- <string name="edit" msgid="8457904262004517151">"Redaktə edin"</string>
- <string name="crop_action" msgid="3281088975169422593">"Kəs"</string>
- <string name="trim_action" msgid="1912063594235898890">"Nizamlama"</string>
- <string name="set_as" msgid="7362777416265059096">"Belə et"</string>
- <string name="video_err" msgid="6747342411484597130">"Video oxumur"</string>
- <string name="crop_saved" msgid="6708204358512805637">"Kəsilmiş şəkil <xliff:g id="FOLDER_NAME">%s</xliff:g> qovluğunda yadda saxlanıldı."</string>
- <string name="title" msgid="1465174588508188840">"Başlıq"</string>
- <string name="description" msgid="7012551348834166615">"Təsvir"</string>
- <string name="time" msgid="53680310933472250">"Vaxt"</string>
- <string name="location" msgid="7836832588874777265">"Məkan"</string>
- <string name="path" msgid="7641372546343443225">"Cığır"</string>
- <string name="width" msgid="4689895076320623907">"Enlili"</string>
- <string name="height" msgid="3982701549798669179">"Hündürlük"</string>
- <string name="orientation" msgid="6270421867039429826">"Oriyentasiya"</string>
- <string name="duration" msgid="1998783741258561149">"Müddət"</string>
- <string name="mimetype" msgid="2655949175201126964">"MİM növü"</string>
- <string name="file_size" msgid="624610858632029292">"Fayl ölçüsü"</string>
- <string name="maker" msgid="6997781789783937494">"Yaradıcı"</string>
- <string name="model" msgid="1812030182695078529">"Model"</string>
- <string name="flash" msgid="8875025367055499744">"Flash"</string>
- <string name="aperture" msgid="4049918471495099840">"Dəlik"</string>
- <string name="focal_length" msgid="7208863566011453148">"Fokal Uzunluq"</string>
- <string name="white_balance" msgid="2638519262687012770">"Ağlıq balansı"</string>
- <string name="exposure_time" msgid="6992897250021008387">"Ekspozisiya vaxtı"</string>
- <string name="iso" msgid="4909058434077568534">"ISO"</string>
- <string name="unit_mm" msgid="1893537204908056363">"mm"</string>
- <string name="manual" msgid="7862595820452711108">"Dərslik"</string>
- <string name="auto" msgid="6792260257128968793">"Avto"</string>
- <string name="flash_on" msgid="4053187950402210000">"İşartı oldu"</string>
- <string name="flash_off" msgid="7313393221333362406">"İşartı yoxdur"</string>
- <string name="unknown" msgid="2211992216750845926">"Naməlum"</string>
- <string name="try_to_set_local_album_available_offline" msgid="1084363257705484486">"Bu element yerli və oflayn istifadə edilə biləcək şəkildə saxlanılır."</string>
- <string name="please_wait" msgid="99283054995831377">"Lütfən, gözləyin"</string>
- <string name="rendering_photo_sphere" msgid="6767345449862157889">"Photo Sphere təqdim edilir"</string>
- <string name="camera_error_title" msgid="434116066686973315">"Kamera xətası"</string>
- <string name="cannot_connect_camera" msgid="3323690925318631453">"Kamera qoşula bilmir."</string>
- <string name="camera_disabled" msgid="4927328535752421596">"Təhlükəsizlik siyasətinə görə kamera deaktiv edilib."</string>
- <string name="wait" msgid="2081747495953883435">"Lütfən, gözləyin..."</string>
- <string name="no_storage" product="default" msgid="5694411578108472132">"Kamera istifadə etməzdən əvvəl SD kartı daxil edin."</string>
- <string name="preparing_sd" product="default" msgid="5062635071578247325">"SD kart hazırlanır ..."</string>
- <string name="access_sd_fail" product="default" msgid="7705342436207795167">"SD karta giriş mümkün olmadı."</string>
- <string name="time_lapse_title" msgid="264021984782348139">"Vaxt aralığı qeyd olunur"</string>
- <string name="pref_camera_id_title" msgid="8027686978170301915">"Kamera seçin"</string>
- <string name="pref_camera_id_entry_back" msgid="8034690205259224353">"Geri"</string>
- <string name="pref_camera_id_entry_front" msgid="2982741805298041753">"Ön"</string>
- <string name="pref_camera_recordlocation_title" msgid="9032205520216091730">"Saxlama yeri"</string>
- <string name="pref_camera_location_label" msgid="725236612912086608">"YER"</string>
- <string name="pref_camera_timer_title" msgid="6917581164323911874">"Geri sayma taymeri"</string>
- <plurals name="pref_camera_timer_entry">
- <item quantity="one" msgid="8868342573738742056">"1 saniyə"</item>
- <item quantity="other" msgid="3053084895126759755">"%d saniyə"</item>
- </plurals>
- <!-- no translation found for pref_camera_timer_sound_default (6748128807889344413) -->
- <skip />
- <string name="pref_camera_timer_sound_title" msgid="8640712080164781141">"Geri sayma zamanı siqnal"</string>
- <string name="setting_off" msgid="3321226648786639381">"Deaktiv"</string>
- <string name="setting_on" msgid="6658320155242340595">"Aktiv"</string>
- <string name="pref_video_quality_title" msgid="133986891365610568">"Video keyfiyyəti"</string>
- <string name="pref_video_quality_entry_high" msgid="2738623967850850381">"Yüksək"</string>
- <string name="pref_video_quality_entry_low" msgid="5153461037045200762">"Aşağı"</string>
- <string name="pref_video_time_lapse_frame_interval_title" msgid="5673396270006768004">"Vaxt aralığı"</string>
- <string name="pref_camera_settings_category" msgid="4286755118301278593">"Kamera parametrləri"</string>
- <string name="pref_camcorder_settings_category" msgid="4617708050480193189">"Videokamera ayarları"</string>
- <string name="pref_camera_picturesize_title" msgid="7285867796470070880">"Şəklin ölçüsü"</string>
- <string name="pref_camera_picturesize_entry_13mp" msgid="3084140665950405601">"13N piksel"</string>
- <string name="pref_camera_picturesize_entry_8mp" msgid="6497793506352769366">"8M piksel"</string>
- <string name="pref_camera_picturesize_entry_5mp" msgid="8813718385379530965">"5M Piksel"</string>
- <string name="pref_camera_picturesize_entry_4mp" msgid="8546276478576735924">"4M piksel"</string>
- <string name="pref_camera_picturesize_entry_3mp" msgid="6233692859150247237">"3M piksel"</string>
- <string name="pref_camera_picturesize_entry_2mp" msgid="542341433431186453">"2M piksel"</string>
- <string name="pref_camera_picturesize_entry_2mp_wide" msgid="607495602129189476">"2M piksel (16:9)"</string>
- <string name="pref_camera_picturesize_entry_1_3mp" msgid="2279105572299544416">"1.3M piksel"</string>
- <string name="pref_camera_picturesize_entry_1mp" msgid="4015199907773658431">"1M piksel"</string>
- <string name="pref_camera_picturesize_entry_vga" msgid="5417241189390562935">"VGA"</string>
- <string name="pref_camera_picturesize_entry_qvga" msgid="5211497128670067462">"QVGA"</string>
- <string name="pref_camera_focusmode_title" msgid="4675290599521989576">"Fokus rejimi"</string>
- <string name="pref_camera_focusmode_entry_auto" msgid="2359207328353055475">"Avto"</string>
- <string name="pref_camera_focusmode_entry_infinity" msgid="2864044462778663709">"Sonsuzluq"</string>
- <string name="pref_camera_focusmode_entry_macro" msgid="3737080531231192249">"Makro"</string>
- <string name="pref_camera_focusmode_label_auto" msgid="3156723882642048128">"AVTO"</string>
- <string name="pref_camera_focusmode_label_infinity" msgid="7911889349060603983">"Sonsuzluq"</string>
- <string name="pref_camera_focusmode_label_macro" msgid="4573817863140007172">"MAKRO"</string>
- <string name="pref_camera_flashmode_title" msgid="4037454739283955642">"Fləş rejimi"</string>
- <string name="pref_camera_flashmode_label" msgid="6684291276546279860">"İŞARTI REJİMİ"</string>
- <string name="pref_camera_flashmode_entry_auto" msgid="415227229724303061">"Avto"</string>
- <string name="pref_camera_flashmode_entry_on" msgid="88773476344754314">"Aktiv"</string>
- <string name="pref_camera_flashmode_entry_off" msgid="8251029141614172527">"Deaktiv"</string>
- <string name="pref_camera_flashmode_label_auto" msgid="3099050003430647170">"AVTOİŞARTI"</string>
- <string name="pref_camera_flashmode_label_on" msgid="2719503527558187559">"İŞARTI AKTİV"</string>
- <string name="pref_camera_flashmode_label_off" msgid="1018914822085714107">"İşıq qapalıdır"</string>
- <string name="pref_camera_whitebalance_title" msgid="3555176845614423913">"Ağlıq balansı"</string>
- <string name="pref_camera_whitebalance_label" msgid="4253164949812366852">"AĞ BALANS"</string>
- <string name="pref_camera_whitebalance_entry_auto" msgid="8495359619521890418">"Avto"</string>
- <string name="pref_camera_whitebalance_entry_incandescent" msgid="374516940783347212">"Közərmə lampası"</string>
- <string name="pref_camera_whitebalance_entry_daylight" msgid="6066029271198399632">"Gün işığı"</string>
- <string name="pref_camera_whitebalance_entry_fluorescent" msgid="1957728582798422397">"Flüoressent"</string>
- <string name="pref_camera_whitebalance_entry_cloudy" msgid="3695152185934196085">"Buludlu"</string>
- <string name="pref_camera_whitebalance_label_auto" msgid="1152472201811061031">"AVTO"</string>
- <string name="pref_camera_whitebalance_label_incandescent" msgid="8920127934705255947">"PARLAQ"</string>
- <string name="pref_camera_whitebalance_label_daylight" msgid="3554450557101127960">"GÜNDÜZ İŞIĞI"</string>
- <string name="pref_camera_whitebalance_label_fluorescent" msgid="3654887484979718684">"FLÜORESSENT"</string>
- <string name="pref_camera_whitebalance_label_cloudy" msgid="7288490282713935868">"BULUDLU"</string>
- <string name="pref_camera_scenemode_title" msgid="5200975368614697452">"Səhnə rejimi"</string>
- <string name="pref_camera_scenemode_entry_auto" msgid="7511260833909115424">"Avto"</string>
- <string name="pref_camera_scenemode_entry_hdr" msgid="1240176231782477736">"HDR"</string>
- <string name="pref_camera_scenemode_entry_action" msgid="1837585145734214002">"Əməliyyat"</string>
- <string name="pref_camera_scenemode_entry_night" msgid="7769610601562643051">"Gecə"</string>
- <string name="pref_camera_scenemode_entry_sunset" msgid="8181732673387418710">"Günbatma"</string>
- <string name="pref_camera_scenemode_entry_party" msgid="2053177794948141241">"Parti"</string>
- <string name="pref_camera_scenemode_label_auto" msgid="3930776963493458919">"HEÇ BİRİ"</string>
- <string name="pref_camera_scenemode_label_action" msgid="7770498283906927328">"HƏRƏKƏT"</string>
- <string name="pref_camera_scenemode_label_night" msgid="502442339727709162">"GECƏ"</string>
- <string name="pref_camera_scenemode_label_sunset" msgid="7721050709109503669">"QÜRUB"</string>
- <string name="pref_camera_scenemode_label_party" msgid="8942534460201242073">"Parti"</string>
- <string name="pref_camera_countdown_label_off" msgid="1200317172301019900">"Taymer deaktiv"</string>
- <string name="pref_camera_countdown_label_one" msgid="7105722039618597195">"1 SANİYƏ"</string>
- <string name="pref_camera_countdown_label_three" msgid="113172366823379525">"3 SANİYƏ"</string>
- <string name="pref_camera_countdown_label_ten" msgid="8259680166571641702">"10 saniyə"</string>
- <string name="pref_camera_countdown_label_fifteen" msgid="2251170484933984740">"15 SANİYƏ"</string>
- <string name="not_selectable_in_scene_mode" msgid="4186538577214404106">"Səhnə rejimində seçmək olmur."</string>
- <string name="pref_exposure_title" msgid="5211801488740367403">"Ekspozisiya"</string>
- <string name="pref_exposure_label" msgid="5586132867242336300">"Ekspozisiya"</string>
- <!-- no translation found for pref_camera_hdr_default (2725798708765488564) -->
- <skip />
- <string name="pref_camera_hdr_label" msgid="3566769675820087426">"HDR"</string>
- <string name="pref_camera_id_label_back" msgid="6322318969185513097">"Ön kamera"</string>
- <string name="pref_camera_id_label_front" msgid="3244743091065982114">"ARXA KAMERA"</string>
- <string name="dialog_ok" msgid="8097436389338241320">"Ok"</string>
- <string name="spaceIsLow_content" product="default" msgid="9172166257752848178">"SD kartınızın yaddaşı dolmaq üzrədir. Keyfiyyət ayarlarını dəyişin və ya şəkilləri, yaxud digər faylları silin."</string>
- <string name="video_reach_size_limit" msgid="3243731908069056095">"Ölçü limiti doldu."</string>
- <string name="pano_too_fast_prompt" msgid="992490587329437459">"Çox sürətli"</string>
- <string name="pano_dialog_prepare_preview" msgid="7116632064591648365">"Panorama hazırlanır"</string>
- <string name="pano_dialog_panorama_failed" msgid="1856809633978860743">"Panoramanı yadda saxlamaq mümkün olmadı."</string>
- <string name="pano_dialog_title" msgid="7236715443943941505">"Panorama"</string>
- <string name="pano_capture_indication" msgid="6826745806103872825">"Panorama Çəkilir"</string>
- <string name="pano_dialog_waiting_previous" msgid="1379192572905837403">"Öncəki panorama gözlənilir"</string>
- <string name="pano_review_saving_indication_str" msgid="7006233508921435129">"Yadda saxlanılır..."</string>
- <string name="pano_review_rendering" msgid="7712584259126188763">"Panorama göstərilməsi"</string>
- <string name="tap_to_focus" msgid="3031819623593720463">"Fokusa toxunun."</string>
- <string name="pref_video_effect_title" msgid="2371174223707366255">"Effektlər"</string>
- <string name="effect_none" msgid="1026487463817289779">"Heç biri"</string>
- <string name="effect_goofy_face_squeeze" msgid="1286464707958852799">"Sıx"</string>
- <string name="effect_goofy_face_big_eyes" msgid="6904511475216683450">"Böyük gözlər"</string>
- <string name="effect_goofy_face_big_mouth" msgid="4037032365093279045">"Böyük ağız"</string>
- <string name="effect_goofy_face_small_mouth" msgid="5950057962899410295">"Kiçik ağız"</string>
- <string name="effect_goofy_face_big_nose" msgid="6225216990258277302">"Böyük burun"</string>
- <string name="effect_goofy_face_small_eyes" msgid="547835991052738090">"Kiçik gözlər"</string>
- <string name="effect_backdropper_space" msgid="5794499374151237559">"Kosmosda"</string>
- <string name="effect_backdropper_sunset" msgid="2431035827232871903">"Günbatma"</string>
- <string name="effect_backdropper_gallery" msgid="3292606781700530872">"Videonuz"</string>
- <string name="video_snapshot_hint" msgid="56511446769261564">"Yazılış zamanı şəkil çəkmək üçün toxunun."</string>
- <string name="video_recording_started" msgid="1478448043553326540">"Video çəklişi başlamışdır."</string>
- <string name="video_recording_stopped" msgid="2676770458529207322">"Video çəkilişi dayanıb"</string>
- <string name="clear_effects" msgid="155262355011195942">"Effektləri silin"</string>
- <string name="effect_silly_faces" msgid="2764749499874707741">"Axmaq sifətlər"</string>
- <string name="effect_background" msgid="2260438748276866983">"Fon"</string>
- <string name="accessibility_shutter_button" msgid="442677115885353279">"Shutter"</string>
- <string name="accessibility_menu_button" msgid="7265396535447770250">"Menyu düyməsi"</string>
- <string name="accessibility_mode_picker" msgid="5708483984757534790">"Kamera, video və ya panorama seçicisi"</string>
- <string name="accessibility_check_box" msgid="6190311654361323510">"%1$s qeyd qutusu"</string>
- <string name="accessibility_switch_to_camera" msgid="8253443632354129201">"Fotoya keçirin"</string>
- <string name="accessibility_switch_to_video" msgid="685379350229791000">"Videoya keçin"</string>
- <string name="accessibility_switch_to_panorama" msgid="4367290605860986266">"Panoramaya keçin"</string>
- <string name="accessibility_switch_to_photo_sphere" msgid="7282333436078515422">"Şəkil sahəsi keçid"</string>
- <string name="accessibility_review_cancel" msgid="8233210011810145540">"Ləğvi gözdən keçir"</string>
- <string name="accessibility_review_ok" msgid="1919818908740908312">"{z\'t"</string>
- <string name="accessibility_review_retake" msgid="3256541538259494381">"Geri almaq inceleyin"</string>
- <string name="capital_on" msgid="5840588038158274585">"AKTIV"</string>
- <string name="capital_off" msgid="3199056669644846925">"QAPALI"</string>
- <string name="pref_video_time_lapse_frame_interval_off" msgid="8999446316706593179">"Deaktiv"</string>
- <string name="pref_video_time_lapse_frame_interval_500" msgid="8756750735297085410">"0,5 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_1000" msgid="7640704589637632218">"1 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_1500" msgid="8931945040035127831">"1,5 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_2000" msgid="3939716251293255146">"2 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_2500" msgid="7683749285828898630">"2,5 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_3000" msgid="780624543534219753">"3 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_4000" msgid="8889653143865462502">"4 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_5000" msgid="4102268340899789227">"5 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_6000" msgid="8603974284920017861">"6 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_10000" msgid="6650102184647775722">"10 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_12000" msgid="6753526423674050181">"12 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_15000" msgid="531646722496644257">"15 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_24000" msgid="290145063080413411">"24 saniyə"</string>
- <string name="pref_video_time_lapse_frame_interval_30000" msgid="9079297914740012179">"0,5 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_60000" msgid="3020106068480066496">"1 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_90000" msgid="2685855786622077615">"1,5 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_120000" msgid="7314050129714846577">"2 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_150000" msgid="4554449247426773111">"2,5 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_180000" msgid="4567679385417134299">"3 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_240000" msgid="980170959249981779">"4 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_300000" msgid="4134060119540433901">"5 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_360000" msgid="2279953220469717307">"6 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_600000" msgid="262948882057819428">"10 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_720000" msgid="5025274021438060973">"12 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_900000" msgid="535122783273231729">"15 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_1440000" msgid="1389025940394108838">"24 dəqiqə"</string>
- <string name="pref_video_time_lapse_frame_interval_1800000" msgid="3960495676390536948">"0,5 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4967310075272642117">"1 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_5400000" msgid="4381496945219954612">"1,5 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_7200000" msgid="6542316368455276228">"2 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_9000000" msgid="7058722410153205915">"2,5 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_10800000" msgid="6261070817876538949">"3 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_14400000" msgid="6980220047958957353">"4 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_18000000" msgid="7199366553142266407">"5 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_21600000" msgid="5736484130500539985">"6 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_36000000" msgid="720554925530517471">"10 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_43200000" msgid="322398198717672456">"12 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_54000000" msgid="4545285575174744076">"15 saat"</string>
- <string name="pref_video_time_lapse_frame_interval_86400000" msgid="225288451792149886">"24 saat"</string>
- <string name="time_lapse_seconds" msgid="6338396613003859047">"saniyə"</string>
- <string name="time_lapse_minutes" msgid="1610738675813013569">"dəqiqə"</string>
- <string name="time_lapse_hours" msgid="2466092767364327518">"saatlar"</string>
- <string name="time_lapse_interval_set" msgid="5430624261132317167">"Hazırdır"</string>
- <string name="set_time_interval" msgid="844482952911185265">"Vaxt intervalı seçin"</string>
- <string name="set_time_interval_help" msgid="1403571747238933001">"Vaxt aralığı özəlliyi deaktiv edilib. Vaxt intervalını ayarlamaq üçün onu aktivləşdirin."</string>
- <string name="set_duration" msgid="7425045408900251919">"Müddəti saniyələrlə ayarlayı"</string>
- <string name="count_down_title_text" msgid="8269417928362735617">"Foto çəkmək üçün geri sayılır"</string>
- <string name="remember_location_title" msgid="2290717227833540397">"Foto məkanları yadda qalsın?"</string>
- <string name="remember_location_prompt" msgid="6856517328973384896">"Fotolarınızı və videolarınızı çəkildikləri yerlərə teq edin.\n\nDigər tətbiqlər yadda saxladığınız şəkillərlə birlikdə bu məlumatları əldə edə bilər."</string>
- <string name="remember_location_no" msgid="5160772992721036553">"Yox, çox sağ olun"</string>
- <string name="remember_location_yes" msgid="4663333638854720964">"Bəli"</string>
- <string name="camera_menu_more_label" msgid="3997839063378329544">"Daha çox seçim"</string>
- <string name="camera_menu_settings_label" msgid="2038476709578884568">"AYARLAR"</string>
-</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
deleted file mode 100644
index 3674d07..0000000
--- a/res/values-ne-rNP/strings.xml
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2007 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="app_name" msgid="8338864393568040722">"क्यामेरा"</string>
- <string name="details_ms" msgid="4368407634456462224">"%1$02d:%2$02d"</string>
- <string name="details_hms" msgid="681695897098326459">"%1$d:%2$02d:%3$02d"</string>
- <string name="set_image" msgid="3011821258780340803">"को रूपमा तस्बिरलाई मिलाउनुहोस्"</string>
- <string name="delete" msgid="7258764001896874869">"मेट्नुहोस्"</string>
- <plurals name="delete_selection">
- <item quantity="one" msgid="2984228592820245170">"चयन गरिएका आइटमलाई हटाउने हो?"</item>
- <item quantity="other" msgid="882035505847338991">"छानिएका आइटमहरू हटाउने हो?"</item>
- </plurals>
- <string name="share" msgid="319799706929863109">"साझेदारी गर्नुहोस्"</string>
- <string name="share_panorama" msgid="7488525470543070168">"दृश्य साझेदारी गर्नुहोस्"</string>
- <string name="share_as_photo" msgid="8960831195285082544">"तस्बिरको रूपमा साझेदारी गर्नुहोस्"</string>
- <string name="deleted" msgid="1144434522200481802">"मेटियो"</string>
- <string name="undo" msgid="7561810819827468379">"अनडु गर्नुहोस्"</string>
- <string name="details" msgid="3581943734736871564">"विवरणहरू"</string>
- <string name="close" msgid="7196876073399885123">"बन्द गर्नुहोस्"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_items_selected:zero (629802015400399691) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_items_selected:one (4283105620980058761) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_items_selected:other (6433812272993337098) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_albums_selected:zero (7322496523426352621) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_albums_selected:one (3571296348626418242) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_albums_selected:other (3103452138866993468) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_groups_selected:zero (3312206920893882756) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_groups_selected:one (7749557015923438739) -->
- <!-- String.format failed for translation -->
- <!-- no translation found for number_of_groups_selected:other (3562299676983425193) -->
- <string name="show_on_map" msgid="1986264085815015696">"नक्सामा देखाउनुहोस्"</string>
- <string name="rotate_left" msgid="6719855780237705569">"बायाँ घुमाउनुहोस्"</string>
- <string name="rotate_right" msgid="8558343437940821771">"दायाँ घुमाउनुहोस्"</string>
- <string name="edit" msgid="8457904262004517151">"सम्पादन गर्नुहोस्"</string>
- <string name="crop_action" msgid="3281088975169422593">"क्रप गर्नुहोस्"</string>
- <string name="trim_action" msgid="1912063594235898890">"छाँट्नुहोस्"</string>
- <string name="set_as" msgid="7362777416265059096">"को रूपमा सेट गर्नुहोस्"</string>
- <string name="video_err" msgid="6747342411484597130">"भिडियो चलाउन सकेन।"</string>
- <string name="crop_saved" msgid="6708204358512805637">"काटिएको तस्बिरहरूलाई <xliff:g id="FOLDER_NAME">%s</xliff:g>मा सुरक्षित गरिएको छ।"</string>
- <string name="title" msgid="1465174588508188840">"शीर्षक"</string>
- <string name="description" msgid="7012551348834166615">"वर्णन"</string>
- <string name="time" msgid="53680310933472250">"समय"</string>
- <string name="location" msgid="7836832588874777265">"स्थान"</string>
- <string name="path" msgid="7641372546343443225">"बाटो"</string>
- <string name="width" msgid="4689895076320623907">"चौडाइ"</string>
- <string name="height" msgid="3982701549798669179">"उचाइ"</string>
- <string name="orientation" msgid="6270421867039429826">"अभिविन्यास"</string>
- <string name="duration" msgid="1998783741258561149">"अवधि"</string>
- <string name="mimetype" msgid="2655949175201126964">"MIME प्रकार"</string>
- <string name="file_size" msgid="624610858632029292">"फाइल आकार:"</string>
- <string name="maker" msgid="6997781789783937494">"निर्माता"</string>
- <string name="model" msgid="1812030182695078529">"मोडेल"</string>
- <string name="flash" msgid="8875025367055499744">"फ्ल्यास"</string>
- <string name="aperture" msgid="4049918471495099840">"प्वाल"</string>
- <string name="focal_length" msgid="7208863566011453148">"फोकल लम्बाइ:"</string>
- <string name="white_balance" msgid="2638519262687012770">"श्वेत सन्तुलन"</string>
- <string name="exposure_time" msgid="6992897250021008387">"एक्सपोजर समय"</string>
- <string name="iso" msgid="4909058434077568534">"ISO"</string>
- <string name="unit_mm" msgid="1893537204908056363">"मिलिमिटर"</string>
- <string name="manual" msgid="7862595820452711108">"म्यानुएल"</string>
- <string name="auto" msgid="6792260257128968793">"स्वतः"</string>
- <string name="flash_on" msgid="4053187950402210000">"फ्ल्यास चलाइयो"</string>
- <string name="flash_off" msgid="7313393221333362406">"फ्ल्यास छैन"</string>
- <string name="unknown" msgid="2211992216750845926">"अज्ञात"</string>
- <string name="try_to_set_local_album_available_offline" msgid="1084363257705484486">"यो वस्तु स्थानिय रूपमा भन्डारण गरिएको छ र अफलाइन उपलब्ध छ।"</string>
- <string name="please_wait" msgid="99283054995831377">"कृपया प्रतीक्षा गर्नुहोस् ..."</string>
- <string name="rendering_photo_sphere" msgid="6767345449862157889">"photo sphere प्रतिपादन"</string>
- <string name="camera_error_title" msgid="434116066686973315">"क्यामेरा त्रुटि"</string>
- <string name="cannot_connect_camera" msgid="3323690925318631453">"क्यामेरासँग जडान गर्न सक्दैन"</string>
- <string name="camera_disabled" msgid="4927328535752421596">"सुरक्षा नीतिहरूका कारण क्यामरा निष्क्रिय गरिएको छ।"</string>
- <string name="wait" msgid="2081747495953883435">"कृपया प्रतीक्षा गर्नुहोस्..."</string>
- <string name="no_storage" product="default" msgid="5694411578108472132">"क्यामेराको उपयोग गर्नु अघि एउटा SD कार्ड भित्र राख्नुहोस्।"</string>
- <string name="preparing_sd" product="default" msgid="5062635071578247325">"SD कार्ड तयार गरिँदै..."</string>
- <string name="access_sd_fail" product="default" msgid="7705342436207795167">"SD कार्ड प्रयोग गर्न सकेन।"</string>
- <string name="time_lapse_title" msgid="264021984782348139">"समय ल्याप्स रेकर्डिङ"</string>
- <string name="pref_camera_id_title" msgid="8027686978170301915">"क्यामेरा चयन गर्नुहोस्"</string>
- <string name="pref_camera_id_entry_back" msgid="8034690205259224353">"पछाडि जानुहोस्"</string>
- <string name="pref_camera_id_entry_front" msgid="2982741805298041753">"अगाडि"</string>
- <string name="pref_camera_recordlocation_title" msgid="9032205520216091730">"स्थान भण्डारण गर्नुहोस्"</string>
- <string name="pref_camera_location_label" msgid="725236612912086608">"स्थान:"</string>
- <string name="pref_camera_timer_title" msgid="6917581164323911874">"उल्टा गन्ने घडी"</string>
- <plurals name="pref_camera_timer_entry">
- <item quantity="one" msgid="8868342573738742056">"१ सेकेन्ड"</item>
- <item quantity="other" msgid="3053084895126759755">"%d सेकेण्ड"</item>
- </plurals>
- <!-- no translation found for pref_camera_timer_sound_default (6748128807889344413) -->
- <skip />
- <string name="pref_camera_timer_sound_title" msgid="8640712080164781141">"उल्टा गर्ने क्रममा बिप"</string>
- <string name="setting_off" msgid="3321226648786639381">"बन्द"</string>
- <string name="setting_on" msgid="6658320155242340595">"खुला"</string>
- <string name="pref_video_quality_title" msgid="133986891365610568">"भिडियो गुणस्तर"</string>
- <string name="pref_video_quality_entry_high" msgid="2738623967850850381">"उच्च"</string>
- <string name="pref_video_quality_entry_low" msgid="5153461037045200762">"कम"</string>
- <string name="pref_video_time_lapse_frame_interval_title" msgid="5673396270006768004">"समय गल्ती"</string>
- <string name="pref_camera_settings_category" msgid="4286755118301278593">"क्यामरा सेटिङहरू"</string>
- <string name="pref_camcorder_settings_category" msgid="4617708050480193189">"क्यामकोडर सेटिङहरू"</string>
- <string name="pref_camera_picturesize_title" msgid="7285867796470070880">"चित्र आकार"</string>
- <string name="pref_camera_picturesize_entry_13mp" msgid="3084140665950405601">"13M पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_8mp" msgid="6497793506352769366">"8M पिक्सल"</string>
- <string name="pref_camera_picturesize_entry_5mp" msgid="8813718385379530965">"5M पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_4mp" msgid="8546276478576735924">"4M पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_3mp" msgid="6233692859150247237">"3M पिक्सल"</string>
- <string name="pref_camera_picturesize_entry_2mp" msgid="542341433431186453">"२ मेगा पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_2mp_wide" msgid="607495602129189476">"2M पिक्सेल (16:9)"</string>
- <string name="pref_camera_picturesize_entry_1_3mp" msgid="2279105572299544416">"1.3M पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_1mp" msgid="4015199907773658431">"१ मेगा पिक्सेल"</string>
- <string name="pref_camera_picturesize_entry_vga" msgid="5417241189390562935">"VGA"</string>
- <string name="pref_camera_picturesize_entry_qvga" msgid="5211497128670067462">"QVGA"</string>
- <string name="pref_camera_focusmode_title" msgid="4675290599521989576">"फोकस मोड"</string>
- <string name="pref_camera_focusmode_entry_auto" msgid="2359207328353055475">"स्वतः"</string>
- <string name="pref_camera_focusmode_entry_infinity" msgid="2864044462778663709">"अनन्तता"</string>
- <string name="pref_camera_focusmode_entry_macro" msgid="3737080531231192249">"बृहद्"</string>
- <string name="pref_camera_focusmode_label_auto" msgid="3156723882642048128">"स्वतः"</string>
- <string name="pref_camera_focusmode_label_infinity" msgid="7911889349060603983">"अनन्तता"</string>
- <string name="pref_camera_focusmode_label_macro" msgid="4573817863140007172">"बृहद्"</string>
- <string name="pref_camera_flashmode_title" msgid="4037454739283955642">"फ्ल्यास मोड"</string>
- <string name="pref_camera_flashmode_label" msgid="6684291276546279860">"फल्यास मोड"</string>
- <string name="pref_camera_flashmode_entry_auto" msgid="415227229724303061">"स्वतः"</string>
- <string name="pref_camera_flashmode_entry_on" msgid="88773476344754314">"खुला"</string>
- <string name="pref_camera_flashmode_entry_off" msgid="8251029141614172527">"बन्द"</string>
- <string name="pref_camera_flashmode_label_auto" msgid="3099050003430647170">"फ्ल्यास अटो"</string>
- <string name="pref_camera_flashmode_label_on" msgid="2719503527558187559">"फ्ल्यास खुला"</string>
- <string name="pref_camera_flashmode_label_off" msgid="1018914822085714107">"फ्ल्यास बन्द"</string>
- <string name="pref_camera_whitebalance_title" msgid="3555176845614423913">"श्वेत सन्तुलन"</string>
- <string name="pref_camera_whitebalance_label" msgid="4253164949812366852">"स्वेत सन्तुलन"</string>
- <string name="pref_camera_whitebalance_entry_auto" msgid="8495359619521890418">"स्वतः"</string>
- <string name="pref_camera_whitebalance_entry_incandescent" msgid="374516940783347212">"चम्कन"</string>
- <string name="pref_camera_whitebalance_entry_daylight" msgid="6066029271198399632">"दिनको प्रकाश"</string>
- <string name="pref_camera_whitebalance_entry_fluorescent" msgid="1957728582798422397">"फ्लोरेसेन्ट"</string>
- <string name="pref_camera_whitebalance_entry_cloudy" msgid="3695152185934196085">"बादलु"</string>
- <string name="pref_camera_whitebalance_label_auto" msgid="1152472201811061031">"स्वतः"</string>
- <string name="pref_camera_whitebalance_label_incandescent" msgid="8920127934705255947">"चम्कने"</string>
- <string name="pref_camera_whitebalance_label_daylight" msgid="3554450557101127960">"दिनको प्रकाश"</string>
- <string name="pref_camera_whitebalance_label_fluorescent" msgid="3654887484979718684">"फ्लोरेसेन्ट"</string>
- <string name="pref_camera_whitebalance_label_cloudy" msgid="7288490282713935868">"बादलु"</string>
- <string name="pref_camera_scenemode_title" msgid="5200975368614697452">"दृश्य मोड"</string>
- <string name="pref_camera_scenemode_entry_auto" msgid="7511260833909115424">"स्वतः"</string>
- <string name="pref_camera_scenemode_entry_hdr" msgid="1240176231782477736">"HDR"</string>
- <string name="pref_camera_scenemode_entry_action" msgid="1837585145734214002">"कार्य"</string>
- <string name="pref_camera_scenemode_entry_night" msgid="7769610601562643051">"रात"</string>
- <string name="pref_camera_scenemode_entry_sunset" msgid="8181732673387418710">"सूर्यास्त"</string>
- <string name="pref_camera_scenemode_entry_party" msgid="2053177794948141241">"भोज"</string>
- <string name="pref_camera_scenemode_label_auto" msgid="3930776963493458919">"कुनै पनि होइन"</string>
- <string name="pref_camera_scenemode_label_action" msgid="7770498283906927328">"कार्य"</string>
- <string name="pref_camera_scenemode_label_night" msgid="502442339727709162">"रात"</string>
- <string name="pref_camera_scenemode_label_sunset" msgid="7721050709109503669">"सूर्यास्त"</string>
- <string name="pref_camera_scenemode_label_party" msgid="8942534460201242073">"भोज"</string>
- <string name="pref_camera_countdown_label_off" msgid="1200317172301019900">"घडी बन्द"</string>
- <string name="pref_camera_countdown_label_one" msgid="7105722039618597195">"१ सेकेन्ड"</string>
- <string name="pref_camera_countdown_label_three" msgid="113172366823379525">"३ सेकेन्ड"</string>
- <string name="pref_camera_countdown_label_ten" msgid="8259680166571641702">"१० सेकेन्ड"</string>
- <string name="pref_camera_countdown_label_fifteen" msgid="2251170484933984740">"१५ सेकेन्ड"</string>
- <string name="not_selectable_in_scene_mode" msgid="4186538577214404106">"दृश्य मोडमा चयनयोग्य हुँदैन।"</string>
- <string name="pref_exposure_title" msgid="5211801488740367403">"एक्सपोजर"</string>
- <string name="pref_exposure_label" msgid="5586132867242336300">"खुल्ला"</string>
- <!-- no translation found for pref_camera_hdr_default (2725798708765488564) -->
- <skip />
- <string name="pref_camera_hdr_label" msgid="3566769675820087426">"HDR"</string>
- <string name="pref_camera_id_label_back" msgid="6322318969185513097">"अगाडिको क्यामेरा"</string>
- <string name="pref_camera_id_label_front" msgid="3244743091065982114">"पछाडिको क्यामेरा"</string>
- <string name="dialog_ok" msgid="8097436389338241320">"ठीक छ"</string>
- <string name="spaceIsLow_content" product="default" msgid="9172166257752848178">"तपाईँको SD कार्डको स्पेस सकिँदै छ। गुणस्तर सेटिङ परिवर्तन गर्नुहोस् अथवा केही तस्बिरहरू वा अन्य फाइलहरू मेट्नुहोस्।"</string>
- <string name="video_reach_size_limit" msgid="3243731908069056095">"आकार सीमा पुग्यो।"</string>
- <string name="pano_too_fast_prompt" msgid="992490587329437459">"अति छिटो"</string>
- <string name="pano_dialog_prepare_preview" msgid="7116632064591648365">"दृश्य तयार गरिँदै"</string>
- <string name="pano_dialog_panorama_failed" msgid="1856809633978860743">"दृश्य सुरक्षित गर्न सकेन।"</string>
- <string name="pano_dialog_title" msgid="7236715443943941505">"परिदृश्य"</string>
- <string name="pano_capture_indication" msgid="6826745806103872825">"दृश्य खिच्दै"</string>
- <string name="pano_dialog_waiting_previous" msgid="1379192572905837403">"अघिल्लो दृश्यको प्रतिक्षा गर्दै।"</string>
- <string name="pano_review_saving_indication_str" msgid="7006233508921435129">"सुरक्षि गर्दै...."</string>
- <string name="pano_review_rendering" msgid="7712584259126188763">"दृश्य प्रतिपादन"</string>
- <string name="tap_to_focus" msgid="3031819623593720463">"फोकस गर्न छुनुहोस्।"</string>
- <string name="pref_video_effect_title" msgid="2371174223707366255">"प्रभावहरू"</string>
- <string name="effect_none" msgid="1026487463817289779">"कुनै पनि होइन"</string>
- <string name="effect_goofy_face_squeeze" msgid="1286464707958852799">"निचोर्नुहोस्"</string>
- <string name="effect_goofy_face_big_eyes" msgid="6904511475216683450">"ठूला आँखा"</string>
- <string name="effect_goofy_face_big_mouth" msgid="4037032365093279045">"ठूलो मुख"</string>
- <string name="effect_goofy_face_small_mouth" msgid="5950057962899410295">"सानो मुख"</string>
- <string name="effect_goofy_face_big_nose" msgid="6225216990258277302">"ठूलो नाक"</string>
- <string name="effect_goofy_face_small_eyes" msgid="547835991052738090">"साना आँखाहरू"</string>
- <string name="effect_backdropper_space" msgid="5794499374151237559">"अन्तरिक्षमा"</string>
- <string name="effect_backdropper_sunset" msgid="2431035827232871903">"सूर्यास्त"</string>
- <string name="effect_backdropper_gallery" msgid="3292606781700530872">"तपाईँको भिडियो"</string>
- <string name="video_snapshot_hint" msgid="56511446769261564">"खिचिरहेको बेला तस्बिर लिनको लागि छुनुहोस्।"</string>
- <string name="video_recording_started" msgid="1478448043553326540">"भिडियो खिच्न सुरु भएको छ।"</string>
- <string name="video_recording_stopped" msgid="2676770458529207322">"भिडियो खिच्न रोकिएको छ।"</string>
- <string name="clear_effects" msgid="155262355011195942">"स्पष्ट प्रभावहरू"</string>
- <string name="effect_silly_faces" msgid="2764749499874707741">"मूर्ख अनुहारहरू"</string>
- <string name="effect_background" msgid="2260438748276866983">"पृष्ठभूमि"</string>
- <string name="accessibility_shutter_button" msgid="442677115885353279">"सटर"</string>
- <string name="accessibility_menu_button" msgid="7265396535447770250">"मेनु बटन"</string>
- <string name="accessibility_mode_picker" msgid="5708483984757534790">"क्यामेरा, भिडियो वा दृश्य चयनकर्ता"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for accessibility_check_box (6190311654361323510) -->
- <skip />
- <string name="accessibility_switch_to_camera" msgid="8253443632354129201">"फोटामा स्विच गर्नुहोस्"</string>
- <string name="accessibility_switch_to_video" msgid="685379350229791000">"भिडियोमा स्विच गर्नुहोस्"</string>
- <string name="accessibility_switch_to_panorama" msgid="4367290605860986266">"दृश्यमा स्विच गर्नुहोस्"</string>
- <string name="accessibility_switch_to_photo_sphere" msgid="7282333436078515422">"Photo Sphere मा स्विच गर्नुहोस्"</string>
- <string name="accessibility_review_cancel" msgid="8233210011810145540">"समीक्षा रद्द गर्नुहोस्"</string>
- <string name="accessibility_review_ok" msgid="1919818908740908312">"समीक्षा गरियो"</string>
- <string name="accessibility_review_retake" msgid="3256541538259494381">"समीक्षा पुनः लिनुहोस्"</string>
- <string name="capital_on" msgid="5840588038158274585">"खुला"</string>
- <string name="capital_off" msgid="3199056669644846925">"बन्द"</string>
- <string name="pref_video_time_lapse_frame_interval_off" msgid="8999446316706593179">"बन्द"</string>
- <string name="pref_video_time_lapse_frame_interval_500" msgid="8756750735297085410">"०.५ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_1000" msgid="7640704589637632218">"१ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_1500" msgid="8931945040035127831">"१.५ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_2000" msgid="3939716251293255146">"२ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_2500" msgid="7683749285828898630">"२.५ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_3000" msgid="780624543534219753">"३ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_4000" msgid="8889653143865462502">"४ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_5000" msgid="4102268340899789227">"५ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_6000" msgid="8603974284920017861">"६ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_10000" msgid="6650102184647775722">"१० सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_12000" msgid="6753526423674050181">"१२ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_15000" msgid="531646722496644257">"१५ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_24000" msgid="290145063080413411">"२ सेकेन्ड"</string>
- <string name="pref_video_time_lapse_frame_interval_30000" msgid="9079297914740012179">"०.५ मिनट"</string>
- <string name="pref_video_time_lapse_frame_interval_60000" msgid="3020106068480066496">"१ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_90000" msgid="2685855786622077615">"१.५ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_120000" msgid="7314050129714846577">"२ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_150000" msgid="4554449247426773111">"२.५ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_180000" msgid="4567679385417134299">"३ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_240000" msgid="980170959249981779">"४ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_300000" msgid="4134060119540433901">"५ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_360000" msgid="2279953220469717307">"६ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_600000" msgid="262948882057819428">"१० मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_720000" msgid="5025274021438060973">"१२ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_900000" msgid="535122783273231729">"१५ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_1440000" msgid="1389025940394108838">"२४ मिनेट"</string>
- <string name="pref_video_time_lapse_frame_interval_1800000" msgid="3960495676390536948">"०.५ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4967310075272642117">"१ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_5400000" msgid="4381496945219954612">"१.५ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_7200000" msgid="6542316368455276228">"२ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_9000000" msgid="7058722410153205915">"२.५ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_10800000" msgid="6261070817876538949">"३ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_14400000" msgid="6980220047958957353">"४ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_18000000" msgid="7199366553142266407">"५ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_21600000" msgid="5736484130500539985">"६ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_36000000" msgid="720554925530517471">"१० घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_43200000" msgid="322398198717672456">"१२ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_54000000" msgid="4545285575174744076">"१५ घन्टा"</string>
- <string name="pref_video_time_lapse_frame_interval_86400000" msgid="225288451792149886">"२४ घन्टा"</string>
- <string name="time_lapse_seconds" msgid="6338396613003859047">"सेकोन्ड"</string>
- <string name="time_lapse_minutes" msgid="1610738675813013569">"मिनेट"</string>
- <string name="time_lapse_hours" msgid="2466092767364327518">"घन्टा"</string>
- <string name="time_lapse_interval_set" msgid="5430624261132317167">"भयो"</string>
- <string name="set_time_interval" msgid="844482952911185265">"समय मध्यान्तर सेट गर्नुहोस्"</string>
- <string name="set_time_interval_help" msgid="1403571747238933001">"समय ल्याप्स सुविधा बन्द छ। समय मध्यान्तर मिलाउन यसलाई खोल्नुहोस्।"</string>
- <string name="set_duration" msgid="7425045408900251919">"सेकेन्डमा अवधि निर्धारित गर्नुहोस्"</string>
- <string name="count_down_title_text" msgid="8269417928362735617">"एउटा तस्बिर लिनका लागि उल्टो गन्दै"</string>
- <string name="remember_location_title" msgid="2290717227833540397">"फोटा स्थानहरू याद गर्नुहोस?"</string>
- <string name="remember_location_prompt" msgid="6856517328973384896">"जहाँ लिइएको स्थानका साथ आफ्ना फोटा र भिडियोहरू ट्याग गर्नुहोस्। \n \n तपाईँले सुरक्षित गरेका तस्बिरहरूका साथै अरू अनुप्रयोगहरूले यी जानकारीहरू उपयोग गर्न सक्छन्।"</string>
- <string name="remember_location_no" msgid="5160772992721036553">"धन्यवाद पर्दैन"</string>
- <string name="remember_location_yes" msgid="4663333638854720964">"हो"</string>
- <string name="camera_menu_more_label" msgid="3997839063378329544">"अरू विकल्पहरू"</string>
- <string name="camera_menu_settings_label" msgid="2038476709578884568">"सेटिङहरू"</string>
-</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
deleted file mode 100644
index 5c26948..0000000
--- a/res/values-si-rLK/strings.xml
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2007 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="app_name" msgid="8338864393568040722">"කැමරාව"</string>
- <string name="details_ms" msgid="4368407634456462224">"%1$02d:%2$02d"</string>
- <string name="details_hms" msgid="681695897098326459">"%1$d:%2$02d:%3$02d"</string>
- <string name="set_image" msgid="3011821258780340803">"ලෙස පින්තූරය සකසන්න"</string>
- <string name="delete" msgid="7258764001896874869">"මකන්න"</string>
- <plurals name="delete_selection">
- <item quantity="one" msgid="2984228592820245170">"තෝරගත් අයිතමය මකන්නද?"</item>
- <item quantity="other" msgid="882035505847338991">"තෝරාගත් අයිතම මකන්නද?"</item>
- </plurals>
- <string name="share" msgid="319799706929863109">"බෙදාගන්න"</string>
- <string name="share_panorama" msgid="7488525470543070168">"පරිදර්ශනය බෙදා ගන්න"</string>
- <string name="share_as_photo" msgid="8960831195285082544">"ඡායාරූපය ලෙස බෙදා ගන්න"</string>
- <string name="deleted" msgid="1144434522200481802">"මකාදමන ලදි"</string>
- <string name="undo" msgid="7561810819827468379">"අස් කරන්න"</string>
- <string name="details" msgid="3581943734736871564">"විස්තර"</string>
- <string name="close" msgid="7196876073399885123">"වසන්න"</string>
- <plurals name="number_of_items_selected">
- <item quantity="zero" msgid="629802015400399691">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="one" msgid="4283105620980058761">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="other" msgid="6433812272993337098">"%1$d තෝරා ගන්නා ලදි"</item>
- </plurals>
- <plurals name="number_of_albums_selected">
- <item quantity="zero" msgid="7322496523426352621">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="one" msgid="3571296348626418242">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="other" msgid="3103452138866993468">"%1$d තෝරා ගන්නා ලදි"</item>
- </plurals>
- <plurals name="number_of_groups_selected">
- <item quantity="zero" msgid="3312206920893882756">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="one" msgid="7749557015923438739">"%1$d තෝරා ගන්නා ලදි"</item>
- <item quantity="other" msgid="3562299676983425193">"%1$d තෝරා ගන්නා ලදි"</item>
- </plurals>
- <string name="show_on_map" msgid="1986264085815015696">"සිතියම මත පෙන්වන්න"</string>
- <string name="rotate_left" msgid="6719855780237705569">"වමට කරකවන්න"</string>
- <string name="rotate_right" msgid="8558343437940821771">"දකුණට හරවන්න"</string>
- <string name="edit" msgid="8457904262004517151">"සංස්කරණය කරන්න"</string>
- <string name="crop_action" msgid="3281088975169422593">"කප්පාදු කිරීම"</string>
- <string name="trim_action" msgid="1912063594235898890">"අහුකොන් කපන්න"</string>
- <string name="set_as" msgid="7362777416265059096">"ලෙස සකසන්න"</string>
- <string name="video_err" msgid="6747342411484597130">"වීඩියෝව ධාවනය කළ නොහැක."</string>
- <string name="crop_saved" msgid="6708204358512805637">"<xliff:g id="FOLDER_NAME">%s</xliff:g> වෙත කප්පාදු කළ පින්තුරය සුරැකිණි."</string>
- <string name="title" msgid="1465174588508188840">"මාතෘකාව"</string>
- <string name="description" msgid="7012551348834166615">"විස්තරය"</string>
- <string name="time" msgid="53680310933472250">"වේලාව"</string>
- <string name="location" msgid="7836832588874777265">"ස්ථානය"</string>
- <string name="path" msgid="7641372546343443225">"මග"</string>
- <string name="width" msgid="4689895076320623907">"පළල"</string>
- <string name="height" msgid="3982701549798669179">"උස"</string>
- <string name="orientation" msgid="6270421867039429826">"දිශානතිය"</string>
- <string name="duration" msgid="1998783741258561149">"කාල සීමාව"</string>
- <string name="mimetype" msgid="2655949175201126964">"MIME වර්ගය"</string>
- <string name="file_size" msgid="624610858632029292">"ගොනු ප්රමාණය"</string>
- <string name="maker" msgid="6997781789783937494">"නිමැවුම්කරු"</string>
- <string name="model" msgid="1812030182695078529">"අනුකෘතිය"</string>
- <string name="flash" msgid="8875025367055499744">"සැණෙලිය"</string>
- <string name="aperture" msgid="4049918471495099840">"විවරය"</string>
- <string name="focal_length" msgid="7208863566011453148">"නාභි දුර"</string>
- <string name="white_balance" msgid="2638519262687012770">"සුදු සමබරතාව"</string>
- <string name="exposure_time" msgid="6992897250021008387">"නිරාවරණ කාලය"</string>
- <string name="iso" msgid="4909058434077568534">"ISO"</string>
- <string name="unit_mm" msgid="1893537204908056363">"mm"</string>
- <string name="manual" msgid="7862595820452711108">"අතින් කරන"</string>
- <string name="auto" msgid="6792260257128968793">"ස්වයං"</string>
- <string name="flash_on" msgid="4053187950402210000">"සැණෙලි පත්තු කරන ලදී"</string>
- <string name="flash_off" msgid="7313393221333362406">"සැණෙලි නැත"</string>
- <string name="unknown" msgid="2211992216750845926">"නොදනී"</string>
- <string name="try_to_set_local_album_available_offline" msgid="1084363257705484486">"මෙම අයිතමය ස්ථානිකව ගබඩා කර ඇති අතර නොබැඳිව ලබා ගත හැක."</string>
- <string name="please_wait" msgid="99283054995831377">"කරුණාකර රැඳී සිටින්න"</string>
- <string name="rendering_photo_sphere" msgid="6767345449862157889">"ෆොටෝ ස්පීයර් ප්රවාචනය කරමින්"</string>
- <string name="camera_error_title" msgid="434116066686973315">"කැමරා දෝෂය"</string>
- <string name="cannot_connect_camera" msgid="3323690925318631453">"කැමරාව වෙත සම්බන්ධ කළ නොහැක."</string>
- <string name="camera_disabled" msgid="4927328535752421596">"ආරක්ෂණ ප්රතිපත්ති නිසා කැමරාව අබල කර ඇත."</string>
- <string name="wait" msgid="2081747495953883435">"කරුණාකර රැඳී සිටින්න..."</string>
- <string name="no_storage" product="default" msgid="5694411578108472132">"කැමරාව භාවිතා කිරීමට පෙර SD කාඩ් පතක් ඇතුලු කරන්න."</string>
- <string name="preparing_sd" product="default" msgid="5062635071578247325">"SD කාඩ්පත පිළියෙළ කෙරේ…"</string>
- <string name="access_sd_fail" product="default" msgid="7705342436207795167">"SD කාඩ් පතට ප්රවේශ විය නොහැක."</string>
- <string name="time_lapse_title" msgid="264021984782348139">"කාලය ඉකුත්වීමේ පටිගත කිරීම"</string>
- <string name="pref_camera_id_title" msgid="8027686978170301915">"කැමරාව තෝරන්න"</string>
- <string name="pref_camera_id_entry_back" msgid="8034690205259224353">"ආපසු"</string>
- <string name="pref_camera_id_entry_front" msgid="2982741805298041753">"ඉදිරිපස"</string>
- <string name="pref_camera_recordlocation_title" msgid="9032205520216091730">"ආචය ස්ථානය"</string>
- <string name="pref_camera_location_label" msgid="725236612912086608">"ස්ථානය"</string>
- <string name="pref_camera_timer_title" msgid="6917581164323911874">"ආපස්සට ගණන් කිරීමේ කාල ගණකය"</string>
- <plurals name="pref_camera_timer_entry">
- <item quantity="one" msgid="8868342573738742056">"තත්පර 1"</item>
- <item quantity="other" msgid="3053084895126759755">"තත්පර %d"</item>
- </plurals>
- <!-- no translation found for pref_camera_timer_sound_default (6748128807889344413) -->
- <skip />
- <string name="pref_camera_timer_sound_title" msgid="8640712080164781141">"ආපස්සට ගණන් කිරීමේ බීප් නාදය"</string>
- <string name="setting_off" msgid="3321226648786639381">"අක්රියයි"</string>
- <string name="setting_on" msgid="6658320155242340595">"සක්රිය කරන්න"</string>
- <string name="pref_video_quality_title" msgid="133986891365610568">"වීඩියෝ ගුණත්වය"</string>
- <string name="pref_video_quality_entry_high" msgid="2738623967850850381">"ඉහළ"</string>
- <string name="pref_video_quality_entry_low" msgid="5153461037045200762">"පහළ"</string>
- <string name="pref_video_time_lapse_frame_interval_title" msgid="5673396270006768004">"කාලය ඉකුත්වීම"</string>
- <string name="pref_camera_settings_category" msgid="4286755118301278593">"කැමරා සැකසීම්"</string>
- <string name="pref_camcorder_settings_category" msgid="4617708050480193189">"කැම්කෝඩර සැකසීම්"</string>
- <string name="pref_camera_picturesize_title" msgid="7285867796470070880">"පින්තූර ප්රමාණය"</string>
- <string name="pref_camera_picturesize_entry_13mp" msgid="3084140665950405601">"පික්සල් 13M"</string>
- <string name="pref_camera_picturesize_entry_8mp" msgid="6497793506352769366">"පික්සල 8M"</string>
- <string name="pref_camera_picturesize_entry_5mp" msgid="8813718385379530965">"පික්සල 5M"</string>
- <string name="pref_camera_picturesize_entry_4mp" msgid="8546276478576735924">"4M පික්සල්"</string>
- <string name="pref_camera_picturesize_entry_3mp" msgid="6233692859150247237">"පික්සල 3M"</string>
- <string name="pref_camera_picturesize_entry_2mp" msgid="542341433431186453">"පික්සල 2M"</string>
- <string name="pref_camera_picturesize_entry_2mp_wide" msgid="607495602129189476">"2M පික්සල් (16:9)"</string>
- <string name="pref_camera_picturesize_entry_1_3mp" msgid="2279105572299544416">"පික්සල 1.3M"</string>
- <string name="pref_camera_picturesize_entry_1mp" msgid="4015199907773658431">"පික්සල 1M"</string>
- <string name="pref_camera_picturesize_entry_vga" msgid="5417241189390562935">"VGA"</string>
- <string name="pref_camera_picturesize_entry_qvga" msgid="5211497128670067462">"QVGA"</string>
- <string name="pref_camera_focusmode_title" msgid="4675290599521989576">"නාභිගත ප්රකාරය"</string>
- <string name="pref_camera_focusmode_entry_auto" msgid="2359207328353055475">"ස්වයං"</string>
- <string name="pref_camera_focusmode_entry_infinity" msgid="2864044462778663709">"අනන්තය"</string>
- <string name="pref_camera_focusmode_entry_macro" msgid="3737080531231192249">"මැක්රො"</string>
- <string name="pref_camera_focusmode_label_auto" msgid="3156723882642048128">"ස්වයංක්රීය"</string>
- <string name="pref_camera_focusmode_label_infinity" msgid="7911889349060603983">"අනන්තය"</string>
- <string name="pref_camera_focusmode_label_macro" msgid="4573817863140007172">"මැක්රො"</string>
- <string name="pref_camera_flashmode_title" msgid="4037454739283955642">"සැණෙළි ප්රකාරය"</string>
- <string name="pref_camera_flashmode_label" msgid="6684291276546279860">"සැණෙළි ආකාරය"</string>
- <string name="pref_camera_flashmode_entry_auto" msgid="415227229724303061">"ස්වයං"</string>
- <string name="pref_camera_flashmode_entry_on" msgid="88773476344754314">"සක්රිය කරන්න"</string>
- <string name="pref_camera_flashmode_entry_off" msgid="8251029141614172527">"අක්රියයි"</string>
- <string name="pref_camera_flashmode_label_auto" msgid="3099050003430647170">"සැණෙලි ස්වයං"</string>
- <string name="pref_camera_flashmode_label_on" msgid="2719503527558187559">"සැණෙලිය සක්රියයි"</string>
- <string name="pref_camera_flashmode_label_off" msgid="1018914822085714107">"සැණෙළිය අක්රියයි"</string>
- <string name="pref_camera_whitebalance_title" msgid="3555176845614423913">"සුදු සමබරතාව"</string>
- <string name="pref_camera_whitebalance_label" msgid="4253164949812366852">"සුදු සමබරතාවය"</string>
- <string name="pref_camera_whitebalance_entry_auto" msgid="8495359619521890418">"ස්වයං"</string>
- <string name="pref_camera_whitebalance_entry_incandescent" msgid="374516940783347212">"තාපදීප්ත"</string>
- <string name="pref_camera_whitebalance_entry_daylight" msgid="6066029271198399632">"දිවා ආලෝකය"</string>
- <string name="pref_camera_whitebalance_entry_fluorescent" msgid="1957728582798422397">"ප්රතිදීපන"</string>
- <string name="pref_camera_whitebalance_entry_cloudy" msgid="3695152185934196085">"වලාකුළු සහිත"</string>
- <string name="pref_camera_whitebalance_label_auto" msgid="1152472201811061031">"ස්වයංක්රීය"</string>
- <string name="pref_camera_whitebalance_label_incandescent" msgid="8920127934705255947">"තාපදීප්ත"</string>
- <string name="pref_camera_whitebalance_label_daylight" msgid="3554450557101127960">"දිවා ආලෝකය"</string>
- <string name="pref_camera_whitebalance_label_fluorescent" msgid="3654887484979718684">"ප්රතිදීපන"</string>
- <string name="pref_camera_whitebalance_label_cloudy" msgid="7288490282713935868">"වලාකුළු සහිත"</string>
- <string name="pref_camera_scenemode_title" msgid="5200975368614697452">"සිදුවීම් ආකාරය"</string>
- <string name="pref_camera_scenemode_entry_auto" msgid="7511260833909115424">"ස්වයං"</string>
- <string name="pref_camera_scenemode_entry_hdr" msgid="1240176231782477736">"HDR"</string>
- <string name="pref_camera_scenemode_entry_action" msgid="1837585145734214002">"ක්රියාව"</string>
- <string name="pref_camera_scenemode_entry_night" msgid="7769610601562643051">"රාත්රී"</string>
- <string name="pref_camera_scenemode_entry_sunset" msgid="8181732673387418710">"ඉර බැසීම"</string>
- <string name="pref_camera_scenemode_entry_party" msgid="2053177794948141241">"සාදය"</string>
- <string name="pref_camera_scenemode_label_auto" msgid="3930776963493458919">"කිසිවක් නැත"</string>
- <string name="pref_camera_scenemode_label_action" msgid="7770498283906927328">"ක්රියාව"</string>
- <string name="pref_camera_scenemode_label_night" msgid="502442339727709162">"රාත්රිය"</string>
- <string name="pref_camera_scenemode_label_sunset" msgid="7721050709109503669">"හිරු බැසීම"</string>
- <string name="pref_camera_scenemode_label_party" msgid="8942534460201242073">"සාදය"</string>
- <string name="pref_camera_countdown_label_off" msgid="1200317172301019900">"කාල ගණකය අක්රියයි"</string>
- <string name="pref_camera_countdown_label_one" msgid="7105722039618597195">"තත්පර 1"</string>
- <string name="pref_camera_countdown_label_three" msgid="113172366823379525">"තත්පර.3"</string>
- <string name="pref_camera_countdown_label_ten" msgid="8259680166571641702">"තත්පර 10"</string>
- <string name="pref_camera_countdown_label_fifteen" msgid="2251170484933984740">"තත්පර 15"</string>
- <string name="not_selectable_in_scene_mode" msgid="4186538577214404106">"දර්ශන ආකාරය තුළ තෝරාගත හැකි නොවේ"</string>
- <string name="pref_exposure_title" msgid="5211801488740367403">"නිරාවරණය"</string>
- <string name="pref_exposure_label" msgid="5586132867242336300">"නිරාවරණය"</string>
- <!-- no translation found for pref_camera_hdr_default (2725798708765488564) -->
- <skip />
- <string name="pref_camera_hdr_label" msgid="3566769675820087426">"HDR"</string>
- <string name="pref_camera_id_label_back" msgid="6322318969185513097">"ඉදිරිපස කැමරාව"</string>
- <string name="pref_camera_id_label_front" msgid="3244743091065982114">"පිටුපස කැමරාව"</string>
- <string name="dialog_ok" msgid="8097436389338241320">"හරි"</string>
- <string name="spaceIsLow_content" product="default" msgid="9172166257752848178">"ඔබගේ SD කාඩ් පතේ ඉඩ අවසන් වෙමින් පවතී. ගුණත්ව සැකසීම් වෙනස් කරන්න හෝ සමහර පින්තුරය හෝ වෙනත් ගොනු මකන්න."</string>
- <string name="video_reach_size_limit" msgid="3243731908069056095">"ප්රමාණයේ සීමාව ලඟාවී ඇත."</string>
- <string name="pano_too_fast_prompt" msgid="992490587329437459">"ඉතා වේගවත්"</string>
- <string name="pano_dialog_prepare_preview" msgid="7116632064591648365">"පරිදර්ශනය පිළියෙල වේ"</string>
- <string name="pano_dialog_panorama_failed" msgid="1856809633978860743">"පරිදර්ශනය සුරැකිය නොහැක."</string>
- <string name="pano_dialog_title" msgid="7236715443943941505">"පරිදර්ශනය"</string>
- <string name="pano_capture_indication" msgid="6826745806103872825">"පරිදර්ශනය ග්රහණය කෙරේ"</string>
- <string name="pano_dialog_waiting_previous" msgid="1379192572905837403">"පෙර පරිදර්ශනය සඳහා රැඳී සිටී"</string>
- <string name="pano_review_saving_indication_str" msgid="7006233508921435129">"සුරැකේ...."</string>
- <string name="pano_review_rendering" msgid="7712584259126188763">"පරිදර්ශනය ප්රවාචනය"</string>
- <string name="tap_to_focus" msgid="3031819623593720463">"නාභිගත කිරීමට ස්පර්ශ කරන්න"</string>
- <string name="pref_video_effect_title" msgid="2371174223707366255">"විලාස"</string>
- <string name="effect_none" msgid="1026487463817289779">"කිසිවක් නැත"</string>
- <string name="effect_goofy_face_squeeze" msgid="1286464707958852799">"මිරිකන්න"</string>
- <string name="effect_goofy_face_big_eyes" msgid="6904511475216683450">"ලොකු ඇස්"</string>
- <string name="effect_goofy_face_big_mouth" msgid="4037032365093279045">"ලොකු කට"</string>
- <string name="effect_goofy_face_small_mouth" msgid="5950057962899410295">"කුඩා කට"</string>
- <string name="effect_goofy_face_big_nose" msgid="6225216990258277302">"ලොකු නහය"</string>
- <string name="effect_goofy_face_small_eyes" msgid="547835991052738090">"කුඩා ඇස්"</string>
- <string name="effect_backdropper_space" msgid="5794499374151237559">"අවකාශයෙහි"</string>
- <string name="effect_backdropper_sunset" msgid="2431035827232871903">"ඉර බැසීම"</string>
- <string name="effect_backdropper_gallery" msgid="3292606781700530872">"ඔබගේ වීඩියෝව"</string>
- <string name="video_snapshot_hint" msgid="56511446769261564">"පටිගත කිරීම අතරතුර ඡායාරූපයක් ගැනීමට ස්පර්ශ කරන්න."</string>
- <string name="video_recording_started" msgid="1478448043553326540">"වීඩියෝව පටිගත කිරීම ඇරඹී ඇත."</string>
- <string name="video_recording_stopped" msgid="2676770458529207322">"වීඩියෝව පටිගත කිරීම නැවතී ඇත."</string>
- <string name="clear_effects" msgid="155262355011195942">"විලාස හිස් කරන්න"</string>
- <string name="effect_silly_faces" msgid="2764749499874707741">"මෝඩ මුහුණු"</string>
- <string name="effect_background" msgid="2260438748276866983">"පසුබිම"</string>
- <string name="accessibility_shutter_button" msgid="442677115885353279">"ශටරය"</string>
- <string name="accessibility_menu_button" msgid="7265396535447770250">"මෙනු බොත්තම"</string>
- <string name="accessibility_mode_picker" msgid="5708483984757534790">"කැමරාව, වීඩියෝව, හෝ පරිදර්ශනය තෝරන්න"</string>
- <string name="accessibility_check_box" msgid="6190311654361323510">"සලකුණු කොටු %1$s"</string>
- <string name="accessibility_switch_to_camera" msgid="8253443632354129201">"ඡායාරූපය වෙත මාරු වන්න"</string>
- <string name="accessibility_switch_to_video" msgid="685379350229791000">"වීඩියෝව වෙත මාරු වන්න"</string>
- <string name="accessibility_switch_to_panorama" msgid="4367290605860986266">"පරිදර්ශනය වෙත මාරු වන්න"</string>
- <string name="accessibility_switch_to_photo_sphere" msgid="7282333436078515422">"ඡායාරූප ගෝල වෙත මාරු වෙන්න"</string>
- <string name="accessibility_review_cancel" msgid="8233210011810145540">"අවලංගු කිරීම සමාලෝචනය කරන්න"</string>
- <string name="accessibility_review_ok" msgid="1919818908740908312">"සමාලෝචනය අවසන්"</string>
- <string name="accessibility_review_retake" msgid="3256541538259494381">"යළිගැනීම සමාලෝචනය කරන්න"</string>
- <string name="capital_on" msgid="5840588038158274585">"සක්රීයයි"</string>
- <string name="capital_off" msgid="3199056669644846925">"අක්රියයි"</string>
- <string name="pref_video_time_lapse_frame_interval_off" msgid="8999446316706593179">"අක්රියයි"</string>
- <string name="pref_video_time_lapse_frame_interval_500" msgid="8756750735297085410">"තත්පර 0.5"</string>
- <string name="pref_video_time_lapse_frame_interval_1000" msgid="7640704589637632218">"තත්පර 1"</string>
- <string name="pref_video_time_lapse_frame_interval_1500" msgid="8931945040035127831">"තත්පර 1.5"</string>
- <string name="pref_video_time_lapse_frame_interval_2000" msgid="3939716251293255146">"තත්පර 2"</string>
- <string name="pref_video_time_lapse_frame_interval_2500" msgid="7683749285828898630">"තත්පර 2.5"</string>
- <string name="pref_video_time_lapse_frame_interval_3000" msgid="780624543534219753">"තත්පර 3"</string>
- <string name="pref_video_time_lapse_frame_interval_4000" msgid="8889653143865462502">"තත්පර 4"</string>
- <string name="pref_video_time_lapse_frame_interval_5000" msgid="4102268340899789227">"තත්පර 5"</string>
- <string name="pref_video_time_lapse_frame_interval_6000" msgid="8603974284920017861">"තත්පර 6"</string>
- <string name="pref_video_time_lapse_frame_interval_10000" msgid="6650102184647775722">"තත්පර 10"</string>
- <string name="pref_video_time_lapse_frame_interval_12000" msgid="6753526423674050181">"තත්පර 12"</string>
- <string name="pref_video_time_lapse_frame_interval_15000" msgid="531646722496644257">"තත්පර 15"</string>
- <string name="pref_video_time_lapse_frame_interval_24000" msgid="290145063080413411">"තත්පර 24"</string>
- <string name="pref_video_time_lapse_frame_interval_30000" msgid="9079297914740012179">"මිනිත්තු 0.5"</string>
- <string name="pref_video_time_lapse_frame_interval_60000" msgid="3020106068480066496">"මිනිත්තු 1"</string>
- <string name="pref_video_time_lapse_frame_interval_90000" msgid="2685855786622077615">"මිනිත්තු1.5"</string>
- <string name="pref_video_time_lapse_frame_interval_120000" msgid="7314050129714846577">"මිනිත්තු 2"</string>
- <string name="pref_video_time_lapse_frame_interval_150000" msgid="4554449247426773111">"මිනිත්තු 2.5"</string>
- <string name="pref_video_time_lapse_frame_interval_180000" msgid="4567679385417134299">"මිනිත්තු 3"</string>
- <string name="pref_video_time_lapse_frame_interval_240000" msgid="980170959249981779">"මිනිත්තු 4"</string>
- <string name="pref_video_time_lapse_frame_interval_300000" msgid="4134060119540433901">"මිනිත්තු 5"</string>
- <string name="pref_video_time_lapse_frame_interval_360000" msgid="2279953220469717307">"මිනිත්තු 6"</string>
- <string name="pref_video_time_lapse_frame_interval_600000" msgid="262948882057819428">"මිනිත්තු 10"</string>
- <string name="pref_video_time_lapse_frame_interval_720000" msgid="5025274021438060973">"මිනිත්තු 12"</string>
- <string name="pref_video_time_lapse_frame_interval_900000" msgid="535122783273231729">"මිනිත්තු 15"</string>
- <string name="pref_video_time_lapse_frame_interval_1440000" msgid="1389025940394108838">"මිනිත්තු 24"</string>
- <string name="pref_video_time_lapse_frame_interval_1800000" msgid="3960495676390536948">"පැය 0.5"</string>
- <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4967310075272642117">"පැය 1"</string>
- <string name="pref_video_time_lapse_frame_interval_5400000" msgid="4381496945219954612">"පැය 1.5"</string>
- <string name="pref_video_time_lapse_frame_interval_7200000" msgid="6542316368455276228">"පැය 2"</string>
- <string name="pref_video_time_lapse_frame_interval_9000000" msgid="7058722410153205915">"පැය 2.5"</string>
- <string name="pref_video_time_lapse_frame_interval_10800000" msgid="6261070817876538949">"පැය 3"</string>
- <string name="pref_video_time_lapse_frame_interval_14400000" msgid="6980220047958957353">"පැය 4"</string>
- <string name="pref_video_time_lapse_frame_interval_18000000" msgid="7199366553142266407">"පැය 5"</string>
- <string name="pref_video_time_lapse_frame_interval_21600000" msgid="5736484130500539985">"පැය 6"</string>
- <string name="pref_video_time_lapse_frame_interval_36000000" msgid="720554925530517471">"පැය 10"</string>
- <string name="pref_video_time_lapse_frame_interval_43200000" msgid="322398198717672456">"පැය 12"</string>
- <string name="pref_video_time_lapse_frame_interval_54000000" msgid="4545285575174744076">"පැය 15"</string>
- <string name="pref_video_time_lapse_frame_interval_86400000" msgid="225288451792149886">"පැය 24"</string>
- <string name="time_lapse_seconds" msgid="6338396613003859047">"තත්පර"</string>
- <string name="time_lapse_minutes" msgid="1610738675813013569">"මිනිත්තු"</string>
- <string name="time_lapse_hours" msgid="2466092767364327518">"පැය"</string>
- <string name="time_lapse_interval_set" msgid="5430624261132317167">"අවසාන වූ"</string>
- <string name="set_time_interval" msgid="844482952911185265">"කාල අන්තරය පිහිටුවන්න"</string>
- <string name="set_time_interval_help" msgid="1403571747238933001">"කාලය ඉකුත්වීමේ විශේෂාංගය අක්රියයි. කාල අන්තරය පිහිටුවීමට එය සක්රිය කරන්න."</string>
- <string name="set_duration" msgid="7425045408900251919">"තත්පර වලින් කාල පරාස සකසන්න"</string>
- <string name="count_down_title_text" msgid="8269417928362735617">"ඡායාරූපයක් ගැනීමට ආපස්සට ගණන් කෙරේ"</string>
- <string name="remember_location_title" msgid="2290717227833540397">"ඡායාරූප ස්ථාන මතකද?"</string>
- <string name="remember_location_prompt" msgid="6856517328973384896">"ඔබගේ ඡායාරූප සහ වීඩියෝ ඒවා ගත් ස්ථානය සමගින් ටැග් කරන්න.\n\nවෙනත් යෙදුම් වලට ඔබගේ සුරැකි පින්තුර සමගින් මෙම තොරතුරු වෙත ප්රවේශ විය හැක."</string>
- <string name="remember_location_no" msgid="5160772992721036553">"එපා ස්තූතියි"</string>
- <string name="remember_location_yes" msgid="4663333638854720964">"ඔව්"</string>
- <string name="camera_menu_more_label" msgid="3997839063378329544">"තව විකල්ප"</string>
- <string name="camera_menu_settings_label" msgid="2038476709578884568">"සැකසීම්"</string>
-</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 9e58a1b..e44a052 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -157,10 +157,10 @@
<string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"自動"</string>
<string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+ (高動態範圍)"</string>
<string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"高動態範圍"</string>
- <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="4762986338359862238">"開啟 HDR+ (高動態範圍)"</string>
- <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="8027383906480914303">"關閉 HDR+ (高動態範圍)"</string>
- <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="8567522693524539332">"開啟 HDR (高動態範圍)"</string>
- <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="1121637502250585531">"關閉 HDR (高動態範圍)"</string>
+ <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="4762986338359862238">"開啟 HDR+"</string>
+ <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="8027383906480914303">"關閉 HDR+"</string>
+ <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="8567522693524539332">"開啟 HDR"</string>
+ <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="1121637502250585531">"關閉 HDR"</string>
<string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"動作"</string>
<string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"夜景"</string>
<string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"日落"</string>
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 09d5dc6..45e8e07 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -66,6 +66,7 @@
import com.android.camera.util.ApiHelper;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.GcamHelper;
+import com.android.camera.util.SmartCameraHelper;
import com.android.camera.util.UsageStatistics;
import com.android.camera2.R;
@@ -386,6 +387,7 @@
private void onPreviewStarted() {
setCameraState(IDLE);
startFaceDetection();
+ startBarcodeDetection();
locationFirstRun();
}
@@ -597,6 +599,10 @@
});
}
+ private void startBarcodeDetection() {
+ SmartCameraHelper.register(mCameraDevice, mParameters.getPreviewSize(), mActivity);
+ }
+
@Override
public void startFaceDetection() {
if (mFaceDetectionStarted) return;
diff --git a/src_pd/com/android/camera/util/SmartCameraHelper.java b/src_pd/com/android/camera/util/SmartCameraHelper.java
new file mode 100644
index 0000000..2b48388
--- /dev/null
+++ b/src_pd/com/android/camera/util/SmartCameraHelper.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.camera.util;
+
+
+import android.app.Activity;
+import android.hardware.Camera;
+
+import com.android.camera.CameraManager.CameraPreviewDataCallback;
+import com.android.camera.CameraManager.CameraProxy;
+
+public class SmartCameraHelper {
+ public static void register(CameraProxy camera, Camera.Size previewSize, Activity activity) {}
+}
diff --git a/tests/src/com/android/camera/StressTests.java b/tests/src/com/android/camera/StressTests.java
index 2cc4eeb..1734ef0 100755
--- a/tests/src/com/android/camera/StressTests.java
+++ b/tests/src/com/android/camera/StressTests.java
@@ -40,7 +40,7 @@
result.addTestSuite(CameraLatency.class);
result.addTestSuite(CameraStartUp.class);
result.addTestSuite(ImageCapture.class);
- result.addTestSuite(SwitchPreview.class);
+// result.addTestSuite(SwitchPreview.class);
return result;
}
}
diff --git a/tests/src/com/android/camera/stress/CameraLatency.java b/tests/src/com/android/camera/stress/CameraLatency.java
index 22347dd..527b586 100755
--- a/tests/src/com/android/camera/stress/CameraLatency.java
+++ b/tests/src/com/android/camera/stress/CameraLatency.java
@@ -36,7 +36,7 @@
public class CameraLatency extends ActivityInstrumentationTestCase2 <CameraActivity> {
private String TAG = "CameraLatency";
private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 20;
- private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 6 * 1000; //6 seconds.
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 4000;
private static final String CAMERA_TEST_OUTPUT_FILE =
Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
@@ -57,7 +57,6 @@
@Override
protected void setUp() throws Exception {
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
getActivity();
super.setUp();
}
@@ -70,6 +69,7 @@
public void testImageCapture() {
Log.v(TAG, "start testImageCapture test");
Instrumentation inst = getInstrumentation();
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
try {
for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {
Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
diff --git a/tests/src/com/android/camera/stress/CameraStartUp.java b/tests/src/com/android/camera/stress/CameraStartUp.java
index c39f435..4a9b773 100644
--- a/tests/src/com/android/camera/stress/CameraStartUp.java
+++ b/tests/src/com/android/camera/stress/CameraStartUp.java
@@ -40,7 +40,7 @@
private String TAG = "CameraStartUp";
private static final String CAMERA_TEST_OUTPUT_FILE =
Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
- private static int WAIT_TIME_FOR_PREVIEW = 4 * 1000; //4 seconds.
+ private static int WAIT_TIME_FOR_PREVIEW = 1500; //1.5 second
private long launchCamera() {
long startupTime = 0;
@@ -55,7 +55,7 @@
Thread.sleep(WAIT_TIME_FOR_PREVIEW);
cameraActivity.finish();
startupTime = cameraStarted - beforeStart;
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
+ Thread.sleep(1000);
Log.v(TAG, "camera startup time: " + startupTime);
} catch (Exception e) {
Log.v(TAG, "Got exception", e);
@@ -75,12 +75,11 @@
Instrumentation inst = getInstrumentation();
Activity recorderActivity = inst.startActivitySync(intent);
long cameraStarted = System.currentTimeMillis();
- Thread.sleep(WAIT_TIME_FOR_PREVIEW);
recorderActivity.finish();
startupTime = cameraStarted - beforeStart;
Log.v(TAG, "Video Startup Time = " + startupTime);
// wait for 1s to make sure it reach a clean stage
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
+ Thread.sleep(WAIT_TIME_FOR_PREVIEW);
Log.v(TAG, "video startup time: " + startupTime);
} catch (Exception e) {
Log.v(TAG, "Got exception", e);
diff --git a/tests/src/com/android/camera/stress/ImageCapture.java b/tests/src/com/android/camera/stress/ImageCapture.java
index f5f4302..fd7e2af 100755
--- a/tests/src/com/android/camera/stress/ImageCapture.java
+++ b/tests/src/com/android/camera/stress/ImageCapture.java
@@ -40,8 +40,8 @@
public class ImageCapture extends ActivityInstrumentationTestCase2 <CameraActivity> {
private String TAG = "ImageCapture";
- private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 4 * 1000; //4 seconds
- private static final long WAIT_FOR_SWITCH_CAMERA = 4 * 1000; //4 seconds
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1500; //1.5 sedconds
+ private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //3 seconds
private TestUtil testUtil = new TestUtil();
@@ -101,9 +101,6 @@
Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
captureImages("Back Camera Image Capture\n", inst);
act.finish();
- // Wait for a clean finish.
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
-
}
public void testFrontImageCapture() throws Exception {
@@ -118,7 +115,5 @@
Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
captureImages("Front Camera Image Capture\n", inst);
act.finish();
- // Wait for a clean finish.
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
}
}
diff --git a/tests/src/com/android/camera/stress/VideoCapture.java b/tests/src/com/android/camera/stress/VideoCapture.java
index c740982..3688d89 100755
--- a/tests/src/com/android/camera/stress/VideoCapture.java
+++ b/tests/src/com/android/camera/stress/VideoCapture.java
@@ -41,8 +41,8 @@
*/
public class VideoCapture extends ActivityInstrumentationTestCase2 <CameraActivity> {
- private static final long WAIT_FOR_PREVIEW = 4 * 1000; //4 seconds
- private static final long WAIT_FOR_SWITCH_CAMERA = 4 * 1000; //4 seconds
+ private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds
+ private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //2 seconds
// Private intent extras which control the camera facing.
private final static String EXTRAS_CAMERA_FACING =
@@ -94,9 +94,6 @@
Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
captureVideos("Back Camera Video Capture\n", inst);
act.finish();
- // Wait for a clean finish.
- Thread.sleep(2 * 1000); //sleep for 2 seconds
-
}
public void testFrontVideoCapture() throws Exception {
@@ -111,8 +108,5 @@
Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
captureVideos("Front Camera Video Capture\n", inst);
act.finish();
- // Wait for a clean finish.
- Thread.sleep(2 * 1000); //sleep for 2 seconds.
-
}
}
diff --git a/tests_camera/AndroidManifest.xml b/tests_camera/AndroidManifest.xml
new file mode 100644
index 0000000..164bbd5
--- /dev/null
+++ b/tests_camera/AndroidManifest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.camera.tests">
+
+ <uses-permission android:name="android.permission.INJECT_EVENTS" />
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation android:name="com.android.camera.CameraLaunchPerformance"
+ android:targetPackage="com.android.camera"
+ android:label="Camera Launch Performance">
+ </instrumentation>
+
+ <instrumentation android:name="com.android.camera.stress.CameraStressTestRunner"
+ android:targetPackage="com.android.camera"
+ android:label="Camera stress test runner">
+ </instrumentation>
+
+ <instrumentation android:name="com.android.camera.CameraTestRunner"
+ android:targetPackage="com.android.camera"
+ android:label="Camera continuous test runner">
+ </instrumentation>
+
+ <instrumentation android:name="android.test.InstrumentationTestRunner"
+ android:targetPackage="com.android.camera"
+ android:label="Tests for Camera application."/>
+</manifest>
diff --git a/tests_camera/src/com/android/camera/CameraLaunchPerformance.java b/tests_camera/src/com/android/camera/CameraLaunchPerformance.java
new file mode 100644
index 0000000..fe2b776
--- /dev/null
+++ b/tests_camera/src/com/android/camera/CameraLaunchPerformance.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 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.
+ */
+
+package com.android.camera;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.test.LaunchPerformanceBase;
+
+/**
+ * Instrumentation class for Camera launch performance testing.
+ */
+public class CameraLaunchPerformance extends LaunchPerformanceBase {
+ @SuppressWarnings("unused")
+ private static final String TAG = "CameraLaunchPerformance";
+
+ @Override
+ public void onCreate(Bundle arguments) {
+ super.onCreate(arguments);
+ mIntent.setClassName(getTargetContext(),
+ "com.android.camera.CameraActivity");
+ start();
+ }
+
+ /**
+ * Calls LaunchApp and finish.
+ */
+ @Override
+ public void onStart() {
+ super.onStart();
+ LaunchApp();
+ finish(Activity.RESULT_OK, mResults);
+ }
+}
diff --git a/tests_camera/src/com/android/camera/CameraTestRunner.java b/tests_camera/src/com/android/camera/CameraTestRunner.java
new file mode 100755
index 0000000..96c48a4
--- /dev/null
+++ b/tests_camera/src/com/android/camera/CameraTestRunner.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.camera;
+
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+
+import com.android.camera.activity.CameraActivityTest;
+import com.android.camera.functional.CameraTest;
+import com.android.camera.functional.ImageCaptureIntentTest;
+import com.android.camera.functional.VideoCaptureIntentTest;
+import com.android.camera.unittest.CameraUnitTest;
+
+import junit.framework.TestSuite;
+
+
+public class CameraTestRunner extends InstrumentationTestRunner {
+
+ @Override
+ public TestSuite getAllTests() {
+ TestSuite suite = new InstrumentationTestSuite(this);
+ suite.addTestSuite(CameraActivityTest.class);
+ suite.addTestSuite(CameraTest.class);
+ suite.addTestSuite(ImageCaptureIntentTest.class);
+ suite.addTestSuite(VideoCaptureIntentTest.class);
+ suite.addTestSuite(CameraUnitTest.class);
+ return suite;
+ }
+
+ @Override
+ public ClassLoader getLoader() {
+ return CameraTestRunner.class.getClassLoader();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/StressTests.java b/tests_camera/src/com/android/camera/StressTests.java
new file mode 100755
index 0000000..7ed8317
--- /dev/null
+++ b/tests_camera/src/com/android/camera/StressTests.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package com.android.camera;
+
+import com.android.camera.stress.ImageCapture;
+import com.android.camera.stress.SwitchPreview;
+import com.android.camera.stress.CameraLatency;
+import com.android.camera.stress.CameraStartUp;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+
+/**
+ * Instrumentation Test Runner for all Camera tests.
+ *
+ * Running all tests:
+ *
+ * adb shell am instrument \
+ * -e class com.android.camera.StressTests \
+ * -w com.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
+ */
+
+public class StressTests extends TestSuite {
+ public static Test suite() {
+ TestSuite result = new TestSuite();
+ result.addTestSuite(SwitchPreview.class);
+ result.addTestSuite(ImageCapture.class);
+ result.addTestSuite(CameraLatency.class);
+ result.addTestSuite(CameraStartUp.class);
+ return result;
+ }
+}
diff --git a/tests_camera/src/com/android/camera/UnitTests.java b/tests_camera/src/com/android/camera/UnitTests.java
new file mode 100644
index 0000000..e56a907
--- /dev/null
+++ b/tests_camera/src/com/android/camera/UnitTests.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+package com.android.camera;
+
+import android.test.suitebuilder.UnitTestSuiteBuilder;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * TestSuite for all Camera unit tests.
+ */
+public class UnitTests extends TestSuite {
+
+ public static Test suite() {
+ return new UnitTestSuiteBuilder(UnitTests.class)
+ .includePackages("com.android.camera.unittest")
+ .named("Camera Unit Tests")
+ .build();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/activity/CameraActivityTest.java b/tests_camera/src/com/android/camera/activity/CameraActivityTest.java
new file mode 100644
index 0000000..eb027e9
--- /dev/null
+++ b/tests_camera/src/com/android/camera/activity/CameraActivityTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.camera.activity;
+
+import android.hardware.Camera.Parameters;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.camera.CameraActivity;
+import com.android.camera.CameraHolder;
+import com.android.gallery3d.R;
+
+import static com.google.testing.littlemock.LittleMock.doReturn;
+
+public class CameraActivityTest extends CameraTestCase <CameraActivity> {
+ public CameraActivityTest() {
+ super(CameraActivity.class);
+ }
+
+ @LargeTest
+ public void testFailToConnect() throws Exception {
+ super.internalTestFailToConnect();
+ }
+
+ @LargeTest
+ public void testTakePicture() throws Exception {
+ CameraHolder.injectMockCamera(mCameraInfo, mOneMockCamera);
+
+ getActivity();
+ getInstrumentation().waitForIdleSync();
+
+ // Press shutter button to take a picture.
+ performClick(R.id.shutter_button);
+ getInstrumentation().waitForIdleSync();
+
+ // Force the activity to finish.
+ getActivity().finish();
+ getInstrumentation().waitForIdleSync();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/activity/CameraTestCase.java b/tests_camera/src/com/android/camera/activity/CameraTestCase.java
new file mode 100644
index 0000000..4aae6b4
--- /dev/null
+++ b/tests_camera/src/com/android/camera/activity/CameraTestCase.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.camera.activity;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.hardware.Camera;
+import android.hardware.Camera.AutoFocusCallback;
+import android.hardware.Camera.CameraInfo;
+import android.hardware.Camera.Parameters;
+import android.hardware.Camera.PictureCallback;
+import android.hardware.Camera.ShutterCallback;
+import android.test.ActivityInstrumentationTestCase2;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
+
+import com.android.camera.CameraHolder;
+import com.android.camera.CameraManager.CameraProxy;
+import com.android.camera.util.CameraUtil;
+import com.android.gallery3d.R;
+
+import static com.google.testing.littlemock.LittleMock.mock;
+import static com.google.testing.littlemock.LittleMock.doAnswer;
+import static com.google.testing.littlemock.LittleMock.doReturn;
+import static com.google.testing.littlemock.LittleMock.anyObject;
+import com.google.testing.littlemock.AppDataDirGuesser;
+import com.google.testing.littlemock.ArgumentCaptor;
+import com.google.testing.littlemock.Captor;
+import com.google.testing.littlemock.LittleMock;
+import com.google.testing.littlemock.Mock;
+
+import java.io.File;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.concurrent.Callable;
+
+
+public class CameraTestCase<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
+ protected CameraInfo mCameraInfo[];
+ protected CameraProxy mMockCamera[];
+ protected CameraInfo mOneCameraInfo[];
+ protected CameraProxy mOneMockCamera[];
+ private static Parameters mParameters;
+ private byte[] mBlankJpeg;
+ @Mock private CameraProxy mMockBackCamera;
+ @Mock private CameraProxy mMockFrontCamera;
+ @Captor private ArgumentCaptor<ShutterCallback> mShutterCallback;
+ @Captor private ArgumentCaptor<PictureCallback> mRawPictureCallback;
+ @Captor private ArgumentCaptor<PictureCallback> mJpegPictureCallback;
+ @Captor private ArgumentCaptor<AutoFocusCallback> mAutoFocusCallback;
+ Callable<Object> mAutoFocusCallable = new AutoFocusCallable();
+ Callable<Object> mTakePictureCallable = new TakePictureCallable();
+
+ private class TakePictureCallable implements Callable<Object> {
+ @Override
+ public Object call() throws Exception {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ readBlankJpeg();
+ Camera camera = mOneMockCamera[0].getCamera();
+ mShutterCallback.getValue().onShutter();
+ mRawPictureCallback.getValue().onPictureTaken(null, camera);
+ mJpegPictureCallback.getValue().onPictureTaken(mBlankJpeg, camera);
+ }
+ };
+ // Probably need some delay. Make sure shutter callback is called
+ // after onShutterButtonFocus(false).
+ getActivity().findViewById(R.id.gl_root_view).postDelayed(runnable, 50);
+ return null;
+ }
+ }
+
+ private class AutoFocusCallable implements Callable<Object> {
+ @Override
+ public Object call() throws Exception {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ Camera camera = mOneMockCamera[0].getCamera();
+ mAutoFocusCallback.getValue().onAutoFocus(true, camera);
+ }
+ };
+ // Need some delay. Otherwise, focus callback will be run before
+ // onShutterButtonClick
+ getActivity().findViewById(R.id.gl_root_view).postDelayed(runnable, 50);
+ return null;
+ }
+ }
+
+ public CameraTestCase(Class<T> activityClass) {
+ super(activityClass);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ AppDataDirGuesser.setInstance(new AppDataDirGuesser() {
+ @Override
+ public File guessSuitableDirectoryForGeneratedClasses() {
+ return getInstrumentation().getTargetContext().getCacheDir();
+ }
+ });
+ AppDataDirGuesser.getsInstance().guessSuitableDirectoryForGeneratedClasses();
+ LittleMock.initMocks(this);
+ mCameraInfo = new CameraInfo[2];
+ mCameraInfo[0] = new CameraInfo();
+ mCameraInfo[0].facing = CameraInfo.CAMERA_FACING_BACK;
+ mCameraInfo[1] = new CameraInfo();
+ mCameraInfo[1].facing = CameraInfo.CAMERA_FACING_FRONT;
+ mMockCamera = new CameraProxy[2];
+ mMockCamera[0] = mMockBackCamera;
+ mMockCamera[1] = mMockFrontCamera;
+ doReturn(getParameters()).when(mMockCamera[0]).getParameters();
+ doReturn(getParameters()).when(mMockCamera[1]).getParameters();
+
+ mOneCameraInfo = new CameraInfo[1];
+ mOneCameraInfo[0] = new CameraInfo();
+ mOneCameraInfo[0].facing = CameraInfo.CAMERA_FACING_BACK;
+ mOneMockCamera = new CameraProxy[1];
+ mOneMockCamera[0] = mMockBackCamera;
+ doReturn(getParameters()).when(mOneMockCamera[0]).getParameters();
+
+ // Mock takePicture call.
+ doAnswer(mTakePictureCallable).when(mMockBackCamera).takePicture(
+ mShutterCallback.capture(), mRawPictureCallback.capture(),
+ (PictureCallback) anyObject(), mJpegPictureCallback.capture());
+
+ // Mock autoFocus call.
+ doAnswer(mAutoFocusCallable).when(mMockBackCamera).autoFocus(
+ mAutoFocusCallback.capture());
+ }
+
+ private void readBlankJpeg() {
+ InputStream ins = getActivity().getResources().openRawResource(R.raw.blank);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ int size = 0;
+
+ // Read the entire resource into a local byte buffer.
+ byte[] buffer = new byte[1024];
+ try {
+ while((size = ins.read(buffer, 0, 1024)) >= 0){
+ outputStream.write(buffer, 0, size);
+ }
+ } catch (IOException e) {
+ // ignore
+ } finally {
+ CameraUtil.closeSilently(ins);
+ }
+ mBlankJpeg = outputStream.toByteArray();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ CameraHolder.injectMockCamera(null, null);
+ }
+
+ protected void internalTestFailToConnect() throws Exception {
+ CameraHolder.injectMockCamera(mCameraInfo, null);
+
+ getActivity();
+ Instrumentation inst = getInstrumentation();
+ inst.waitForIdleSync();
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); // close dialog
+ }
+
+ protected void performClick(final int id) {
+ Activity activity = getActivity();
+ getInstrumentation().waitForIdleSync();
+ assertNotNull(activity.findViewById(id));
+ Instrumentation inst = getInstrumentation();
+ inst.runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ View v = getActivity().findViewById(id);
+ float x = (v.getLeft() + v.getRight()) / 2;
+ float y = (v.getTop() + v.getBottom()) / 2;
+ MotionEvent down = MotionEvent.obtain(0, 0,
+ MotionEvent.ACTION_DOWN, x, y, 0, 0, 0, 0, 0, 0, 0);
+ MotionEvent up = MotionEvent.obtain(0, 0,
+ MotionEvent.ACTION_UP, x, y, 0, 0, 0, 0, 0, 0, 0);
+ View parent = (View) v.getParent();
+ parent.dispatchTouchEvent(down);
+ parent.dispatchTouchEvent(up);
+ }
+ });
+ inst.waitForIdleSync();
+ }
+
+ protected void assertViewNotExist(int id) {
+ Activity activity = getActivity();
+ getInstrumentation().waitForIdleSync();
+ assertNull(activity.findViewById(id));
+ }
+
+ protected void assertViewNotVisible(int id) {
+ Activity activity = getActivity();
+ getInstrumentation().waitForIdleSync();
+ View view = activity.findViewById(id);
+ assertTrue(view.getVisibility() != View.VISIBLE);
+ }
+
+ protected static Parameters getParameters() {
+ synchronized (CameraTestCase.class) {
+ if (mParameters == null) {
+ mParameters = android.hardware.Camera.getEmptyParameters();
+ mParameters.unflatten("preview-format-values=yuv420sp,yuv420p,yuv422i-yuyv,yuv420p;" +
+ "preview-format=yuv420sp;" +
+ "preview-size-values=800x480;preview-size=800x480;" +
+ "picture-size-values=320x240;picture-size=320x240;" +
+ "jpeg-thumbnail-size-values=320x240,0x0;jpeg-thumbnail-width=320;jpeg-thumbnail-height=240;" +
+ "jpeg-thumbnail-quality=60;jpeg-quality=95;" +
+ "preview-frame-rate-values=30,15;preview-frame-rate=30;" +
+ "focus-mode-values=continuous-video,auto,macro,infinity,continuous-picture;focus-mode=auto;" +
+ "preview-fps-range-values=(15000,30000);preview-fps-range=15000,30000;" +
+ "scene-mode-values=auto,action,night;scene-mode=auto;" +
+ "flash-mode-values=off,on,auto,torch;flash-mode=off;" +
+ "whitebalance-values=auto,daylight,fluorescent,incandescent;whitebalance=auto;" +
+ "effect-values=none,mono,sepia;effect=none;" +
+ "zoom-supported=true;zoom-ratios=100,200,400;max-zoom=2;" +
+ "picture-format-values=jpeg;picture-format=jpeg;" +
+ "min-exposure-compensation=-30;max-exposure-compensation=30;" +
+ "exposure-compensation=0;exposure-compensation-step=0.1;" +
+ "horizontal-view-angle=40;vertical-view-angle=40;");
+ }
+ }
+ return mParameters;
+ }
+}
diff --git a/tests_camera/src/com/android/camera/functional/CameraTest.java b/tests_camera/src/com/android/camera/functional/CameraTest.java
new file mode 100644
index 0000000..3fdebc0
--- /dev/null
+++ b/tests_camera/src/com/android/camera/functional/CameraTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+package com.android.camera.functional;
+
+import com.android.camera.CameraActivity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Environment;
+import android.os.Process;
+import android.provider.MediaStore;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+public class CameraTest extends InstrumentationTestCase {
+ @LargeTest
+ public void testVideoCaptureIntentFdLeak() throws Exception {
+ Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse("file://"
+ + Environment.getExternalStorageDirectory().toString()
+ + "test_fd_leak.3gp"));
+ getInstrumentation().startActivitySync(intent).finish();
+ // Test if the fd is closed.
+ for (File f: new File("/proc/" + Process.myPid() + "/fd").listFiles()) {
+ assertEquals(-1, f.getCanonicalPath().indexOf("test_fd_leak.3gp"));
+ }
+ }
+
+ @LargeTest
+ public void testActivityLeak() throws Exception {
+ checkActivityLeak(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
+ checkActivityLeak(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+ }
+
+ private void checkActivityLeak(String action) throws Exception {
+ final int TEST_COUNT = 5;
+ Intent intent = new Intent(action);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setClass(getInstrumentation().getTargetContext(),
+ CameraActivity.class);
+ ArrayList<WeakReference<Activity>> refs =
+ new ArrayList<WeakReference<Activity>>();
+ for (int i = 0; i < TEST_COUNT; i++) {
+ Activity activity = getInstrumentation().startActivitySync(intent);
+ refs.add(new WeakReference<Activity>(activity));
+ activity.finish();
+ getInstrumentation().waitForIdleSync();
+ activity = null;
+ }
+ Runtime.getRuntime().gc();
+ Runtime.getRuntime().runFinalization();
+ Runtime.getRuntime().gc();
+ int refCount = 0;
+ for (WeakReference<Activity> c: refs) {
+ if (c.get() != null) refCount++;
+ }
+ // If applications are leaking activity, every reference is reachable.
+ assertTrue(refCount != TEST_COUNT);
+ }
+}
diff --git a/tests_camera/src/com/android/camera/functional/ImageCaptureIntentTest.java b/tests_camera/src/com/android/camera/functional/ImageCaptureIntentTest.java
new file mode 100644
index 0000000..54ac1b4
--- /dev/null
+++ b/tests_camera/src/com/android/camera/functional/ImageCaptureIntentTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.functional;
+
+import com.android.camera.CameraActivity;
+import com.android.gallery3d.R;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.view.KeyEvent;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+public class ImageCaptureIntentTest extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private Intent mIntent;
+
+ public ImageCaptureIntentTest() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ }
+
+ @LargeTest
+ public void testNoExtraOutput() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ takePicture();
+ pressDone();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_OK, getActivity().getResultCode());
+ Intent resultData = getActivity().getResultData();
+ Bitmap bitmap = (Bitmap) resultData.getParcelableExtra("data");
+ assertNotNull(bitmap);
+ assertTrue(bitmap.getWidth() > 0);
+ assertTrue(bitmap.getHeight() > 0);
+ }
+
+ @LargeTest
+ public void testExtraOutput() throws Exception {
+ File file = new File(Environment.getExternalStorageDirectory(),
+ "test.jpg");
+ BufferedInputStream stream = null;
+ byte[] jpegData;
+
+ try {
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
+ setActivityIntent(mIntent);
+ getActivity();
+
+ takePicture();
+ pressDone();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_OK, getActivity().getResultCode());
+
+ // Verify the jpeg file
+ int fileLength = (int) file.length();
+ assertTrue(fileLength > 0);
+ jpegData = new byte[fileLength];
+ stream = new BufferedInputStream(new FileInputStream(file));
+ stream.read(jpegData);
+ } finally {
+ if (stream != null) stream.close();
+ file.delete();
+ }
+
+ Bitmap b = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length);
+ assertTrue(b.getWidth() > 0);
+ assertTrue(b.getHeight() > 0);
+ }
+
+ @LargeTest
+ public void testCancel() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ pressCancel();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode());
+ }
+
+ @LargeTest
+ public void testSnapshotCancel() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ takePicture();
+ pressCancel();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode());
+ }
+
+ private void takePicture() throws Exception {
+ getInstrumentation().sendKeySync(
+ new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS));
+ getInstrumentation().sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
+ Thread.sleep(4000);
+ }
+
+ private void pressDone() {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().findViewById(R.id.btn_done).performClick();
+ }
+ });
+ }
+
+ private void pressCancel() {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().findViewById(R.id.btn_cancel).performClick();
+ }
+ });
+ }
+}
diff --git a/tests_camera/src/com/android/camera/functional/VideoCaptureIntentTest.java b/tests_camera/src/com/android/camera/functional/VideoCaptureIntentTest.java
new file mode 100644
index 0000000..43e91ca
--- /dev/null
+++ b/tests_camera/src/com/android/camera/functional/VideoCaptureIntentTest.java
@@ -0,0 +1,258 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.functional;
+
+import com.android.camera.CameraActivity;
+import com.android.gallery3d.R;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Intent;
+import android.database.Cursor;
+import android.media.MediaMetadataRetriever;
+import android.net.Uri;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.provider.MediaStore.Video.VideoColumns;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import java.io.File;
+
+public class VideoCaptureIntentTest extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private static final String TAG = "VideoCaptureIntentTest";
+ private Intent mIntent;
+ private Uri mVideoUri;
+ private File mFile, mFile2;
+
+ public VideoCaptureIntentTest() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ if (mVideoUri != null) {
+ ContentResolver resolver = getActivity().getContentResolver();
+ Uri query = mVideoUri.buildUpon().build();
+ String[] projection = new String[] {VideoColumns.DATA};
+
+ Cursor cursor = null;
+ try {
+ cursor = resolver.query(query, projection, null, null, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ new File(cursor.getString(0)).delete();
+ }
+ } finally {
+ if (cursor != null) cursor.close();
+ }
+
+ resolver.delete(mVideoUri, null, null);
+ }
+ if (mFile != null) mFile.delete();
+ if (mFile2 != null) mFile2.delete();
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void testNoExtraOutput() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo();
+ pressDone();
+
+ Intent resultData = getActivity().getResultData();
+ mVideoUri = resultData.getData();
+ assertNotNull(mVideoUri);
+ verify(getActivity(), mVideoUri);
+ }
+
+ @LargeTest
+ public void testExtraOutput() throws Exception {
+ mFile = new File(Environment.getExternalStorageDirectory(), "video.tmp");
+
+ Uri uri = Uri.fromFile(mFile);
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo();
+ pressDone();
+
+ verify(getActivity(), uri);
+ }
+
+ @LargeTest
+ public void testCancel() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ pressCancel();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode());
+ }
+
+ @LargeTest
+ public void testRecordCancel() throws Exception {
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo();
+ pressCancel();
+
+ assertTrue(getActivity().isFinishing());
+ assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode());
+ }
+
+ @LargeTest
+ public void testExtraSizeLimit() throws Exception {
+ mFile = new File(Environment.getExternalStorageDirectory(), "video.tmp");
+ final long sizeLimit = 500000; // bytes
+
+ Uri uri = Uri.fromFile(mFile);
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, sizeLimit);
+ mIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); // use low quality to speed up
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo(5000);
+ pressDone();
+
+ verify(getActivity(), uri);
+ long length = mFile.length();
+ Log.v(TAG, "Video size is " + length + " bytes.");
+ assertTrue(length > 0);
+ assertTrue("Actual size=" + length, length <= sizeLimit);
+ }
+
+ @LargeTest
+ public void testExtraDurationLimit() throws Exception {
+ mFile = new File(Environment.getExternalStorageDirectory(), "video.tmp");
+ final int durationLimit = 2; // seconds
+
+ Uri uri = Uri.fromFile(mFile);
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit);
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo(5000);
+ pressDone();
+
+ int duration = verify(getActivity(), uri);
+ // The duraion should be close to to the limit. The last video duration
+ // also has duration, so the total duration may exceeds the limit a
+ // little bit.
+ Log.v(TAG, "Video length is " + duration + " ms.");
+ assertTrue(duration < (durationLimit + 1) * 1000);
+ }
+
+ @LargeTest
+ public void testExtraVideoQuality() throws Exception {
+ mFile = new File(Environment.getExternalStorageDirectory(), "video.tmp");
+ mFile2 = new File(Environment.getExternalStorageDirectory(), "video2.tmp");
+
+ Uri uri = Uri.fromFile(mFile);
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); // low quality
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo();
+ pressDone();
+
+ verify(getActivity(), uri);
+ setActivity(null);
+
+ uri = Uri.fromFile(mFile2);
+ mIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // high quality
+ setActivityIntent(mIntent);
+ getActivity();
+
+ recordVideo();
+ pressDone();
+
+ verify(getActivity(), uri);
+ assertTrue(mFile.length() <= mFile2.length());
+ }
+
+ // Verify result code, result data, and the duration.
+ private int verify(CameraActivity activity, Uri uri) throws Exception {
+ assertTrue(activity.isFinishing());
+ assertEquals(Activity.RESULT_OK, activity.getResultCode());
+
+ // Verify the video file
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(activity, uri);
+ String duration = retriever.extractMetadata(
+ MediaMetadataRetriever.METADATA_KEY_DURATION);
+ assertNotNull(duration);
+ int durationValue = Integer.parseInt(duration);
+ Log.v(TAG, "Video duration is " + durationValue);
+ assertTrue(durationValue > 0);
+ return durationValue;
+ }
+
+ private void recordVideo(int ms) throws Exception {
+ getInstrumentation().sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
+ Thread.sleep(ms);
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ // If recording is in progress, stop it. Run these atomically in
+ // UI thread.
+ CameraActivity activity = getActivity();
+ if (activity.isRecording()) {
+ activity.findViewById(R.id.shutter_button).performClick();
+ }
+ }
+ });
+ }
+
+ private void recordVideo() throws Exception {
+ recordVideo(2000);
+ }
+
+ private void pressDone() {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().findViewById(R.id.btn_done).performClick();
+ }
+ });
+ }
+
+ private void pressCancel() {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().findViewById(R.id.btn_cancel).performClick();
+ }
+ });
+ }
+}
diff --git a/tests_camera/src/com/android/camera/power/ImageAndVideoCapture.java b/tests_camera/src/com/android/camera/power/ImageAndVideoCapture.java
new file mode 100755
index 0000000..b89b764
--- /dev/null
+++ b/tests_camera/src/com/android/camera/power/ImageAndVideoCapture.java
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.power;
+
+import com.android.camera.CameraActivity;
+
+import android.app.Instrumentation;
+import android.provider.MediaStore;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.content.Intent;
+/**
+ * Junit / Instrumentation test case for camera power measurement
+ *
+ * Running the test suite:
+ *
+ * adb shell am instrument \
+ * -e com.android.camera.power.ImageAndVideoCapture \
+ * -w com.android.camera.tests/android.test.InstrumentationTestRunner
+ *
+ */
+
+public class ImageAndVideoCapture extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private String TAG = "ImageAndVideoCapture";
+ private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 5;
+ private static final int TOTAL_NUMBER_OF_VIDEOCAPTURE = 5;
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1500; //1.5 sedconds
+ private static final long WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN = 10000; //10 seconds
+ private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds
+ private static final long WAIT_FOR_STABLE_STATE = 2000; //2 seconds
+
+ public ImageAndVideoCapture() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void testLaunchCamera() {
+ // This test case capture the baseline for the image preview.
+ try {
+ Thread.sleep(WAIT_FOR_STABLE_STATE);
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ assertTrue("testImageCaptureDoNothing", false);
+ }
+ }
+
+ @LargeTest
+ public void testCapture5Image() {
+ // This test case will use the default camera setting
+ Instrumentation inst = getInstrumentation();
+ try {
+ for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ }
+ Thread.sleep(WAIT_FOR_STABLE_STATE);
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ assertTrue("testImageCapture", false);
+ }
+ }
+
+ @LargeTest
+ public void testCapture5Videos() {
+ // This test case will use the default camera setting
+ Instrumentation inst = getInstrumentation();
+ try {
+ // Switch to the video mode
+ Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+ intent.setClass(getInstrumentation().getTargetContext(),
+ CameraActivity.class);
+ getActivity().startActivity(intent);
+ for (int i = 0; i < TOTAL_NUMBER_OF_VIDEOCAPTURE; i++) {
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ // record a video
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ }
+ Thread.sleep(WAIT_FOR_STABLE_STATE);
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ assertTrue("testVideoCapture", false);
+ }
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/CameraLatency.java b/tests_camera/src/com/android/camera/stress/CameraLatency.java
new file mode 100755
index 0000000..35ff717
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/CameraLatency.java
@@ -0,0 +1,149 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.stress;
+
+import com.android.camera.CameraActivity;
+
+import android.app.Instrumentation;
+import android.os.Environment;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ */
+
+public class CameraLatency extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private String TAG = "CameraLatency";
+ private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 20;
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 4000;
+ private static final String CAMERA_TEST_OUTPUT_FILE =
+ Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
+
+ private long mTotalAutoFocusTime;
+ private long mTotalShutterLag;
+ private long mTotalShutterToPictureDisplayedTime;
+ private long mTotalPictureDisplayedToJpegCallbackTime;
+ private long mTotalJpegCallbackFinishTime;
+ private long mAvgAutoFocusTime;
+ private long mAvgShutterLag = mTotalShutterLag;
+ private long mAvgShutterToPictureDisplayedTime;
+ private long mAvgPictureDisplayedToJpegCallbackTime;
+ private long mAvgJpegCallbackFinishTime;
+
+ public CameraLatency() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void testImageCapture() {
+ Log.v(TAG, "start testImageCapture test");
+ Instrumentation inst = getInstrumentation();
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
+ try {
+ for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ //skip the first measurement
+ if (i != 0) {
+ CameraActivity c = getActivity();
+
+ // if any of the latency var accessor methods return -1 then the
+ // camera is set to a different module other than PhotoModule so
+ // skip the shot and try again
+ if (c.getAutoFocusTime() != -1) {
+ mTotalAutoFocusTime += c.getAutoFocusTime();
+ mTotalShutterLag += c.getShutterLag();
+ mTotalShutterToPictureDisplayedTime +=
+ c.getShutterToPictureDisplayedTime();
+ mTotalPictureDisplayedToJpegCallbackTime +=
+ c.getPictureDisplayedToJpegCallbackTime();
+ mTotalJpegCallbackFinishTime += c.getJpegCallbackFinishTime();
+ }
+ else {
+ i--;
+ continue;
+ }
+ }
+ }
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ }
+ //ToDO: yslau
+ //1) Need to get the baseline from the cupcake so that we can add the
+ //failure condition of the camera latency.
+ //2) Only count those number with succesful capture. Set the timer to invalid
+ //before capture and ignore them if the value is invalid
+ int numberofRun = TOTAL_NUMBER_OF_IMAGECAPTURE - 1;
+ mAvgAutoFocusTime = mTotalAutoFocusTime / numberofRun;
+ mAvgShutterLag = mTotalShutterLag / numberofRun;
+ mAvgShutterToPictureDisplayedTime =
+ mTotalShutterToPictureDisplayedTime / numberofRun;
+ mAvgPictureDisplayedToJpegCallbackTime =
+ mTotalPictureDisplayedToJpegCallbackTime / numberofRun;
+ mAvgJpegCallbackFinishTime =
+ mTotalJpegCallbackFinishTime / numberofRun;
+
+ try {
+ FileWriter fstream = null;
+ fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true);
+ BufferedWriter out = new BufferedWriter(fstream);
+ out.write("Camera Latency : \n");
+ out.write("Number of loop: " + TOTAL_NUMBER_OF_IMAGECAPTURE + "\n");
+ out.write("Avg AutoFocus = " + mAvgAutoFocusTime + "\n");
+ out.write("Avg mShutterLag = " + mAvgShutterLag + "\n");
+ out.write("Avg mShutterToPictureDisplayedTime = "
+ + mAvgShutterToPictureDisplayedTime + "\n");
+ out.write("Avg mPictureDisplayedToJpegCallbackTime = "
+ + mAvgPictureDisplayedToJpegCallbackTime + "\n");
+ out.write("Avg mJpegCallbackFinishTime = " +
+ mAvgJpegCallbackFinishTime + "\n");
+ out.close();
+ fstream.close();
+ } catch (Exception e) {
+ fail("Camera Latency write output to file");
+ }
+ Log.v(TAG, "The Image capture wait time = " +
+ WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ Log.v(TAG, "Avg AutoFocus = " + mAvgAutoFocusTime);
+ Log.v(TAG, "Avg mShutterLag = " + mAvgShutterLag);
+ Log.v(TAG, "Avg mShutterToPictureDisplayedTime = "
+ + mAvgShutterToPictureDisplayedTime);
+ Log.v(TAG, "Avg mPictureDisplayedToJpegCallbackTime = "
+ + mAvgPictureDisplayedToJpegCallbackTime);
+ Log.v(TAG, "Avg mJpegCallbackFinishTime = " + mAvgJpegCallbackFinishTime);
+ }
+}
+
diff --git a/tests_camera/src/com/android/camera/stress/CameraStartUp.java b/tests_camera/src/com/android/camera/stress/CameraStartUp.java
new file mode 100644
index 0000000..94e9a94
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/CameraStartUp.java
@@ -0,0 +1,157 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.stress;
+
+import com.android.camera.CameraActivity;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+
+import java.io.FileWriter;
+import java.io.BufferedWriter;
+
+/**
+ * Test cases to measure the camera and video recorder startup time.
+ */
+public class CameraStartUp extends InstrumentationTestCase {
+
+ private static final int TOTAL_NUMBER_OF_STARTUP = 20;
+
+ private String TAG = "CameraStartUp";
+ private static final String CAMERA_TEST_OUTPUT_FILE =
+ Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
+ private static int WAIT_TIME_FOR_PREVIEW = 1500; //1.5 second
+
+ private long launchCamera() {
+ long startupTime = 0;
+ try {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ long beforeStart = System.currentTimeMillis();
+ Instrumentation inst = getInstrumentation();
+ Activity cameraActivity = inst.startActivitySync(intent);
+ long cameraStarted = System.currentTimeMillis();
+ Thread.sleep(WAIT_TIME_FOR_PREVIEW);
+ cameraActivity.finish();
+ startupTime = cameraStarted - beforeStart;
+ Thread.sleep(1000);
+ Log.v(TAG, "camera startup time: " + startupTime);
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ fail("Fails to get the output file");
+ }
+ return startupTime;
+ }
+
+ private long launchVideo() {
+ long startupTime = 0;
+
+ try {
+ Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ long beforeStart = System.currentTimeMillis();
+ Instrumentation inst = getInstrumentation();
+ Activity recorderActivity = inst.startActivitySync(intent);
+ long cameraStarted = System.currentTimeMillis();
+ recorderActivity.finish();
+ startupTime = cameraStarted - beforeStart;
+ Log.v(TAG, "Video Startup Time = " + startupTime);
+ // wait for 1s to make sure it reach a clean stage
+ Thread.sleep(WAIT_TIME_FOR_PREVIEW);
+ Log.v(TAG, "video startup time: " + startupTime);
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception", e);
+ fail("Fails to launch video output file");
+ }
+ return startupTime;
+ }
+
+ private void writeToOutputFile(long totalStartupTime,
+ String individualStartupTime, boolean firstStartUp, String Type) throws Exception {
+ // TODO (yslau) : Need to integrate the output data with central
+ // dashboard
+ try {
+ FileWriter fstream = null;
+ fstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true);
+ BufferedWriter out = new BufferedWriter(fstream);
+ if (firstStartUp) {
+ out.write("First " + Type + " Startup: " + totalStartupTime + "\n");
+ } else {
+ long averageStartupTime = totalStartupTime / (TOTAL_NUMBER_OF_STARTUP -1);
+ out.write(Type + "startup time: " + "\n");
+ out.write("Number of loop: " + (TOTAL_NUMBER_OF_STARTUP -1) + "\n");
+ out.write(individualStartupTime + "\n\n");
+ out.write(Type + " average startup time: " + averageStartupTime + " ms\n\n");
+ }
+ out.close();
+ fstream.close();
+ } catch (Exception e) {
+ fail("Camera write output to file");
+ }
+ }
+
+ @LargeTest
+ public void testLaunchVideo() throws Exception {
+ String individualStartupTime;
+ individualStartupTime = "Individual Video Startup Time = ";
+ long totalStartupTime = 0;
+ long startupTime = 0;
+ for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) {
+ if (i == 0) {
+ // Capture the first startup time individually
+ long firstStartUpTime = launchVideo();
+ writeToOutputFile(firstStartUpTime, "na", true, "Video");
+ } else {
+ startupTime = launchVideo();
+ totalStartupTime += startupTime;
+ individualStartupTime += startupTime + " ,";
+ }
+ }
+ Log.v(TAG, "totalStartupTime =" + totalStartupTime);
+ writeToOutputFile(totalStartupTime, individualStartupTime, false, "Video");
+ }
+
+ @LargeTest
+ public void testLaunchCamera() throws Exception {
+ String individualStartupTime;
+ individualStartupTime = "Individual Camera Startup Time = ";
+ long totalStartupTime = 0;
+ long startupTime = 0;
+ for (int i = 0; i < TOTAL_NUMBER_OF_STARTUP; i++) {
+ if (i == 0) {
+ // Capture the first startup time individually
+ long firstStartUpTime = launchCamera();
+ writeToOutputFile(firstStartUpTime, "na", true, "Camera");
+ } else {
+ startupTime = launchCamera();
+ totalStartupTime += startupTime;
+ individualStartupTime += startupTime + " ,";
+ }
+ }
+ Log.v(TAG, "totalStartupTime =" + totalStartupTime);
+ writeToOutputFile(totalStartupTime,
+ individualStartupTime, false, "Camera");
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/CameraStressTestRunner.java b/tests_camera/src/com/android/camera/stress/CameraStressTestRunner.java
new file mode 100755
index 0000000..4047da0
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/CameraStressTestRunner.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+package com.android.camera.stress;
+
+import android.os.Bundle;
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+import junit.framework.TestSuite;
+
+public class CameraStressTestRunner extends InstrumentationTestRunner {
+
+ // Default recorder settings
+ public static int mVideoDuration = 20000; // set default to 20 seconds
+ public static int mVideoIterations = 100; // set default to 100 videos
+ public static int mImageIterations = 100; // set default to 100 images
+
+ @Override
+ public TestSuite getAllTests() {
+ TestSuite suite = new InstrumentationTestSuite(this);
+ suite.addTestSuite(ImageCapture.class);
+ suite.addTestSuite(VideoCapture.class);
+ return suite;
+ }
+
+ @Override
+ public ClassLoader getLoader() {
+ return CameraStressTestRunner.class.getClassLoader();
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ String video_iterations = (String) icicle.get("video_iterations");
+ String image_iterations = (String) icicle.get("image_iterations");
+ String video_duration = (String) icicle.get("video_duration");
+
+ if ( video_iterations != null ) {
+ mVideoIterations = Integer.parseInt(video_iterations);
+ }
+ if ( image_iterations != null) {
+ mImageIterations = Integer.parseInt(image_iterations);
+ }
+ if ( video_duration != null) {
+ mVideoDuration = Integer.parseInt(video_duration);
+ }
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/ImageCapture.java b/tests_camera/src/com/android/camera/stress/ImageCapture.java
new file mode 100755
index 0000000..ad06db1
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/ImageCapture.java
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.stress;
+
+import com.android.camera.CameraActivity;
+import com.android.camera.stress.CameraStressTestRunner;
+
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.app.Activity;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ * Running the test suite:
+ *
+ * adb shell am instrument \
+ * -e class com.android.camera.stress.ImageCapture \
+ * -w com.google.android.camera.tests/android.test.InstrumentationTestRunner
+ *
+ */
+
+public class ImageCapture extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private String TAG = "ImageCapture";
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1500; //1.5 sedconds
+ private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //3 seconds
+
+ private TestUtil testUtil = new TestUtil();
+
+ // Private intent extras.
+ private final static String EXTRAS_CAMERA_FACING =
+ "android.intent.extras.CAMERA_FACING";
+
+ public ImageCapture() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ testUtil.prepareOutputFile();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ testUtil.closeOutputFile();
+ super.tearDown();
+ }
+
+ public void captureImages(String reportTag, Instrumentation inst) {
+ int total_num_of_images = CameraStressTestRunner.mImageIterations;
+ Log.v(TAG, "no of images = " + total_num_of_images);
+
+ //TODO(yslau): Need to integrate the outoput with the central dashboard,
+ //write to a txt file as a temp solution
+ boolean memoryResult = false;
+ KeyEvent focusEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS);
+
+ try {
+ testUtil.writeReportHeader(reportTag, total_num_of_images);
+ for (int i = 0; i < total_num_of_images; i++) {
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeySync(focusEvent);
+ inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ testUtil.writeResult(i);
+ }
+ } catch (Exception e) {
+ Log.v(TAG, "Got exception: " + e.toString());
+ assertTrue("testImageCapture", false);
+ }
+ }
+
+ @LargeTest
+ public void testBackImageCapture() throws Exception {
+ Instrumentation inst = getInstrumentation();
+ Intent intent = new Intent();
+
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(EXTRAS_CAMERA_FACING,
+ android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK);
+ Activity act = inst.startActivitySync(intent);
+ Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
+ captureImages("Back Camera Image Capture\n", inst);
+ act.finish();
+ }
+
+ @LargeTest
+ public void testFrontImageCapture() throws Exception {
+ Instrumentation inst = getInstrumentation();
+ Intent intent = new Intent();
+
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(EXTRAS_CAMERA_FACING,
+ android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
+ Activity act = inst.startActivitySync(intent);
+ Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
+ captureImages("Front Camera Image Capture\n", inst);
+ act.finish();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/ShotToShotLatency.java b/tests_camera/src/com/android/camera/stress/ShotToShotLatency.java
new file mode 100644
index 0000000..0c1ef45
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/ShotToShotLatency.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.camera.stress;
+
+import android.app.Instrumentation;
+import android.os.Environment;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.KeyEvent;
+import com.android.camera.CameraActivity;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Junit / Instrumentation test case for measuring camera shot to shot latency
+ */
+public class ShotToShotLatency extends ActivityInstrumentationTestCase2<CameraActivity> {
+ private String TAG = "ShotToShotLatency";
+ private static final int TOTAL_NUMBER_OF_SNAPSHOTS = 250;
+ private static final long SNAPSHOT_WAIT = 1000;
+ private static final String CAMERA_TEST_OUTPUT_FILE =
+ Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
+ private static final String CAMERA_IMAGE_DIRECTORY =
+ Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/";
+
+ public ShotToShotLatency() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ private void cleanupLatencyImages() {
+ try {
+ File sdcard = new File(CAMERA_IMAGE_DIRECTORY);
+ File[] pics = null;
+ FilenameFilter filter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".jpg");
+ }
+ };
+ pics = sdcard.listFiles(filter);
+ for (File f : pics) {
+ f.delete();
+ }
+ } catch (SecurityException e) {
+ Log.e(TAG, "Security manager access violation: " + e.toString());
+ }
+ }
+
+ private void sleep(long time) {
+ try {
+ Thread.sleep(time);
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Sleep InterruptedException " + e.toString());
+ }
+ }
+
+ @LargeTest
+ public void testShotToShotLatency() {
+ long sigmaOfDiffFromMeanSquared = 0;
+ double mean = 0;
+ double standardDeviation = 0;
+ ArrayList<Long> captureTimes = new ArrayList<Long>();
+ ArrayList<Long> latencyTimes = new ArrayList<Long>();
+
+ Log.v(TAG, "start testShotToShotLatency test");
+ Instrumentation inst = getInstrumentation();
+
+ // Generate data points
+ for (int i = 0; i < TOTAL_NUMBER_OF_SNAPSHOTS; i++) {
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ sleep(SNAPSHOT_WAIT);
+ CameraActivity c = getActivity();
+ if (c.getCaptureStartTime() > 0) {
+ captureTimes.add(c.getCaptureStartTime());
+ }
+ }
+
+ // Calculate latencies
+ for (int j = 1; j < captureTimes.size(); j++) {
+ latencyTimes.add(captureTimes.get(j) - captureTimes.get(j - 1));
+ }
+
+ // Crunch numbers
+ for (long dataPoint : latencyTimes) {
+ mean += (double) dataPoint;
+ }
+ mean /= latencyTimes.size();
+
+ for (long dataPoint : latencyTimes) {
+ sigmaOfDiffFromMeanSquared += (dataPoint - mean) * (dataPoint - mean);
+ }
+ standardDeviation = Math.sqrt(sigmaOfDiffFromMeanSquared / latencyTimes.size());
+
+ // Report statistics
+ File outFile = new File(CAMERA_TEST_OUTPUT_FILE);
+ BufferedWriter output = null;
+ try {
+ output = new BufferedWriter(new FileWriter(outFile, true));
+ output.write("Shot to shot latency - mean: " + mean + "\n");
+ output.write("Shot to shot latency - standard deviation: " + standardDeviation + "\n");
+ cleanupLatencyImages();
+ } catch (IOException e) {
+ Log.e(TAG, "testShotToShotLatency IOException writing to log " + e.toString());
+ } finally {
+ try {
+ if (output != null) {
+ output.close();
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Error closing file: " + e.toString());
+ }
+ }
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/SwitchPreview.java b/tests_camera/src/com/android/camera/stress/SwitchPreview.java
new file mode 100755
index 0000000..86b1b5d
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/SwitchPreview.java
@@ -0,0 +1,117 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.stress;
+
+import com.android.camera.CameraActivity;
+
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.provider.MediaStore;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ * Running the test suite:
+ *
+ * adb shell am instrument \
+ * -e class com.android.camera.stress.SwitchPreview \
+ * -w com.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
+ *
+ */
+public class SwitchPreview extends ActivityInstrumentationTestCase2 <CameraActivity>{
+ private String TAG = "SwitchPreview";
+ private static final int TOTAL_NUMBER_OF_SWITCHING = 200;
+ private static final long WAIT_FOR_PREVIEW = 4000;
+
+ private static final String CAMERA_TEST_OUTPUT_FILE =
+ Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
+ private BufferedWriter mOut;
+ private FileWriter mfstream;
+
+ public SwitchPreview() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ prepareOutputFile();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ getActivity().finish();
+ closeOutputFile();
+ super.tearDown();
+ }
+
+ private void prepareOutputFile(){
+ try{
+ mfstream = new FileWriter(CAMERA_TEST_OUTPUT_FILE, true);
+ mOut = new BufferedWriter(mfstream);
+ } catch (Exception e){
+ assertTrue("Camera Switch Mode", false);
+ }
+ }
+
+ private void closeOutputFile() {
+ try {
+ mOut.write("\n");
+ mOut.close();
+ mfstream.close();
+ } catch (Exception e) {
+ assertTrue("CameraSwitchMode close output", false);
+ }
+ }
+
+ @LargeTest
+ public void testSwitchMode() {
+ //Switching the video and the video recorder mode
+ Instrumentation inst = getInstrumentation();
+ try{
+ mOut.write("Camera Switch Mode:\n");
+ mOut.write("No of loops :" + TOTAL_NUMBER_OF_SWITCHING + "\n");
+ mOut.write("loop: ");
+ for (int i=0; i< TOTAL_NUMBER_OF_SWITCHING; i++) {
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.setClass(getInstrumentation().getTargetContext(),
+ CameraActivity.class);
+ getActivity().startActivity(intent);
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ intent = new Intent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.setClass(getInstrumentation().getTargetContext(),
+ CameraActivity.class);
+ getActivity().startActivity(intent);
+ mOut.write(" ," + i);
+ mOut.flush();
+ }
+ } catch (Exception e){
+ Log.v(TAG, "Got exception", e);
+ }
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/TestUtil.java b/tests_camera/src/com/android/camera/stress/TestUtil.java
new file mode 100644
index 0000000..64e2039
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/TestUtil.java
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+package com.android.camera.stress;
+
+import android.os.Environment;
+import java.io.FileWriter;
+import java.io.BufferedWriter;
+
+
+/**
+ * Collection of utility functions used for the test.
+ */
+public class TestUtil {
+ public BufferedWriter mOut;
+ public FileWriter mfstream;
+
+ public TestUtil() {
+ }
+
+ public void prepareOutputFile() throws Exception {
+ String camera_test_output_file =
+ Environment.getExternalStorageDirectory().toString() + "/mediaStressOut.txt";
+ mfstream = new FileWriter(camera_test_output_file, true);
+ mOut = new BufferedWriter(mfstream);
+ }
+
+ public void closeOutputFile() throws Exception {
+ mOut.write("\n");
+ mOut.close();
+ mfstream.close();
+ }
+
+ public void writeReportHeader(String reportTag, int iteration) throws Exception {
+ mOut.write(reportTag);
+ mOut.write("No of loops :" + iteration + "\n");
+ mOut.write("loop: ");
+ }
+
+ public void writeResult(int iteration) throws Exception {
+ mOut.write(" ," + iteration);
+ mOut.flush();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/stress/VideoCapture.java b/tests_camera/src/com/android/camera/stress/VideoCapture.java
new file mode 100755
index 0000000..ec55ccc
--- /dev/null
+++ b/tests_camera/src/com/android/camera/stress/VideoCapture.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+package com.android.camera.stress;
+
+import com.android.camera.CameraActivity;
+import com.android.camera.stress.TestUtil;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.provider.MediaStore;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.view.KeyEvent;
+
+import com.android.camera.stress.CameraStressTestRunner;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ * Running the test suite:
+ *
+ * adb shell am instrument \
+ * -e class com.android.camera.stress.VideoCapture \
+ * -w com.google.android.camera.tests/android.test.InstrumentationTestRunner
+ *
+ */
+
+public class VideoCapture extends ActivityInstrumentationTestCase2 <CameraActivity> {
+ private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds
+ private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //2 seconds
+
+ // Private intent extras which control the camera facing.
+ private final static String EXTRAS_CAMERA_FACING =
+ "android.intent.extras.CAMERA_FACING";
+
+ private TestUtil testUtil = new TestUtil();
+
+ public VideoCapture() {
+ super(CameraActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ testUtil.prepareOutputFile();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ testUtil.closeOutputFile();
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void captureVideos(String reportTag, Instrumentation inst) throws Exception{
+ boolean memoryResult = false;
+ int total_num_of_videos = CameraStressTestRunner.mVideoIterations;
+ int video_duration = CameraStressTestRunner.mVideoDuration;
+ testUtil.writeReportHeader(reportTag, total_num_of_videos);
+
+ for (int i = 0; i < total_num_of_videos; i++) {
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ // record a video
+ inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
+ Thread.sleep(video_duration);
+ inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
+ testUtil.writeResult(i);
+ }
+ }
+
+ @LargeTest
+ public void testBackVideoCapture() throws Exception {
+ Instrumentation inst = getInstrumentation();
+ Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(EXTRAS_CAMERA_FACING,
+ android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK);
+ Activity act = inst.startActivitySync(intent);
+ Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
+ captureVideos("Back Camera Video Capture\n", inst);
+ act.finish();
+ }
+
+ @LargeTest
+ public void testFrontVideoCapture() throws Exception {
+ Instrumentation inst = getInstrumentation();
+ Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
+
+ intent.setClass(getInstrumentation().getTargetContext(), CameraActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(EXTRAS_CAMERA_FACING,
+ android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
+ Activity act = inst.startActivitySync(intent);
+ Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
+ captureVideos("Front Camera Video Capture\n", inst);
+ act.finish();
+ }
+}
diff --git a/tests_camera/src/com/android/camera/unittest/CameraUnitTest.java b/tests_camera/src/com/android/camera/unittest/CameraUnitTest.java
new file mode 100644
index 0000000..70faa5c
--- /dev/null
+++ b/tests_camera/src/com/android/camera/unittest/CameraUnitTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+package com.android.camera.unittest;
+
+import com.android.camera.util.CameraUtil;
+
+import android.graphics.Matrix;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+@SmallTest
+public class CameraUnitTest extends TestCase {
+ public void testRoundOrientation() {
+ int h = CameraUtil.ORIENTATION_HYSTERESIS;
+ assertEquals(0, CameraUtil.roundOrientation(0, 0));
+ assertEquals(0, CameraUtil.roundOrientation(359, 0));
+ assertEquals(0, CameraUtil.roundOrientation(0 + 44 + h, 0));
+ assertEquals(90, CameraUtil.roundOrientation(0 + 45 + h, 0));
+ assertEquals(0, CameraUtil.roundOrientation(360 - 44 - h, 0));
+ assertEquals(270, CameraUtil.roundOrientation(360 - 45 - h, 0));
+
+ assertEquals(90, CameraUtil.roundOrientation(90, 90));
+ assertEquals(90, CameraUtil.roundOrientation(90 + 44 + h, 90));
+ assertEquals(180, CameraUtil.roundOrientation(90 + 45 + h, 90));
+ assertEquals(90, CameraUtil.roundOrientation(90 - 44 - h, 90));
+ assertEquals(0, CameraUtil.roundOrientation(90 - 45 - h, 90));
+
+ assertEquals(180, CameraUtil.roundOrientation(180, 180));
+ assertEquals(180, CameraUtil.roundOrientation(180 + 44 + h, 180));
+ assertEquals(270, CameraUtil.roundOrientation(180 + 45 + h, 180));
+ assertEquals(180, CameraUtil.roundOrientation(180 - 44 - h, 180));
+ assertEquals(90, CameraUtil.roundOrientation(180 - 45 - h, 180));
+
+ assertEquals(270, CameraUtil.roundOrientation(270, 270));
+ assertEquals(270, CameraUtil.roundOrientation(270 + 44 + h, 270));
+ assertEquals(0, CameraUtil.roundOrientation(270 + 45 + h, 270));
+ assertEquals(270, CameraUtil.roundOrientation(270 - 44 - h, 270));
+ assertEquals(180, CameraUtil.roundOrientation(270 - 45 - h, 270));
+
+ assertEquals(90, CameraUtil.roundOrientation(90, 0));
+ assertEquals(180, CameraUtil.roundOrientation(180, 0));
+ assertEquals(270, CameraUtil.roundOrientation(270, 0));
+
+ assertEquals(0, CameraUtil.roundOrientation(0, 90));
+ assertEquals(180, CameraUtil.roundOrientation(180, 90));
+ assertEquals(270, CameraUtil.roundOrientation(270, 90));
+
+ assertEquals(0, CameraUtil.roundOrientation(0, 180));
+ assertEquals(90, CameraUtil.roundOrientation(90, 180));
+ assertEquals(270, CameraUtil.roundOrientation(270, 180));
+
+ assertEquals(0, CameraUtil.roundOrientation(0, 270));
+ assertEquals(90, CameraUtil.roundOrientation(90, 270));
+ assertEquals(180, CameraUtil.roundOrientation(180, 270));
+ }
+
+ public void testPrepareMatrix() {
+ Matrix matrix = new Matrix();
+ float[] points;
+ int[] expected;
+
+ CameraUtil.prepareMatrix(matrix, false, 0, 800, 480);
+ points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
+ expected = new int[] {0, 0, 400, 240, 800, 480, 400, 480, 100, 300};
+ matrix.mapPoints(points);
+ assertEquals(expected, points);
+
+ CameraUtil.prepareMatrix(matrix, false, 90, 800, 480);
+ points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
+ expected = new int[] {800, 0, 400, 240, 0, 480, 0, 240, 300, 60};
+ matrix.mapPoints(points);
+ assertEquals(expected, points);
+
+ CameraUtil.prepareMatrix(matrix, false, 180, 800, 480);
+ points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
+ expected = new int[] {800, 480, 400, 240, 0, 0, 400, 0, 700, 180};
+ matrix.mapPoints(points);
+ assertEquals(expected, points);
+
+ CameraUtil.prepareMatrix(matrix, true, 180, 800, 480);
+ points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
+ expected = new int[] {0, 480, 400, 240, 800, 0, 400, 0, 100, 180};
+ matrix.mapPoints(points);
+ assertEquals(expected, points);
+ }
+
+ private void assertEquals(int expected[], float[] actual) {
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals("Array index " + i + " mismatch", expected[i], Math.round(actual[i]));
+ }
+ }
+}