OSDN Git Service

am 104fa69c: am 0382139c: Merge "Enable progress reporting for modules like HDR+...
authorSascha Haeberling <haeberling@google.com>
Fri, 15 May 2015 17:28:16 +0000 (17:28 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Fri, 15 May 2015 17:28:16 +0000 (17:28 +0000)
* commit '104fa69c20f389d83fad0306421d88a01be79952':

764 files changed:
Android.mk
AndroidManifest.xml
res/drawable-anydpi-v21/ic_camera_blanket.xml [new file with mode: 0644]
res/drawable-hdpi/aspect_ratio_16x9_selected.jpg [new file with mode: 0644]
res/drawable-hdpi/aspect_ratio_16x9_selected.png [deleted file]
res/drawable-hdpi/aspect_ratio_16x9_unselected.jpg [new file with mode: 0644]
res/drawable-hdpi/aspect_ratio_16x9_unselected.png [deleted file]
res/drawable-hdpi/aspect_ratio_4x3_selected.jpg [new file with mode: 0644]
res/drawable-hdpi/aspect_ratio_4x3_selected.png [deleted file]
res/drawable-hdpi/aspect_ratio_4x3_unselected.jpg [new file with mode: 0644]
res/drawable-hdpi/aspect_ratio_4x3_unselected.png [deleted file]
res/drawable-hdpi/btn_cling.9.png
res/drawable-hdpi/btn_cling_pressed.9.png
res/drawable-hdpi/geo_opt_in_graphic.jpg [new file with mode: 0644]
res/drawable-hdpi/geo_opt_in_graphic.png [deleted file]
res/drawable-hdpi/ic_camera_blanket.png [new file with mode: 0644]
res/drawable-hdpi/ic_camera_disabled.png
res/drawable-hdpi/ic_camera_normal.png [new file with mode: 0644]
res/drawable-hdpi/ic_capture_camera_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_capture_camera_normal.png [new file with mode: 0644]
res/drawable-hdpi/ic_capture_video.png [new file with mode: 0644]
res/drawable-hdpi/ic_capture_video_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_discard_disabled.png [deleted file]
res/drawable-hdpi/ic_discard_normal.png [deleted file]
res/drawable-hdpi/ic_done_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_done_normal.png [new file with mode: 0644]
res/drawable-hdpi/ic_edit_disabled.png
res/drawable-hdpi/ic_edit_normal.png
res/drawable-hdpi/ic_exposure_0.png
res/drawable-hdpi/ic_exposure_0_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_0_indicator.png
res/drawable-hdpi/ic_exposure_disabled.png
res/drawable-hdpi/ic_exposure_indicator.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_n1.png
res/drawable-hdpi/ic_exposure_n1_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_n1_indicator.png
res/drawable-hdpi/ic_exposure_n2.png
res/drawable-hdpi/ic_exposure_n2_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_n2_indicator.png
res/drawable-hdpi/ic_exposure_normal.png
res/drawable-hdpi/ic_exposure_p1.png
res/drawable-hdpi/ic_exposure_p1_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_p1_indicator.png
res/drawable-hdpi/ic_exposure_p2.png
res/drawable-hdpi/ic_exposure_p2_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_exposure_p2_indicator.png
res/drawable-hdpi/ic_flash_auto_disabled.png
res/drawable-hdpi/ic_flash_auto_indicator.png
res/drawable-hdpi/ic_flash_auto_normal.png
res/drawable-hdpi/ic_flash_off_disabled.png
res/drawable-hdpi/ic_flash_off_indicator.png
res/drawable-hdpi/ic_flash_off_normal.png
res/drawable-hdpi/ic_flash_on_disabled.png
res/drawable-hdpi/ic_flash_on_indicator.png
res/drawable-hdpi/ic_flash_on_normal.png
res/drawable-hdpi/ic_grid_off_disabled.png
res/drawable-hdpi/ic_grid_off_indicator.png
res/drawable-hdpi/ic_grid_off_normal.png
res/drawable-hdpi/ic_grid_on_disabled.png
res/drawable-hdpi/ic_grid_on_indicator.png
res/drawable-hdpi/ic_grid_on_normal.png
res/drawable-hdpi/ic_hdr_off_disabled.png
res/drawable-hdpi/ic_hdr_off_indicator.png
res/drawable-hdpi/ic_hdr_off_normal.png
res/drawable-hdpi/ic_hdr_on_disabled.png
res/drawable-hdpi/ic_hdr_on_indicator.png
res/drawable-hdpi/ic_hdr_on_normal.png
res/drawable-hdpi/ic_hdr_plus_off_disabled.png
res/drawable-hdpi/ic_hdr_plus_off_indicator.png
res/drawable-hdpi/ic_hdr_plus_off_normal.png
res/drawable-hdpi/ic_hdr_plus_on_disabled.png
res/drawable-hdpi/ic_hdr_plus_on_indicator.png
res/drawable-hdpi/ic_hdr_plus_on_normal.png
res/drawable-hdpi/ic_menu_trash_holo_light.png [deleted file]
res/drawable-hdpi/ic_panorama_disabled.png [deleted file]
res/drawable-hdpi/ic_photo_sphere_disabled.png [deleted file]
res/drawable-hdpi/ic_refocus_disabled.png [deleted file]
res/drawable-hdpi/ic_share_disabled.png
res/drawable-hdpi/ic_share_normal.png
res/drawable-hdpi/ic_switch_camera_back_disabled.png
res/drawable-hdpi/ic_switch_camera_back_indicator.png [new file with mode: 0644]
res/drawable-hdpi/ic_switch_camera_back_normal.png
res/drawable-hdpi/ic_switch_camera_front_disabled.png
res/drawable-hdpi/ic_switch_camera_front_indicator.png [new file with mode: 0644]
res/drawable-hdpi/ic_switch_camera_front_normal.png
res/drawable-hdpi/ic_timer_10s_disabled.png
res/drawable-hdpi/ic_timer_10s_indicator.png
res/drawable-hdpi/ic_timer_10s_normal.png
res/drawable-hdpi/ic_timer_3s_disabled.png
res/drawable-hdpi/ic_timer_3s_indicator.png
res/drawable-hdpi/ic_timer_3s_normal.png
res/drawable-hdpi/ic_timer_auto_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_timer_auto_indicator.png [new file with mode: 0644]
res/drawable-hdpi/ic_timer_auto_normal.png [new file with mode: 0644]
res/drawable-hdpi/ic_timer_off_disabled.png
res/drawable-hdpi/ic_timer_off_indicator.png
res/drawable-hdpi/ic_timer_off_normal.png
res/drawable-hdpi/ic_trash_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_trash_normal.png [new file with mode: 0644]
res/drawable-hdpi/ic_video_blanket.png [new file with mode: 0644]
res/drawable-hdpi/ic_video_disabled.png [new file with mode: 0644]
res/drawable-hdpi/ic_video_normal.png [new file with mode: 0644]
res/drawable-hdpi/stgs_cling.9.png [new file with mode: 0644]
res/drawable-hdpi/stgs_cling_pressed.9.png [new file with mode: 0644]
res/drawable-mdpi/aspect_ratio_16x9_selected.jpg [new file with mode: 0644]
res/drawable-mdpi/aspect_ratio_16x9_selected.png [deleted file]
res/drawable-mdpi/aspect_ratio_16x9_unselected.jpg [new file with mode: 0644]
res/drawable-mdpi/aspect_ratio_16x9_unselected.png [deleted file]
res/drawable-mdpi/aspect_ratio_4x3_selected.jpg [new file with mode: 0644]
res/drawable-mdpi/aspect_ratio_4x3_selected.png [deleted file]
res/drawable-mdpi/aspect_ratio_4x3_unselected.jpg [new file with mode: 0644]
res/drawable-mdpi/aspect_ratio_4x3_unselected.png [deleted file]
res/drawable-mdpi/btn_cling.9.png
res/drawable-mdpi/btn_cling_pressed.9.png
res/drawable-mdpi/geo_opt_in_graphic.jpg [new file with mode: 0644]
res/drawable-mdpi/geo_opt_in_graphic.png [deleted file]
res/drawable-mdpi/ic_camera_blanket.png [new file with mode: 0644]
res/drawable-mdpi/ic_camera_disabled.png
res/drawable-mdpi/ic_camera_normal.png [new file with mode: 0644]
res/drawable-mdpi/ic_capture_camera_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_capture_camera_normal.png [new file with mode: 0644]
res/drawable-mdpi/ic_capture_video.png [new file with mode: 0644]
res/drawable-mdpi/ic_capture_video_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_discard_disabled.png [deleted file]
res/drawable-mdpi/ic_discard_normal.png [deleted file]
res/drawable-mdpi/ic_done_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_done_normal.png [new file with mode: 0644]
res/drawable-mdpi/ic_edit_disabled.png
res/drawable-mdpi/ic_edit_normal.png
res/drawable-mdpi/ic_exposure_0.png
res/drawable-mdpi/ic_exposure_0_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_0_indicator.png
res/drawable-mdpi/ic_exposure_disabled.png
res/drawable-mdpi/ic_exposure_indicator.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_n1.png
res/drawable-mdpi/ic_exposure_n1_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_n1_indicator.png
res/drawable-mdpi/ic_exposure_n2.png
res/drawable-mdpi/ic_exposure_n2_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_n2_indicator.png
res/drawable-mdpi/ic_exposure_normal.png
res/drawable-mdpi/ic_exposure_p1.png
res/drawable-mdpi/ic_exposure_p1_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_p1_indicator.png
res/drawable-mdpi/ic_exposure_p2.png
res/drawable-mdpi/ic_exposure_p2_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_exposure_p2_indicator.png
res/drawable-mdpi/ic_flash_auto_disabled.png
res/drawable-mdpi/ic_flash_auto_indicator.png
res/drawable-mdpi/ic_flash_auto_normal.png
res/drawable-mdpi/ic_flash_off_disabled.png
res/drawable-mdpi/ic_flash_off_indicator.png
res/drawable-mdpi/ic_flash_off_normal.png
res/drawable-mdpi/ic_flash_on_disabled.png
res/drawable-mdpi/ic_flash_on_indicator.png
res/drawable-mdpi/ic_flash_on_normal.png
res/drawable-mdpi/ic_grid_off_disabled.png
res/drawable-mdpi/ic_grid_off_indicator.png
res/drawable-mdpi/ic_grid_off_normal.png
res/drawable-mdpi/ic_grid_on_disabled.png
res/drawable-mdpi/ic_grid_on_indicator.png
res/drawable-mdpi/ic_grid_on_normal.png
res/drawable-mdpi/ic_hdr_off_disabled.png
res/drawable-mdpi/ic_hdr_off_indicator.png
res/drawable-mdpi/ic_hdr_off_normal.png
res/drawable-mdpi/ic_hdr_on_disabled.png
res/drawable-mdpi/ic_hdr_on_indicator.png
res/drawable-mdpi/ic_hdr_on_normal.png
res/drawable-mdpi/ic_hdr_plus_off_disabled.png
res/drawable-mdpi/ic_hdr_plus_off_indicator.png
res/drawable-mdpi/ic_hdr_plus_off_normal.png
res/drawable-mdpi/ic_hdr_plus_on_disabled.png
res/drawable-mdpi/ic_hdr_plus_on_indicator.png
res/drawable-mdpi/ic_hdr_plus_on_normal.png
res/drawable-mdpi/ic_menu_trash_holo_light.png [deleted file]
res/drawable-mdpi/ic_panorama_disabled.png [deleted file]
res/drawable-mdpi/ic_refocus_disabled.png [deleted file]
res/drawable-mdpi/ic_share_disabled.png
res/drawable-mdpi/ic_share_normal.png
res/drawable-mdpi/ic_switch_camera_back_disabled.png
res/drawable-mdpi/ic_switch_camera_back_indicator.png [new file with mode: 0644]
res/drawable-mdpi/ic_switch_camera_back_normal.png
res/drawable-mdpi/ic_switch_camera_front_disabled.png
res/drawable-mdpi/ic_switch_camera_front_indicator.png [new file with mode: 0644]
res/drawable-mdpi/ic_switch_camera_front_normal.png
res/drawable-mdpi/ic_timer_10s_disabled.png
res/drawable-mdpi/ic_timer_10s_indicator.png
res/drawable-mdpi/ic_timer_10s_normal.png
res/drawable-mdpi/ic_timer_3s_disabled.png
res/drawable-mdpi/ic_timer_3s_indicator.png
res/drawable-mdpi/ic_timer_3s_normal.png
res/drawable-mdpi/ic_timer_auto_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_timer_auto_indicator.png [new file with mode: 0644]
res/drawable-mdpi/ic_timer_auto_normal.png [new file with mode: 0644]
res/drawable-mdpi/ic_timer_off_disabled.png
res/drawable-mdpi/ic_timer_off_indicator.png
res/drawable-mdpi/ic_timer_off_normal.png
res/drawable-mdpi/ic_trash_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_trash_normal.png [new file with mode: 0644]
res/drawable-mdpi/ic_video_blanket.png [new file with mode: 0644]
res/drawable-mdpi/ic_video_disabled.png [new file with mode: 0644]
res/drawable-mdpi/ic_video_normal.png [new file with mode: 0644]
res/drawable-mdpi/stgs_cling.9.png [new file with mode: 0644]
res/drawable-mdpi/stgs_cling_pressed.9.png [new file with mode: 0644]
res/drawable-xhdpi/aspect_ratio_16x9_selected.jpg [new file with mode: 0644]
res/drawable-xhdpi/aspect_ratio_16x9_selected.png [deleted file]
res/drawable-xhdpi/aspect_ratio_16x9_unselected.jpg [new file with mode: 0644]
res/drawable-xhdpi/aspect_ratio_16x9_unselected.png [deleted file]
res/drawable-xhdpi/aspect_ratio_4x3_selected.jpg [new file with mode: 0644]
res/drawable-xhdpi/aspect_ratio_4x3_selected.png [deleted file]
res/drawable-xhdpi/aspect_ratio_4x3_unselected.jpg [new file with mode: 0644]
res/drawable-xhdpi/aspect_ratio_4x3_unselected.png [deleted file]
res/drawable-xhdpi/btn_cling.9.png
res/drawable-xhdpi/btn_cling_pressed.9.png
res/drawable-xhdpi/geo_opt_in_graphic.jpg [new file with mode: 0644]
res/drawable-xhdpi/geo_opt_in_graphic.png [deleted file]
res/drawable-xhdpi/ic_camera_blanket.png [new file with mode: 0644]
res/drawable-xhdpi/ic_camera_disabled.png
res/drawable-xhdpi/ic_camera_normal.png [new file with mode: 0644]
res/drawable-xhdpi/ic_capture_camera_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_capture_camera_normal.png [new file with mode: 0644]
res/drawable-xhdpi/ic_capture_video.png [new file with mode: 0644]
res/drawable-xhdpi/ic_capture_video_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_discard_disabled.png [deleted file]
res/drawable-xhdpi/ic_discard_normal.png [deleted file]
res/drawable-xhdpi/ic_done_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_done_normal.png [new file with mode: 0644]
res/drawable-xhdpi/ic_edit_disabled.png
res/drawable-xhdpi/ic_edit_normal.png
res/drawable-xhdpi/ic_exposure_0.png
res/drawable-xhdpi/ic_exposure_0_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_0_indicator.png
res/drawable-xhdpi/ic_exposure_disabled.png
res/drawable-xhdpi/ic_exposure_indicator.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_n1.png
res/drawable-xhdpi/ic_exposure_n1_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_n1_indicator.png
res/drawable-xhdpi/ic_exposure_n2.png
res/drawable-xhdpi/ic_exposure_n2_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_n2_indicator.png
res/drawable-xhdpi/ic_exposure_normal.png
res/drawable-xhdpi/ic_exposure_p1.png
res/drawable-xhdpi/ic_exposure_p1_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_p1_indicator.png
res/drawable-xhdpi/ic_exposure_p2.png
res/drawable-xhdpi/ic_exposure_p2_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_exposure_p2_indicator.png
res/drawable-xhdpi/ic_flash_auto_disabled.png
res/drawable-xhdpi/ic_flash_auto_indicator.png
res/drawable-xhdpi/ic_flash_auto_normal.png
res/drawable-xhdpi/ic_flash_off_disabled.png
res/drawable-xhdpi/ic_flash_off_indicator.png
res/drawable-xhdpi/ic_flash_off_normal.png
res/drawable-xhdpi/ic_flash_on_disabled.png
res/drawable-xhdpi/ic_flash_on_indicator.png
res/drawable-xhdpi/ic_flash_on_normal.png
res/drawable-xhdpi/ic_grid_off_disabled.png
res/drawable-xhdpi/ic_grid_off_indicator.png
res/drawable-xhdpi/ic_grid_off_normal.png
res/drawable-xhdpi/ic_grid_on_disabled.png
res/drawable-xhdpi/ic_grid_on_indicator.png
res/drawable-xhdpi/ic_grid_on_normal.png
res/drawable-xhdpi/ic_hdr_off_disabled.png
res/drawable-xhdpi/ic_hdr_off_indicator.png
res/drawable-xhdpi/ic_hdr_off_normal.png
res/drawable-xhdpi/ic_hdr_on_disabled.png
res/drawable-xhdpi/ic_hdr_on_indicator.png
res/drawable-xhdpi/ic_hdr_on_normal.png
res/drawable-xhdpi/ic_hdr_plus_off_disabled.png
res/drawable-xhdpi/ic_hdr_plus_off_indicator.png
res/drawable-xhdpi/ic_hdr_plus_off_normal.png
res/drawable-xhdpi/ic_hdr_plus_on_disabled.png
res/drawable-xhdpi/ic_hdr_plus_on_indicator.png
res/drawable-xhdpi/ic_hdr_plus_on_normal.png
res/drawable-xhdpi/ic_panorama_disabled.png [deleted file]
res/drawable-xhdpi/ic_photo_sphere_disabled.png [deleted file]
res/drawable-xhdpi/ic_refocus_disabled.png [deleted file]
res/drawable-xhdpi/ic_share_disabled.png
res/drawable-xhdpi/ic_share_normal.png
res/drawable-xhdpi/ic_switch_camera_back_disabled.png
res/drawable-xhdpi/ic_switch_camera_back_indicator.png [new file with mode: 0644]
res/drawable-xhdpi/ic_switch_camera_back_normal.png
res/drawable-xhdpi/ic_switch_camera_front_disabled.png
res/drawable-xhdpi/ic_switch_camera_front_indicator.png [new file with mode: 0644]
res/drawable-xhdpi/ic_switch_camera_front_normal.png
res/drawable-xhdpi/ic_timer_10s_disabled.png
res/drawable-xhdpi/ic_timer_10s_indicator.png
res/drawable-xhdpi/ic_timer_10s_normal.png
res/drawable-xhdpi/ic_timer_3s_disabled.png
res/drawable-xhdpi/ic_timer_3s_indicator.png
res/drawable-xhdpi/ic_timer_3s_normal.png
res/drawable-xhdpi/ic_timer_auto_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_timer_auto_indicator.png [new file with mode: 0644]
res/drawable-xhdpi/ic_timer_auto_normal.png [new file with mode: 0644]
res/drawable-xhdpi/ic_timer_off_disabled.png
res/drawable-xhdpi/ic_timer_off_indicator.png
res/drawable-xhdpi/ic_timer_off_normal.png
res/drawable-xhdpi/ic_trash_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_trash_normal.png [new file with mode: 0644]
res/drawable-xhdpi/ic_video_blanket.png [new file with mode: 0644]
res/drawable-xhdpi/ic_video_disabled.png [new file with mode: 0644]
res/drawable-xhdpi/ic_video_normal.png [new file with mode: 0644]
res/drawable-xhdpi/stgs_cling.9.png [new file with mode: 0644]
res/drawable-xhdpi/stgs_cling_pressed.9.png [new file with mode: 0644]
res/drawable-xxhdpi/aspect_ratio_16x9_selected.jpg [new file with mode: 0644]
res/drawable-xxhdpi/aspect_ratio_16x9_selected.png [deleted file]
res/drawable-xxhdpi/aspect_ratio_16x9_unselected.jpg [new file with mode: 0644]
res/drawable-xxhdpi/aspect_ratio_16x9_unselected.png [deleted file]
res/drawable-xxhdpi/aspect_ratio_4x3_selected.jpg [new file with mode: 0644]
res/drawable-xxhdpi/aspect_ratio_4x3_selected.png [deleted file]
res/drawable-xxhdpi/aspect_ratio_4x3_unselected.jpg [new file with mode: 0644]
res/drawable-xxhdpi/aspect_ratio_4x3_unselected.png [deleted file]
res/drawable-xxhdpi/btn_cling.9.png
res/drawable-xxhdpi/btn_cling_pressed.9.png
res/drawable-xxhdpi/geo_opt_in_graphic.jpg [new file with mode: 0644]
res/drawable-xxhdpi/geo_opt_in_graphic.png [deleted file]
res/drawable-xxhdpi/ic_camera_blanket.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_camera_disabled.png
res/drawable-xxhdpi/ic_camera_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_capture_camera_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_capture_camera_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_capture_video.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_capture_video_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_discard_disabled.png [deleted file]
res/drawable-xxhdpi/ic_discard_normal.png [deleted file]
res/drawable-xxhdpi/ic_done_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_done_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_edit_disabled.png
res/drawable-xxhdpi/ic_edit_normal.png
res/drawable-xxhdpi/ic_exposure_0.png
res/drawable-xxhdpi/ic_exposure_0_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_0_indicator.png
res/drawable-xxhdpi/ic_exposure_disabled.png
res/drawable-xxhdpi/ic_exposure_indicator.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_n1.png
res/drawable-xxhdpi/ic_exposure_n1_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_n1_indicator.png
res/drawable-xxhdpi/ic_exposure_n2.png
res/drawable-xxhdpi/ic_exposure_n2_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_n2_indicator.png
res/drawable-xxhdpi/ic_exposure_normal.png
res/drawable-xxhdpi/ic_exposure_p1.png
res/drawable-xxhdpi/ic_exposure_p1_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_p1_indicator.png
res/drawable-xxhdpi/ic_exposure_p2.png
res/drawable-xxhdpi/ic_exposure_p2_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_exposure_p2_indicator.png
res/drawable-xxhdpi/ic_flash_auto_disabled.png
res/drawable-xxhdpi/ic_flash_auto_indicator.png
res/drawable-xxhdpi/ic_flash_auto_normal.png
res/drawable-xxhdpi/ic_flash_off_disabled.png
res/drawable-xxhdpi/ic_flash_off_indicator.png
res/drawable-xxhdpi/ic_flash_off_normal.png
res/drawable-xxhdpi/ic_flash_on_disabled.png
res/drawable-xxhdpi/ic_flash_on_indicator.png
res/drawable-xxhdpi/ic_flash_on_normal.png
res/drawable-xxhdpi/ic_grid_off_disabled.png
res/drawable-xxhdpi/ic_grid_off_indicator.png
res/drawable-xxhdpi/ic_grid_off_normal.png
res/drawable-xxhdpi/ic_grid_on_disabled.png
res/drawable-xxhdpi/ic_grid_on_indicator.png
res/drawable-xxhdpi/ic_grid_on_normal.png
res/drawable-xxhdpi/ic_hdr_off_disabled.png
res/drawable-xxhdpi/ic_hdr_off_indicator.png
res/drawable-xxhdpi/ic_hdr_off_normal.png
res/drawable-xxhdpi/ic_hdr_on_disabled.png
res/drawable-xxhdpi/ic_hdr_on_indicator.png
res/drawable-xxhdpi/ic_hdr_on_normal.png
res/drawable-xxhdpi/ic_hdr_plus_off_disabled.png
res/drawable-xxhdpi/ic_hdr_plus_off_indicator.png
res/drawable-xxhdpi/ic_hdr_plus_off_normal.png
res/drawable-xxhdpi/ic_hdr_plus_on_disabled.png
res/drawable-xxhdpi/ic_hdr_plus_on_indicator.png
res/drawable-xxhdpi/ic_hdr_plus_on_normal.png
res/drawable-xxhdpi/ic_panorama_disabled.png [deleted file]
res/drawable-xxhdpi/ic_photo_sphere_disabled.png [deleted file]
res/drawable-xxhdpi/ic_refocus_disabled.png
res/drawable-xxhdpi/ic_refocus_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_share_disabled.png
res/drawable-xxhdpi/ic_share_normal.png
res/drawable-xxhdpi/ic_switch_camera_back_disabled.png
res/drawable-xxhdpi/ic_switch_camera_back_indicator.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_switch_camera_back_normal.png
res/drawable-xxhdpi/ic_switch_camera_front_disabled.png
res/drawable-xxhdpi/ic_switch_camera_front_indicator.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_switch_camera_front_normal.png
res/drawable-xxhdpi/ic_timer_10s_disabled.png
res/drawable-xxhdpi/ic_timer_10s_indicator.png
res/drawable-xxhdpi/ic_timer_10s_normal.png
res/drawable-xxhdpi/ic_timer_3s_disabled.png
res/drawable-xxhdpi/ic_timer_3s_indicator.png
res/drawable-xxhdpi/ic_timer_3s_normal.png
res/drawable-xxhdpi/ic_timer_auto_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_timer_auto_indicator.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_timer_auto_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_timer_off_disabled.png
res/drawable-xxhdpi/ic_timer_off_indicator.png
res/drawable-xxhdpi/ic_timer_off_normal.png
res/drawable-xxhdpi/ic_trash_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_trash_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_video_blanket.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_video_disabled.png [new file with mode: 0644]
res/drawable-xxhdpi/ic_video_normal.png [new file with mode: 0644]
res/drawable-xxhdpi/stgs_cling.9.png [new file with mode: 0644]
res/drawable-xxhdpi/stgs_cling_pressed.9.png [new file with mode: 0644]
res/drawable-xxxhdpi/aspect_ratio_16x9_selected.jpg [new file with mode: 0644]
res/drawable-xxxhdpi/aspect_ratio_16x9_unselected.jpg [new file with mode: 0644]
res/drawable-xxxhdpi/aspect_ratio_4x3_selected.jpg [new file with mode: 0644]
res/drawable-xxxhdpi/aspect_ratio_4x3_unselected.jpg [new file with mode: 0644]
res/drawable-xxxhdpi/btn_cling.9.png [new file with mode: 0644]
res/drawable-xxxhdpi/btn_cling_pressed.9.png [new file with mode: 0644]
res/drawable-xxxhdpi/geo_opt_in_graphic.jpg [new file with mode: 0644]
res/drawable-xxxhdpi/ic_camera_blanket.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_camera_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_camera_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_camera_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_camera_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_pano.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_pano_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_refocus.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_refocus_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_video.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_capture_video_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_edit_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_edit_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_0.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_0_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_0_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n1.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n1_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n1_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n2.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n2_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_n2_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p1.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p1_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p1_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p2.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p2_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_exposure_p2_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_auto_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_auto_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_auto_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_off_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_off_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_off_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_on_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_on_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_flash_on_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_off_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_off_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_off_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_on_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_on_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_grid_on_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_off_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_off_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_off_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_on_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_on_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_on_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_off_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_off_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_off_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_on_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_on_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_hdr_plus_on_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_share_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_share_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_back_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_back_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_back_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_front_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_front_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_switch_camera_front_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_10s_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_10s_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_10s_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_3s_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_3s_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_3s_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_auto_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_auto_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_auto_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_off_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_off_indicator.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_timer_off_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_trash_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_trash_normal.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_video_blanket.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_video_disabled.png [new file with mode: 0644]
res/drawable-xxxhdpi/ic_video_normal.png [new file with mode: 0644]
res/drawable/ic_camera.xml [moved from res_p/drawable/ic_camera.xml with 100% similarity]
res/drawable/ic_capture_camera.xml [new file with mode: 0644]
res/drawable/ic_capture_panorama.xml [new file with mode: 0644]
res/drawable/ic_capture_refocus.xml [new file with mode: 0644]
res/drawable/ic_capture_video.xml [new file with mode: 0644]
res/drawable/ic_menu_trash.xml
res/drawable/ic_refocus.xml [moved from res_p/drawable/ic_refocus.xml with 100% similarity]
res/drawable/ic_share.xml [moved from res/drawable/ic_menu_share.xml with 63% similarity]
res/drawable/settings_cling.xml [new file with mode: 0644]
res/layout-land-v21/retake_done_cancel_layout.xml
res/layout-land/aspect_ratio_dialog_content.xml
res/layout-land/location_dialog_content.xml
res/layout-land/on_screen_hint.xml
res/layout-land/retake_done_cancel_layout.xml
res/layout-port-v21/retake_done_cancel_layout.xml
res/layout-port/aspect_ratio_dialog_content.xml
res/layout-port/location_dialog_content.xml
res/layout-port/on_screen_hint.xml
res/layout-port/retake_done_cancel_layout.xml
res/layout/camera.xml
res/layout/camera_filmstrip.xml
res/layout/capture_module.xml
res/layout/filmstrip_bottom_controls.xml
res/layout/photo_module.xml
res/layout/settings_cling.xml
res/raw/beep_once.ogg [deleted file]
res/raw/beep_twice.ogg [deleted file]
res/raw/shutter.ogg [new file with mode: 0644]
res/raw/staged_shot_complete.ogg [new file with mode: 0644]
res/raw/timer_final_second.ogg [new file with mode: 0644]
res/raw/timer_increment.ogg [new file with mode: 0644]
res/values-af/strings.xml
res/values-am/strings.xml
res/values-ar/strings.xml
res/values-bg/strings.xml
res/values-bn-rBD/strings.xml [new file with mode: 0644]
res/values-ca/strings.xml
res/values-cs/strings.xml
res/values-da/strings.xml
res/values-de/strings.xml
res/values-el/strings.xml
res/values-en-rAU/strings.xml [new file with mode: 0644]
res/values-en-rGB/strings.xml
res/values-en-rIN/strings.xml
res/values-es-rUS/strings.xml
res/values-es/strings.xml
res/values-et-rEE/strings.xml
res/values-eu-rES/strings.xml [new file with mode: 0644]
res/values-fa/strings.xml
res/values-fi/strings.xml
res/values-fr-rCA/strings.xml
res/values-fr/strings.xml
res/values-gl-rES/strings.xml [new file with mode: 0644]
res/values-gu-rIN/strings.xml [new file with mode: 0644]
res/values-hi/strings.xml
res/values-hr/strings.xml
res/values-hu/strings.xml
res/values-hy-rAM/strings.xml
res/values-in/strings.xml
res/values-is-rIS/strings.xml [new file with mode: 0644]
res/values-it/strings.xml
res/values-iw/strings.xml
res/values-ja/strings.xml
res/values-ka-rGE/strings.xml
res/values-kk-rKZ/strings.xml [new file with mode: 0644]
res/values-km-rKH/strings.xml
res/values-kn-rIN/strings.xml [new file with mode: 0644]
res/values-ko/strings.xml
res/values-ky-rKG/strings.xml [new file with mode: 0644]
res/values-lo-rLA/strings.xml
res/values-lt/strings.xml
res/values-lv/strings.xml
res/values-mk-rMK/strings.xml [new file with mode: 0644]
res/values-ml-rIN/strings.xml [new file with mode: 0644]
res/values-mn-rMN/strings.xml
res/values-mr-rIN/strings.xml [new file with mode: 0644]
res/values-ms-rMY/strings.xml
res/values-my-rMM/strings.xml [new file with mode: 0644]
res/values-nb/strings.xml
res/values-ne-rNP/strings.xml [new file with mode: 0644]
res/values-nl/strings.xml
res/values-pa-rIN/strings.xml [new file with mode: 0644]
res/values-pl/strings.xml
res/values-pt-rPT/strings.xml
res/values-pt/strings.xml
res/values-ro/strings.xml
res/values-ru/strings.xml
res/values-si-rLK/strings.xml [new file with mode: 0644]
res/values-sk/strings.xml
res/values-sl/strings.xml
res/values-sq-rAL/strings.xml [new file with mode: 0644]
res/values-sr/strings.xml
res/values-sv/strings.xml
res/values-sw/strings.xml
res/values-ta-rIN/strings.xml [new file with mode: 0644]
res/values-te-rIN/strings.xml [new file with mode: 0644]
res/values-th/strings.xml
res/values-tl/strings.xml
res/values-tr/strings.xml
res/values-uk/strings.xml
res/values-ur-rPK/strings.xml [new file with mode: 0644]
res/values-uz-rUZ/strings.xml [new file with mode: 0644]
res/values-v21/styles.xml
res/values-vi/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rHK/strings.xml
res/values-zh-rTW/strings.xml
res/values-zu/strings.xml
res/values/arrays.xml
res/values/bool.xml
res/values/colors.xml
res/values/dimens.xml
res/values/styles.xml
res_p/drawable-hdpi/ic_camera_blanket.png [deleted file]
res_p/drawable-hdpi/ic_camera_normal.png [deleted file]
res_p/drawable-hdpi/ic_pano_blanket.png
res_p/drawable-hdpi/ic_panorama_disabled.png [new file with mode: 0644]
res_p/drawable-hdpi/ic_photo_sphere_blanket.png [deleted file]
res_p/drawable-hdpi/ic_photosphere_blanket.png [new file with mode: 0644]
res_p/drawable-hdpi/ic_photosphere_disabled.png [moved from res_p/drawable-hdpi/ic_photo_sphere_normal.png with 100% similarity]
res_p/drawable-hdpi/ic_photosphere_normal.png [new file with mode: 0644]
res_p/drawable-hdpi/ic_refocus_blanket.png
res_p/drawable-hdpi/ic_refocus_disabled.png [new file with mode: 0644]
res_p/drawable-hdpi/ic_video_blanket.png [deleted file]
res_p/drawable-hdpi/ic_video_disabled.png [deleted file]
res_p/drawable-hdpi/ic_video_normal.png [deleted file]
res_p/drawable-mdpi/ic_camera_blanket.png [deleted file]
res_p/drawable-mdpi/ic_camera_normal.png [deleted file]
res_p/drawable-mdpi/ic_pano_blanket.png
res_p/drawable-mdpi/ic_panorama_disabled.png [new file with mode: 0644]
res_p/drawable-mdpi/ic_photo_sphere_blanket.png [deleted file]
res_p/drawable-mdpi/ic_photosphere_blanket.png [new file with mode: 0644]
res_p/drawable-mdpi/ic_photosphere_disabled.png [moved from res_p/drawable-mdpi/ic_photo_sphere_normal.png with 100% similarity]
res_p/drawable-mdpi/ic_photosphere_normal.png [new file with mode: 0644]
res_p/drawable-mdpi/ic_refocus_blanket.png
res_p/drawable-mdpi/ic_refocus_disabled.png [new file with mode: 0644]
res_p/drawable-mdpi/ic_video_blanket.png [deleted file]
res_p/drawable-mdpi/ic_video_disabled.png [deleted file]
res_p/drawable-mdpi/ic_video_normal.png [deleted file]
res_p/drawable-xhdpi/ic_camera_blanket.png [deleted file]
res_p/drawable-xhdpi/ic_camera_normal.png [deleted file]
res_p/drawable-xhdpi/ic_pano_blanket.png
res_p/drawable-xhdpi/ic_panorama_disabled.png [new file with mode: 0644]
res_p/drawable-xhdpi/ic_photo_sphere_blanket.png [deleted file]
res_p/drawable-xhdpi/ic_photosphere_blanket.png [new file with mode: 0644]
res_p/drawable-xhdpi/ic_photosphere_disabled.png [moved from res_p/drawable-xhdpi/ic_photo_sphere_normal.png with 100% similarity]
res_p/drawable-xhdpi/ic_photosphere_normal.png [new file with mode: 0644]
res_p/drawable-xhdpi/ic_refocus_blanket.png
res_p/drawable-xhdpi/ic_refocus_disabled.png [new file with mode: 0644]
res_p/drawable-xhdpi/ic_video_blanket.png [deleted file]
res_p/drawable-xhdpi/ic_video_disabled.png [deleted file]
res_p/drawable-xhdpi/ic_video_normal.png [deleted file]
res_p/drawable-xxhdpi/ic_camera_blanket.png [deleted file]
res_p/drawable-xxhdpi/ic_camera_normal.png [deleted file]
res_p/drawable-xxhdpi/ic_pano_blanket.png
res_p/drawable-xxhdpi/ic_panorama_disabled.png [new file with mode: 0644]
res_p/drawable-xxhdpi/ic_photo_sphere_blanket.png [deleted file]
res_p/drawable-xxhdpi/ic_photosphere_blanket.png [new file with mode: 0644]
res_p/drawable-xxhdpi/ic_photosphere_disabled.png [moved from res_p/drawable-xxhdpi/ic_photo_sphere_normal.png with 100% similarity]
res_p/drawable-xxhdpi/ic_photosphere_normal.png [new file with mode: 0644]
res_p/drawable-xxhdpi/ic_refocus_blanket.png
res_p/drawable-xxhdpi/ic_refocus_disabled.png [new file with mode: 0644]
res_p/drawable-xxhdpi/ic_video_blanket.png [deleted file]
res_p/drawable-xxhdpi/ic_video_disabled.png [deleted file]
res_p/drawable-xxhdpi/ic_video_normal.png [deleted file]
res_p/mipmap-hdpi/logo_camera_color_44in48dp.png [moved from res_p/drawable-hdpi/logo_camera_color_44in48dp.png with 100% similarity]
res_p/mipmap-mdpi/logo_camera_color_44in48dp.png [moved from res_p/drawable-mdpi/logo_camera_color_44in48dp.png with 100% similarity]
res_p/mipmap-xhdpi/logo_camera_color_44in48dp.png [moved from res_p/drawable-xhdpi/logo_camera_color_44in48dp.png with 100% similarity]
res_p/mipmap-xxhdpi/logo_camera_color_44in48dp.png [moved from res_p/drawable-xxhdpi/logo_camera_color_44in48dp.png with 100% similarity]
res_p/mipmap-xxxhdpi/logo_camera_color_44in48dp.png [moved from res_p/drawable-xxxhdpi/logo_camera_color_44in48dp.png with 100% similarity]
res_p/values/strings.xml [moved from res/values-v21/bool.xml with 69% similarity]
sounds/shutter.wav [new file with mode: 0644]
sounds/staged_shot_complete.wav [new file with mode: 0644]
sounds/timer_final_second.wav [new file with mode: 0644]
sounds/timer_increment.wav [new file with mode: 0644]
src/android/util/CameraPerformanceTracker.java
src/com/android/camera/ButtonManager.java
src/com/android/camera/CameraActivity.java
src/com/android/camera/CameraErrorCallback.java [deleted file]
src/com/android/camera/CaptureActivity.java [new file with mode: 0644]
src/com/android/camera/CaptureModule.java
src/com/android/camera/CaptureModuleUI.java
src/com/android/camera/CaptureModuleUtil.java
src/com/android/camera/FocusOverlayManager.java
src/com/android/camera/MultiToggleImageButton.java
src/com/android/camera/OnScreenHint.java
src/com/android/camera/PhotoController.java
src/com/android/camera/PhotoModule.java
src/com/android/camera/PhotoUI.java
src/com/android/camera/PreviewGestures.java [deleted file]
src/com/android/camera/SoundClips.java
src/com/android/camera/SoundPlayer.java [new file with mode: 0644]
src/com/android/camera/SurfaceTextureRenderer.java
src/com/android/camera/TextureViewHelper.java
src/com/android/camera/VideoController.java
src/com/android/camera/VideoModule.java
src/com/android/camera/VideoUI.java
src/com/android/camera/app/AppController.java
src/com/android/camera/app/CameraAppUI.java
src/com/android/camera/app/CameraController.java
src/com/android/camera/app/CameraProvider.java
src/com/android/camera/app/FilmstripBottomPanel.java
src/com/android/camera/app/OrientationManagerImpl.java
src/com/android/camera/data/CameraDataAdapter.java
src/com/android/camera/data/FixedFirstDataAdapter.java
src/com/android/camera/data/FixedLastDataAdapter.java
src/com/android/camera/data/LocalData.java
src/com/android/camera/data/LocalDataUtil.java
src/com/android/camera/data/LocalMediaData.java
src/com/android/camera/data/LocalSessionData.java
src/com/android/camera/data/SimpleViewData.java
src/com/android/camera/debug/DebugCameraProxy.java
src/com/android/camera/debug/DebugPropertyHelper.java
src/com/android/camera/debug/Log.java
src/com/android/camera/filmstrip/DataAdapter.java
src/com/android/camera/module/ModulesInfo.java
src/com/android/camera/one/AbstractOneCamera.java
src/com/android/camera/one/OneCamera.java
src/com/android/camera/one/OneCameraException.java [new file with mode: 0644]
src/com/android/camera/one/OneCameraManager.java
src/com/android/camera/one/Settings3A.java [new file with mode: 0644]
src/com/android/camera/one/v1/OneCameraManagerImpl.java
src/com/android/camera/one/v2/AutoFocusHelper.java
src/com/android/camera/one/v2/ImageCaptureManager.java [new file with mode: 0644]
src/com/android/camera/one/v2/OneCameraImpl.java
src/com/android/camera/one/v2/OneCameraManagerImpl.java
src/com/android/camera/one/v2/OneCameraZslImpl.java [new file with mode: 0644]
src/com/android/camera/settings/AppUpgrader.java
src/com/android/camera/settings/CameraSettingsActivity.java
src/com/android/camera/settings/Keys.java
src/com/android/camera/settings/SettingsManager.java
src/com/android/camera/settings/SettingsUpgrader.java
src/com/android/camera/settings/SettingsUtil.java
src/com/android/camera/ui/BottomBar.java
src/com/android/camera/ui/CaptureAnimationOverlay.java
src/com/android/camera/ui/FaceView.java
src/com/android/camera/ui/FocusOverlay.java
src/com/android/camera/ui/ModeIconView.java
src/com/android/camera/ui/ModeListView.java
src/com/android/camera/ui/ModeSelectorItem.java
src/com/android/camera/ui/OverlayRenderer.java [deleted file]
src/com/android/camera/ui/PieItem.java [deleted file]
src/com/android/camera/ui/PieMenuButton.java [deleted file]
src/com/android/camera/ui/PieRenderer.java [deleted file]
src/com/android/camera/ui/PreviewOverlay.java
src/com/android/camera/ui/RenderOverlay.java [deleted file]
src/com/android/camera/ui/ZoomRenderer.java [deleted file]
src/com/android/camera/ui/ZoomView.java
src/com/android/camera/util/ApiHelper.java
src/com/android/camera/util/CameraUtil.java
src/com/android/camera/util/ConcurrentSharedRingBuffer.java [new file with mode: 0644]
src/com/android/camera/util/ConjunctionListenerMux.java [new file with mode: 0644]
src/com/android/camera/util/IntentHelper.java
src/com/android/camera/util/QuickActivity.java [new file with mode: 0644]
src/com/android/camera/util/Size.java
src/com/android/camera/util/Task.java [moved from src_pd/com/android/camera/util/FeedbackHelper.java with 64% similarity]
src/com/android/camera/widget/Cling.java
src/com/android/camera/widget/ExternalViewerButton.java
src/com/android/camera/widget/FilmstripLayout.java
src/com/android/camera/widget/FilmstripView.java
src/com/android/camera/widget/IndicatorIconController.java
src/com/android/camera/widget/VideoRecordingHints.java
src_pd/com/android/camera/one/v2/OneCameraCreator.java
src_pd/com/android/camera/util/GalleryHelper.java
src_pd/com/android/camera/util/ReleaseHelper.java [moved from src_pd/com/android/camera/util/ReleaseDialogHelper.java with 91% similarity]
src_pd/com/android/camera/util/UsageStatistics.java
src_pd/com/google/common/logging/eventprotos.java
src_pd_gcam/com/android/camera/util/GcamHelper.java
tests/src/com/android/camera/stress/CameraLatency.java

index 8a50335..c592046 100644 (file)
@@ -24,6 +24,10 @@ LOCAL_AAPT_FLAGS := \
         --version-name "$(version_name_package)" \
         --version-code $(version_code_package) \
 
+# Indirect dependency on apache due to glide, which pulls in
+# volley.
+LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
+
 LOCAL_PACKAGE_NAME := Camera2
 
 LOCAL_SDK_VERSION := current
index 435c48e..3ed1571 100644 (file)
     <application
         android:name="com.android.camera.app.CameraApp"
         android:hardwareAccelerated="true"
-        android:icon="@drawable/logo_camera_color_44in48dp"
+        android:icon="@mipmap/logo_camera_color_44in48dp"
         android:label="@string/app_name"
         android:largeHeap="true"
         android:restoreAnyVersion="true"
         android:supportsRtl="true"
-        android:theme="@style/Theme.Camera" >
+        android:theme="@style/Theme.Camera"
+        android:usesCleartextTraffic="false" >
         <activity
             android:name="com.android.camera.CameraActivity"
             android:clearTaskOnLaunch="true"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:label="@string/app_name"
+            android:launchMode="singleTask"
             android:taskAffinity="com.android.camera.CameraActivity"
             android:theme="@style/Theme.Camera"
             android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
             <intent-filter>
-                <action android:name="android.media.action.IMAGE_CAPTURE" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
                 <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             </intent-filter>
         </activity-alias>
 
+        <activity
+            android:name="com.android.camera.CaptureActivity"
+            android:label="@string/app_name"
+            android:theme="@style/Theme.Camera"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
+            <intent-filter>
+                <action android:name="android.media.action.IMAGE_CAPTURE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <!-- Video camera and capture use the Camcorder label and icon. -->
         <activity-alias
             android:name="com.android.camera.VideoCamera"
             android:label="@string/video_camera_label"
-            android:targetActivity="com.android.camera.CameraActivity">
+            android:targetActivity="com.android.camera.CaptureActivity">
             <intent-filter>
                 <action android:name="android.media.action.VIDEO_CAMERA" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable-anydpi-v21/ic_camera_blanket.xml b/res/drawable-anydpi-v21/ic_camera_blanket.xml
new file mode 100644 (file)
index 0000000..45fc29e
--- /dev/null
@@ -0,0 +1,27 @@
+<!--
+Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="64.0dp"
+        android:height="64.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF5a5b5e"
+        android:pathData="M24.0,24.0m-6.4,0.0a6.4,6.4 0.0,1.0 1.0,12.8 0.0a6.4,6.4 0.0,1.0 1.0,-12.8 0.0"/>
+    <path
+        android:fillColor="#FF5a5b5e"
+        android:pathData="M18.0,4.0l-3.66,4.0l-6.34,0.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,24.0c0.0,2.21 1.79,4.0 4.0,4.0l32.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0l0.0,-24.0c0.0,-2.21 -1.79,-4.0 -4.0,-4.0l-6.34,0.0l-3.66,-4.0l-12.0,0.0zm6.0,30.0c-5.52,0.0 -10.0,-4.48 -10.0,-10.0s4.48,-10.0 10.0,-10.0 10.0,4.48 10.0,10.0 -4.48,10.0 -10.0,10.0z"/>
+</vector>
diff --git a/res/drawable-hdpi/aspect_ratio_16x9_selected.jpg b/res/drawable-hdpi/aspect_ratio_16x9_selected.jpg
new file mode 100644 (file)
index 0000000..d87fe68
Binary files /dev/null and b/res/drawable-hdpi/aspect_ratio_16x9_selected.jpg differ
diff --git a/res/drawable-hdpi/aspect_ratio_16x9_selected.png b/res/drawable-hdpi/aspect_ratio_16x9_selected.png
deleted file mode 100644 (file)
index ffe8141..0000000
Binary files a/res/drawable-hdpi/aspect_ratio_16x9_selected.png and /dev/null differ
diff --git a/res/drawable-hdpi/aspect_ratio_16x9_unselected.jpg b/res/drawable-hdpi/aspect_ratio_16x9_unselected.jpg
new file mode 100644 (file)
index 0000000..0f48885
Binary files /dev/null and b/res/drawable-hdpi/aspect_ratio_16x9_unselected.jpg differ
diff --git a/res/drawable-hdpi/aspect_ratio_16x9_unselected.png b/res/drawable-hdpi/aspect_ratio_16x9_unselected.png
deleted file mode 100644 (file)
index b91d933..0000000
Binary files a/res/drawable-hdpi/aspect_ratio_16x9_unselected.png and /dev/null differ
diff --git a/res/drawable-hdpi/aspect_ratio_4x3_selected.jpg b/res/drawable-hdpi/aspect_ratio_4x3_selected.jpg
new file mode 100644 (file)
index 0000000..cbb6f10
Binary files /dev/null and b/res/drawable-hdpi/aspect_ratio_4x3_selected.jpg differ
diff --git a/res/drawable-hdpi/aspect_ratio_4x3_selected.png b/res/drawable-hdpi/aspect_ratio_4x3_selected.png
deleted file mode 100644 (file)
index 5a8e032..0000000
Binary files a/res/drawable-hdpi/aspect_ratio_4x3_selected.png and /dev/null differ
diff --git a/res/drawable-hdpi/aspect_ratio_4x3_unselected.jpg b/res/drawable-hdpi/aspect_ratio_4x3_unselected.jpg
new file mode 100644 (file)
index 0000000..3e477f8
Binary files /dev/null and b/res/drawable-hdpi/aspect_ratio_4x3_unselected.jpg differ
diff --git a/res/drawable-hdpi/aspect_ratio_4x3_unselected.png b/res/drawable-hdpi/aspect_ratio_4x3_unselected.png
deleted file mode 100644 (file)
index 849bc12..0000000
Binary files a/res/drawable-hdpi/aspect_ratio_4x3_unselected.png and /dev/null differ
index 5501632..96b7183 100644 (file)
Binary files a/res/drawable-hdpi/btn_cling.9.png and b/res/drawable-hdpi/btn_cling.9.png differ
index e9ae75b..a81a776 100644 (file)
Binary files a/res/drawable-hdpi/btn_cling_pressed.9.png and b/res/drawable-hdpi/btn_cling_pressed.9.png differ
diff --git a/res/drawable-hdpi/geo_opt_in_graphic.jpg b/res/drawable-hdpi/geo_opt_in_graphic.jpg
new file mode 100644 (file)
index 0000000..c7e04b4
Binary files /dev/null and b/res/drawable-hdpi/geo_opt_in_graphic.jpg differ
diff --git a/res/drawable-hdpi/geo_opt_in_graphic.png b/res/drawable-hdpi/geo_opt_in_graphic.png
deleted file mode 100644 (file)
index 3648610..0000000
Binary files a/res/drawable-hdpi/geo_opt_in_graphic.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_camera_blanket.png b/res/drawable-hdpi/ic_camera_blanket.png
new file mode 100644 (file)
index 0000000..c4e60e5
Binary files /dev/null and b/res/drawable-hdpi/ic_camera_blanket.png differ
index 2486cba..27ff92d 100644 (file)
Binary files a/res/drawable-hdpi/ic_camera_disabled.png and b/res/drawable-hdpi/ic_camera_disabled.png differ
diff --git a/res/drawable-hdpi/ic_camera_normal.png b/res/drawable-hdpi/ic_camera_normal.png
new file mode 100644 (file)
index 0000000..acacd5b
Binary files /dev/null and b/res/drawable-hdpi/ic_camera_normal.png differ
diff --git a/res/drawable-hdpi/ic_capture_camera_disabled.png b/res/drawable-hdpi/ic_capture_camera_disabled.png
new file mode 100644 (file)
index 0000000..4929c1d
Binary files /dev/null and b/res/drawable-hdpi/ic_capture_camera_disabled.png differ
diff --git a/res/drawable-hdpi/ic_capture_camera_normal.png b/res/drawable-hdpi/ic_capture_camera_normal.png
new file mode 100644 (file)
index 0000000..129cae8
Binary files /dev/null and b/res/drawable-hdpi/ic_capture_camera_normal.png differ
diff --git a/res/drawable-hdpi/ic_capture_video.png b/res/drawable-hdpi/ic_capture_video.png
new file mode 100644 (file)
index 0000000..dc3d026
Binary files /dev/null and b/res/drawable-hdpi/ic_capture_video.png differ
diff --git a/res/drawable-hdpi/ic_capture_video_disabled.png b/res/drawable-hdpi/ic_capture_video_disabled.png
new file mode 100644 (file)
index 0000000..e754896
Binary files /dev/null and b/res/drawable-hdpi/ic_capture_video_disabled.png differ
diff --git a/res/drawable-hdpi/ic_discard_disabled.png b/res/drawable-hdpi/ic_discard_disabled.png
deleted file mode 100644 (file)
index d6395d2..0000000
Binary files a/res/drawable-hdpi/ic_discard_disabled.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_discard_normal.png b/res/drawable-hdpi/ic_discard_normal.png
deleted file mode 100644 (file)
index 05ca6a7..0000000
Binary files a/res/drawable-hdpi/ic_discard_normal.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_done_disabled.png b/res/drawable-hdpi/ic_done_disabled.png
new file mode 100644 (file)
index 0000000..d074f90
Binary files /dev/null and b/res/drawable-hdpi/ic_done_disabled.png differ
diff --git a/res/drawable-hdpi/ic_done_normal.png b/res/drawable-hdpi/ic_done_normal.png
new file mode 100644 (file)
index 0000000..521a8ca
Binary files /dev/null and b/res/drawable-hdpi/ic_done_normal.png differ
index 02c8e97..1ca0eb4 100644 (file)
Binary files a/res/drawable-hdpi/ic_edit_disabled.png and b/res/drawable-hdpi/ic_edit_disabled.png differ
index 9eabda0..99e8562 100644 (file)
Binary files a/res/drawable-hdpi/ic_edit_normal.png and b/res/drawable-hdpi/ic_edit_normal.png differ
index 11b6495..d995d55 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_0.png and b/res/drawable-hdpi/ic_exposure_0.png differ
diff --git a/res/drawable-hdpi/ic_exposure_0_disabled.png b/res/drawable-hdpi/ic_exposure_0_disabled.png
new file mode 100644 (file)
index 0000000..5315aec
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_0_disabled.png differ
index 25f742d..bbf0d32 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_0_indicator.png and b/res/drawable-hdpi/ic_exposure_0_indicator.png differ
index fd4492d..afa3832 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_disabled.png and b/res/drawable-hdpi/ic_exposure_disabled.png differ
diff --git a/res/drawable-hdpi/ic_exposure_indicator.png b/res/drawable-hdpi/ic_exposure_indicator.png
new file mode 100644 (file)
index 0000000..4445049
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_indicator.png differ
index a0a0e7d..38ed7e5 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_n1.png and b/res/drawable-hdpi/ic_exposure_n1.png differ
diff --git a/res/drawable-hdpi/ic_exposure_n1_disabled.png b/res/drawable-hdpi/ic_exposure_n1_disabled.png
new file mode 100644 (file)
index 0000000..29d2cb5
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_n1_disabled.png differ
index baaef11..96bafc0 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_n1_indicator.png and b/res/drawable-hdpi/ic_exposure_n1_indicator.png differ
index 1416e0d..65204c9 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_n2.png and b/res/drawable-hdpi/ic_exposure_n2.png differ
diff --git a/res/drawable-hdpi/ic_exposure_n2_disabled.png b/res/drawable-hdpi/ic_exposure_n2_disabled.png
new file mode 100644 (file)
index 0000000..86e071e
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_n2_disabled.png differ
index dfb80d8..eae982d 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_n2_indicator.png and b/res/drawable-hdpi/ic_exposure_n2_indicator.png differ
index 8a4d2ac..fd8fce1 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_normal.png and b/res/drawable-hdpi/ic_exposure_normal.png differ
index dc9bcb0..3f17dc3 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_p1.png and b/res/drawable-hdpi/ic_exposure_p1.png differ
diff --git a/res/drawable-hdpi/ic_exposure_p1_disabled.png b/res/drawable-hdpi/ic_exposure_p1_disabled.png
new file mode 100644 (file)
index 0000000..2612043
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_p1_disabled.png differ
index 56e962d..399a165 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_p1_indicator.png and b/res/drawable-hdpi/ic_exposure_p1_indicator.png differ
index 9016dd5..0d68d60 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_p2.png and b/res/drawable-hdpi/ic_exposure_p2.png differ
diff --git a/res/drawable-hdpi/ic_exposure_p2_disabled.png b/res/drawable-hdpi/ic_exposure_p2_disabled.png
new file mode 100644 (file)
index 0000000..715cfa9
Binary files /dev/null and b/res/drawable-hdpi/ic_exposure_p2_disabled.png differ
index fa1ed9e..c09c910 100644 (file)
Binary files a/res/drawable-hdpi/ic_exposure_p2_indicator.png and b/res/drawable-hdpi/ic_exposure_p2_indicator.png differ
index f0ecb70..6248e70 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_auto_disabled.png and b/res/drawable-hdpi/ic_flash_auto_disabled.png differ
index d259231..0f433a9 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_auto_indicator.png and b/res/drawable-hdpi/ic_flash_auto_indicator.png differ
index 0c8a863..ba7f282 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_auto_normal.png and b/res/drawable-hdpi/ic_flash_auto_normal.png differ
index d007bb1..0473cf7 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_off_disabled.png and b/res/drawable-hdpi/ic_flash_off_disabled.png differ
index ff000db..4178584 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_off_indicator.png and b/res/drawable-hdpi/ic_flash_off_indicator.png differ
index 5630e71..d1201e7 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_off_normal.png and b/res/drawable-hdpi/ic_flash_off_normal.png differ
index 9304665..041db6a 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_on_disabled.png and b/res/drawable-hdpi/ic_flash_on_disabled.png differ
index f169e00..16be314 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_on_indicator.png and b/res/drawable-hdpi/ic_flash_on_indicator.png differ
index 926f386..5fc8881 100644 (file)
Binary files a/res/drawable-hdpi/ic_flash_on_normal.png and b/res/drawable-hdpi/ic_flash_on_normal.png differ
index 94c2800..3812d89 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_off_disabled.png and b/res/drawable-hdpi/ic_grid_off_disabled.png differ
index ba71a22..56795bd 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_off_indicator.png and b/res/drawable-hdpi/ic_grid_off_indicator.png differ
index c7b5bcd..5b15ec8 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_off_normal.png and b/res/drawable-hdpi/ic_grid_off_normal.png differ
index a2fc3d5..fd7b581 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_on_disabled.png and b/res/drawable-hdpi/ic_grid_on_disabled.png differ
index b7f3c69..18856ff 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_on_indicator.png and b/res/drawable-hdpi/ic_grid_on_indicator.png differ
index 921b876..499d5ec 100644 (file)
Binary files a/res/drawable-hdpi/ic_grid_on_normal.png and b/res/drawable-hdpi/ic_grid_on_normal.png differ
index 8cd4956..5943a63 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_off_disabled.png and b/res/drawable-hdpi/ic_hdr_off_disabled.png differ
index c1a0d6c..39298f9 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_off_indicator.png and b/res/drawable-hdpi/ic_hdr_off_indicator.png differ
index 06cb2c4..6d8d929 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_off_normal.png and b/res/drawable-hdpi/ic_hdr_off_normal.png differ
index 4ca8919..25af5b4 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_on_disabled.png and b/res/drawable-hdpi/ic_hdr_on_disabled.png differ
index f60ff7c..5e5d843 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_on_indicator.png and b/res/drawable-hdpi/ic_hdr_on_indicator.png differ
index d5c56e8..8f86f87 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_on_normal.png and b/res/drawable-hdpi/ic_hdr_on_normal.png differ
index db0ab25..9fb19a9 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_off_disabled.png and b/res/drawable-hdpi/ic_hdr_plus_off_disabled.png differ
index 39e9d06..812e59e 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_off_indicator.png and b/res/drawable-hdpi/ic_hdr_plus_off_indicator.png differ
index 51d073a..5f382b3 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_off_normal.png and b/res/drawable-hdpi/ic_hdr_plus_off_normal.png differ
index c286eef..eb5d520 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_on_disabled.png and b/res/drawable-hdpi/ic_hdr_plus_on_disabled.png differ
index 21c2350..1367edb 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_on_indicator.png and b/res/drawable-hdpi/ic_hdr_plus_on_indicator.png differ
index 8dfeadd..ed13752 100644 (file)
Binary files a/res/drawable-hdpi/ic_hdr_plus_on_normal.png and b/res/drawable-hdpi/ic_hdr_plus_on_normal.png differ
diff --git a/res/drawable-hdpi/ic_menu_trash_holo_light.png b/res/drawable-hdpi/ic_menu_trash_holo_light.png
deleted file mode 100644 (file)
index 721ee5c..0000000
Binary files a/res/drawable-hdpi/ic_menu_trash_holo_light.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_panorama_disabled.png b/res/drawable-hdpi/ic_panorama_disabled.png
deleted file mode 100644 (file)
index b074721..0000000
Binary files a/res/drawable-hdpi/ic_panorama_disabled.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_photo_sphere_disabled.png b/res/drawable-hdpi/ic_photo_sphere_disabled.png
deleted file mode 100644 (file)
index 01df5b9..0000000
Binary files a/res/drawable-hdpi/ic_photo_sphere_disabled.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_refocus_disabled.png b/res/drawable-hdpi/ic_refocus_disabled.png
deleted file mode 100644 (file)
index d3581b6..0000000
Binary files a/res/drawable-hdpi/ic_refocus_disabled.png and /dev/null differ
index 4645f65..587fe1b 100644 (file)
Binary files a/res/drawable-hdpi/ic_share_disabled.png and b/res/drawable-hdpi/ic_share_disabled.png differ
index a75ef1c..5a2efc0 100644 (file)
Binary files a/res/drawable-hdpi/ic_share_normal.png and b/res/drawable-hdpi/ic_share_normal.png differ
index 1de4c6f..d094c91 100644 (file)
Binary files a/res/drawable-hdpi/ic_switch_camera_back_disabled.png and b/res/drawable-hdpi/ic_switch_camera_back_disabled.png differ
diff --git a/res/drawable-hdpi/ic_switch_camera_back_indicator.png b/res/drawable-hdpi/ic_switch_camera_back_indicator.png
new file mode 100644 (file)
index 0000000..f27eb8d
Binary files /dev/null and b/res/drawable-hdpi/ic_switch_camera_back_indicator.png differ
index 5586c06..b4397f6 100644 (file)
Binary files a/res/drawable-hdpi/ic_switch_camera_back_normal.png and b/res/drawable-hdpi/ic_switch_camera_back_normal.png differ
index 114ab12..e43468d 100644 (file)
Binary files a/res/drawable-hdpi/ic_switch_camera_front_disabled.png and b/res/drawable-hdpi/ic_switch_camera_front_disabled.png differ
diff --git a/res/drawable-hdpi/ic_switch_camera_front_indicator.png b/res/drawable-hdpi/ic_switch_camera_front_indicator.png
new file mode 100644 (file)
index 0000000..af2bb29
Binary files /dev/null and b/res/drawable-hdpi/ic_switch_camera_front_indicator.png differ
index 3569dd5..913d071 100644 (file)
Binary files a/res/drawable-hdpi/ic_switch_camera_front_normal.png and b/res/drawable-hdpi/ic_switch_camera_front_normal.png differ
index 0f9d4a1..14c3e0c 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_10s_disabled.png and b/res/drawable-hdpi/ic_timer_10s_disabled.png differ
index 8bde7de..4aeea0d 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_10s_indicator.png and b/res/drawable-hdpi/ic_timer_10s_indicator.png differ
index 8478ac8..13abe9a 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_10s_normal.png and b/res/drawable-hdpi/ic_timer_10s_normal.png differ
index eaf9ffe..66c953f 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_3s_disabled.png and b/res/drawable-hdpi/ic_timer_3s_disabled.png differ
index f367d9a..ae354f0 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_3s_indicator.png and b/res/drawable-hdpi/ic_timer_3s_indicator.png differ
index e4b696d..29693a0 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_3s_normal.png and b/res/drawable-hdpi/ic_timer_3s_normal.png differ
diff --git a/res/drawable-hdpi/ic_timer_auto_disabled.png b/res/drawable-hdpi/ic_timer_auto_disabled.png
new file mode 100644 (file)
index 0000000..e9dd24e
Binary files /dev/null and b/res/drawable-hdpi/ic_timer_auto_disabled.png differ
diff --git a/res/drawable-hdpi/ic_timer_auto_indicator.png b/res/drawable-hdpi/ic_timer_auto_indicator.png
new file mode 100644 (file)
index 0000000..e9c370e
Binary files /dev/null and b/res/drawable-hdpi/ic_timer_auto_indicator.png differ
diff --git a/res/drawable-hdpi/ic_timer_auto_normal.png b/res/drawable-hdpi/ic_timer_auto_normal.png
new file mode 100644 (file)
index 0000000..58db51f
Binary files /dev/null and b/res/drawable-hdpi/ic_timer_auto_normal.png differ
index 713da5b..7cf7291 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_off_disabled.png and b/res/drawable-hdpi/ic_timer_off_disabled.png differ
index e3f08f6..178b5ec 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_off_indicator.png and b/res/drawable-hdpi/ic_timer_off_indicator.png differ
index 9f17862..1aeb878 100644 (file)
Binary files a/res/drawable-hdpi/ic_timer_off_normal.png and b/res/drawable-hdpi/ic_timer_off_normal.png differ
diff --git a/res/drawable-hdpi/ic_trash_disabled.png b/res/drawable-hdpi/ic_trash_disabled.png
new file mode 100644 (file)
index 0000000..941fc76
Binary files /dev/null and b/res/drawable-hdpi/ic_trash_disabled.png differ
diff --git a/res/drawable-hdpi/ic_trash_normal.png b/res/drawable-hdpi/ic_trash_normal.png
new file mode 100644 (file)
index 0000000..49d9ce0
Binary files /dev/null and b/res/drawable-hdpi/ic_trash_normal.png differ
diff --git a/res/drawable-hdpi/ic_video_blanket.png b/res/drawable-hdpi/ic_video_blanket.png
new file mode 100644 (file)
index 0000000..d6f2e46
Binary files /dev/null and b/res/drawable-hdpi/ic_video_blanket.png differ
diff --git a/res/drawable-hdpi/ic_video_disabled.png b/res/drawable-hdpi/ic_video_disabled.png
new file mode 100644 (file)
index 0000000..35817eb
Binary files /dev/null and b/res/drawable-hdpi/ic_video_disabled.png differ
diff --git a/res/drawable-hdpi/ic_video_normal.png b/res/drawable-hdpi/ic_video_normal.png
new file mode 100644 (file)
index 0000000..f7319b3
Binary files /dev/null and b/res/drawable-hdpi/ic_video_normal.png differ
diff --git a/res/drawable-hdpi/stgs_cling.9.png b/res/drawable-hdpi/stgs_cling.9.png
new file mode 100644 (file)
index 0000000..5501632
Binary files /dev/null and b/res/drawable-hdpi/stgs_cling.9.png differ
diff --git a/res/drawable-hdpi/stgs_cling_pressed.9.png b/res/drawable-hdpi/stgs_cling_pressed.9.png
new file mode 100644 (file)
index 0000000..e9ae75b
Binary files /dev/null and b/res/drawable-hdpi/stgs_cling_pressed.9.png differ
diff --git a/res/drawable-mdpi/aspect_ratio_16x9_selected.jpg b/res/drawable-mdpi/aspect_ratio_16x9_selected.jpg
new file mode 100644 (file)
index 0000000..ed5b996
Binary files /dev/null and b/res/drawable-mdpi/aspect_ratio_16x9_selected.jpg differ
diff --git a/res/drawable-mdpi/aspect_ratio_16x9_selected.png b/res/drawable-mdpi/aspect_ratio_16x9_selected.png
deleted file mode 100644 (file)
index 5f194a7..0000000
Binary files a/res/drawable-mdpi/aspect_ratio_16x9_selected.png and /dev/null differ
diff --git a/res/drawable-mdpi/aspect_ratio_16x9_unselected.jpg b/res/drawable-mdpi/aspect_ratio_16x9_unselected.jpg
new file mode 100644 (file)
index 0000000..ee5521e
Binary files /dev/null and b/res/drawable-mdpi/aspect_ratio_16x9_unselected.jpg differ
diff --git a/res/drawable-mdpi/aspect_ratio_16x9_unselected.png b/res/drawable-mdpi/aspect_ratio_16x9_unselected.png
deleted file mode 100644 (file)
index 533d2ad..0000000
Binary files a/res/drawable-mdpi/aspect_ratio_16x9_unselected.png and /dev/null differ
diff --git a/res/drawable-mdpi/aspect_ratio_4x3_selected.jpg b/res/drawable-mdpi/aspect_ratio_4x3_selected.jpg
new file mode 100644 (file)
index 0000000..4435bdd
Binary files /dev/null and b/res/drawable-mdpi/aspect_ratio_4x3_selected.jpg differ
diff --git a/res/drawable-mdpi/aspect_ratio_4x3_selected.png b/res/drawable-mdpi/aspect_ratio_4x3_selected.png
deleted file mode 100644 (file)
index b784de1..0000000
Binary files a/res/drawable-mdpi/aspect_ratio_4x3_selected.png and /dev/null differ
diff --git a/res/drawable-mdpi/aspect_ratio_4x3_unselected.jpg b/res/drawable-mdpi/aspect_ratio_4x3_unselected.jpg
new file mode 100644 (file)
index 0000000..8c6d898
Binary files /dev/null and b/res/drawable-mdpi/aspect_ratio_4x3_unselected.jpg differ
diff --git a/res/drawable-mdpi/aspect_ratio_4x3_unselected.png b/res/drawable-mdpi/aspect_ratio_4x3_unselected.png
deleted file mode 100644 (file)
index 29bfd60..0000000
Binary files a/res/drawable-mdpi/aspect_ratio_4x3_unselected.png and /dev/null differ
index b93d042..47355c0 100644 (file)
Binary files a/res/drawable-mdpi/btn_cling.9.png and b/res/drawable-mdpi/btn_cling.9.png differ
index f6e370b..dee7b22 100644 (file)
Binary files a/res/drawable-mdpi/btn_cling_pressed.9.png and b/res/drawable-mdpi/btn_cling_pressed.9.png differ
diff --git a/res/drawable-mdpi/geo_opt_in_graphic.jpg b/res/drawable-mdpi/geo_opt_in_graphic.jpg
new file mode 100644 (file)
index 0000000..c81900f
Binary files /dev/null and b/res/drawable-mdpi/geo_opt_in_graphic.jpg differ
diff --git a/res/drawable-mdpi/geo_opt_in_graphic.png b/res/drawable-mdpi/geo_opt_in_graphic.png
deleted file mode 100644 (file)
index d640d36..0000000
Binary files a/res/drawable-mdpi/geo_opt_in_graphic.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_camera_blanket.png b/res/drawable-mdpi/ic_camera_blanket.png
new file mode 100644 (file)
index 0000000..3fc6400
Binary files /dev/null and b/res/drawable-mdpi/ic_camera_blanket.png differ
index 9d569ed..d307df4 100644 (file)
Binary files a/res/drawable-mdpi/ic_camera_disabled.png and b/res/drawable-mdpi/ic_camera_disabled.png differ
diff --git a/res/drawable-mdpi/ic_camera_normal.png b/res/drawable-mdpi/ic_camera_normal.png
new file mode 100644 (file)
index 0000000..7186910
Binary files /dev/null and b/res/drawable-mdpi/ic_camera_normal.png differ
diff --git a/res/drawable-mdpi/ic_capture_camera_disabled.png b/res/drawable-mdpi/ic_capture_camera_disabled.png
new file mode 100644 (file)
index 0000000..b9da7f1
Binary files /dev/null and b/res/drawable-mdpi/ic_capture_camera_disabled.png differ
diff --git a/res/drawable-mdpi/ic_capture_camera_normal.png b/res/drawable-mdpi/ic_capture_camera_normal.png
new file mode 100644 (file)
index 0000000..4916318
Binary files /dev/null and b/res/drawable-mdpi/ic_capture_camera_normal.png differ
diff --git a/res/drawable-mdpi/ic_capture_video.png b/res/drawable-mdpi/ic_capture_video.png
new file mode 100644 (file)
index 0000000..b38059c
Binary files /dev/null and b/res/drawable-mdpi/ic_capture_video.png differ
diff --git a/res/drawable-mdpi/ic_capture_video_disabled.png b/res/drawable-mdpi/ic_capture_video_disabled.png
new file mode 100644 (file)
index 0000000..9c190f4
Binary files /dev/null and b/res/drawable-mdpi/ic_capture_video_disabled.png differ
diff --git a/res/drawable-mdpi/ic_discard_disabled.png b/res/drawable-mdpi/ic_discard_disabled.png
deleted file mode 100644 (file)
index 8138c5d..0000000
Binary files a/res/drawable-mdpi/ic_discard_disabled.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_discard_normal.png b/res/drawable-mdpi/ic_discard_normal.png
deleted file mode 100644 (file)
index dcbf991..0000000
Binary files a/res/drawable-mdpi/ic_discard_normal.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_done_disabled.png b/res/drawable-mdpi/ic_done_disabled.png
new file mode 100644 (file)
index 0000000..9cc6067
Binary files /dev/null and b/res/drawable-mdpi/ic_done_disabled.png differ
diff --git a/res/drawable-mdpi/ic_done_normal.png b/res/drawable-mdpi/ic_done_normal.png
new file mode 100644 (file)
index 0000000..107c988
Binary files /dev/null and b/res/drawable-mdpi/ic_done_normal.png differ
index 74c0774..28decdc 100644 (file)
Binary files a/res/drawable-mdpi/ic_edit_disabled.png and b/res/drawable-mdpi/ic_edit_disabled.png differ
index f9998b4..ac89d55 100644 (file)
Binary files a/res/drawable-mdpi/ic_edit_normal.png and b/res/drawable-mdpi/ic_edit_normal.png differ
index e1bb765..dcf425d 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_0.png and b/res/drawable-mdpi/ic_exposure_0.png differ
diff --git a/res/drawable-mdpi/ic_exposure_0_disabled.png b/res/drawable-mdpi/ic_exposure_0_disabled.png
new file mode 100644 (file)
index 0000000..df36173
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_0_disabled.png differ
index 661dace..992b4fb 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_0_indicator.png and b/res/drawable-mdpi/ic_exposure_0_indicator.png differ
index 67b80d3..6fc1f0a 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_disabled.png and b/res/drawable-mdpi/ic_exposure_disabled.png differ
diff --git a/res/drawable-mdpi/ic_exposure_indicator.png b/res/drawable-mdpi/ic_exposure_indicator.png
new file mode 100644 (file)
index 0000000..585e421
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_indicator.png differ
index 4191c6f..f317924 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_n1.png and b/res/drawable-mdpi/ic_exposure_n1.png differ
diff --git a/res/drawable-mdpi/ic_exposure_n1_disabled.png b/res/drawable-mdpi/ic_exposure_n1_disabled.png
new file mode 100644 (file)
index 0000000..457fb40
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_n1_disabled.png differ
index 957504c..9103504 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_n1_indicator.png and b/res/drawable-mdpi/ic_exposure_n1_indicator.png differ
index 19201ec..3070581 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_n2.png and b/res/drawable-mdpi/ic_exposure_n2.png differ
diff --git a/res/drawable-mdpi/ic_exposure_n2_disabled.png b/res/drawable-mdpi/ic_exposure_n2_disabled.png
new file mode 100644 (file)
index 0000000..1b2080a
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_n2_disabled.png differ
index 3da2d10..a363785 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_n2_indicator.png and b/res/drawable-mdpi/ic_exposure_n2_indicator.png differ
index e86708c..e3c5bfb 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_normal.png and b/res/drawable-mdpi/ic_exposure_normal.png differ
index a5f5b65..bfac952 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_p1.png and b/res/drawable-mdpi/ic_exposure_p1.png differ
diff --git a/res/drawable-mdpi/ic_exposure_p1_disabled.png b/res/drawable-mdpi/ic_exposure_p1_disabled.png
new file mode 100644 (file)
index 0000000..09f7cae
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_p1_disabled.png differ
index 6395aae..1f1280d 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_p1_indicator.png and b/res/drawable-mdpi/ic_exposure_p1_indicator.png differ
index 30c9eaf..e83b647 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_p2.png and b/res/drawable-mdpi/ic_exposure_p2.png differ
diff --git a/res/drawable-mdpi/ic_exposure_p2_disabled.png b/res/drawable-mdpi/ic_exposure_p2_disabled.png
new file mode 100644 (file)
index 0000000..5744602
Binary files /dev/null and b/res/drawable-mdpi/ic_exposure_p2_disabled.png differ
index ba8e2c2..4cfcd76 100644 (file)
Binary files a/res/drawable-mdpi/ic_exposure_p2_indicator.png and b/res/drawable-mdpi/ic_exposure_p2_indicator.png differ
index 084ee22..291ff01 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_auto_disabled.png and b/res/drawable-mdpi/ic_flash_auto_disabled.png differ
index 53838b8..bacb797 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_auto_indicator.png and b/res/drawable-mdpi/ic_flash_auto_indicator.png differ
index 5b071a3..44382de 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_auto_normal.png and b/res/drawable-mdpi/ic_flash_auto_normal.png differ
index 67bd6c6..f9b2859 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_off_disabled.png and b/res/drawable-mdpi/ic_flash_off_disabled.png differ
index 11876f8..7c418fe 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_off_indicator.png and b/res/drawable-mdpi/ic_flash_off_indicator.png differ
index ade4ec5..0af1bee 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_off_normal.png and b/res/drawable-mdpi/ic_flash_off_normal.png differ
index f935371..9403b7d 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_on_disabled.png and b/res/drawable-mdpi/ic_flash_on_disabled.png differ
index 9235c05..3e60150 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_on_indicator.png and b/res/drawable-mdpi/ic_flash_on_indicator.png differ
index e0545f2..080293c 100644 (file)
Binary files a/res/drawable-mdpi/ic_flash_on_normal.png and b/res/drawable-mdpi/ic_flash_on_normal.png differ
index a467a87..2008e02 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_off_disabled.png and b/res/drawable-mdpi/ic_grid_off_disabled.png differ
index d50c9c0..e85ec40 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_off_indicator.png and b/res/drawable-mdpi/ic_grid_off_indicator.png differ
index faf2ff8..b3b64ea 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_off_normal.png and b/res/drawable-mdpi/ic_grid_off_normal.png differ
index a3a336a..07898c2 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_on_disabled.png and b/res/drawable-mdpi/ic_grid_on_disabled.png differ
index 855d60d..15e3538 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_on_indicator.png and b/res/drawable-mdpi/ic_grid_on_indicator.png differ
index 970a7cd..e27b25c 100644 (file)
Binary files a/res/drawable-mdpi/ic_grid_on_normal.png and b/res/drawable-mdpi/ic_grid_on_normal.png differ
index 6305f34..eba6505 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_off_disabled.png and b/res/drawable-mdpi/ic_hdr_off_disabled.png differ
index 67ee5ce..0e3ea54 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_off_indicator.png and b/res/drawable-mdpi/ic_hdr_off_indicator.png differ
index 541002e..2abeaf0 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_off_normal.png and b/res/drawable-mdpi/ic_hdr_off_normal.png differ
index ee1a877..cae13eb 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_on_disabled.png and b/res/drawable-mdpi/ic_hdr_on_disabled.png differ
index 65c5846..afd5360 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_on_indicator.png and b/res/drawable-mdpi/ic_hdr_on_indicator.png differ
index c911e40..06987d9 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_on_normal.png and b/res/drawable-mdpi/ic_hdr_on_normal.png differ
index ca4f3d7..84fa735 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_off_disabled.png and b/res/drawable-mdpi/ic_hdr_plus_off_disabled.png differ
index 489240a..939419b 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_off_indicator.png and b/res/drawable-mdpi/ic_hdr_plus_off_indicator.png differ
index 9b82f20..a330bcf 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_off_normal.png and b/res/drawable-mdpi/ic_hdr_plus_off_normal.png differ
index 320b3ed..73e8f19 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_on_disabled.png and b/res/drawable-mdpi/ic_hdr_plus_on_disabled.png differ
index 1509bbf..9dce2d3 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_on_indicator.png and b/res/drawable-mdpi/ic_hdr_plus_on_indicator.png differ
index e891a3e..444e733 100644 (file)
Binary files a/res/drawable-mdpi/ic_hdr_plus_on_normal.png and b/res/drawable-mdpi/ic_hdr_plus_on_normal.png differ
diff --git a/res/drawable-mdpi/ic_menu_trash_holo_light.png b/res/drawable-mdpi/ic_menu_trash_holo_light.png
deleted file mode 100644 (file)
index f45540b..0000000
Binary files a/res/drawable-mdpi/ic_menu_trash_holo_light.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_panorama_disabled.png b/res/drawable-mdpi/ic_panorama_disabled.png
deleted file mode 100644 (file)
index 69f2ec4..0000000
Binary files a/res/drawable-mdpi/ic_panorama_disabled.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_refocus_disabled.png b/res/drawable-mdpi/ic_refocus_disabled.png
deleted file mode 100644 (file)
index 4fc346d..0000000
Binary files a/res/drawable-mdpi/ic_refocus_disabled.png and /dev/null differ
index 9bf1111..d410bc0 100644 (file)
Binary files a/res/drawable-mdpi/ic_share_disabled.png and b/res/drawable-mdpi/ic_share_disabled.png differ
index f7bb678..23d5d0d 100644 (file)
Binary files a/res/drawable-mdpi/ic_share_normal.png and b/res/drawable-mdpi/ic_share_normal.png differ
index 2835252..e3f5bb7 100644 (file)
Binary files a/res/drawable-mdpi/ic_switch_camera_back_disabled.png and b/res/drawable-mdpi/ic_switch_camera_back_disabled.png differ
diff --git a/res/drawable-mdpi/ic_switch_camera_back_indicator.png b/res/drawable-mdpi/ic_switch_camera_back_indicator.png
new file mode 100644 (file)
index 0000000..48c45e9
Binary files /dev/null and b/res/drawable-mdpi/ic_switch_camera_back_indicator.png differ
index 627e890..98893ab 100644 (file)
Binary files a/res/drawable-mdpi/ic_switch_camera_back_normal.png and b/res/drawable-mdpi/ic_switch_camera_back_normal.png differ
index 421cc28..d71e880 100644 (file)
Binary files a/res/drawable-mdpi/ic_switch_camera_front_disabled.png and b/res/drawable-mdpi/ic_switch_camera_front_disabled.png differ
diff --git a/res/drawable-mdpi/ic_switch_camera_front_indicator.png b/res/drawable-mdpi/ic_switch_camera_front_indicator.png
new file mode 100644 (file)
index 0000000..6e9dbb7
Binary files /dev/null and b/res/drawable-mdpi/ic_switch_camera_front_indicator.png differ
index fe6f789..10560d0 100644 (file)
Binary files a/res/drawable-mdpi/ic_switch_camera_front_normal.png and b/res/drawable-mdpi/ic_switch_camera_front_normal.png differ
index 6ce9564..538ea39 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_10s_disabled.png and b/res/drawable-mdpi/ic_timer_10s_disabled.png differ
index 2bbf6f3..3216283 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_10s_indicator.png and b/res/drawable-mdpi/ic_timer_10s_indicator.png differ
index 3d06ee4..1880878 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_10s_normal.png and b/res/drawable-mdpi/ic_timer_10s_normal.png differ
index 372a1b1..954e68f 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_3s_disabled.png and b/res/drawable-mdpi/ic_timer_3s_disabled.png differ
index db5c4ce..d713094 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_3s_indicator.png and b/res/drawable-mdpi/ic_timer_3s_indicator.png differ
index d9e083e..c5e548f 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_3s_normal.png and b/res/drawable-mdpi/ic_timer_3s_normal.png differ
diff --git a/res/drawable-mdpi/ic_timer_auto_disabled.png b/res/drawable-mdpi/ic_timer_auto_disabled.png
new file mode 100644 (file)
index 0000000..5a23bf6
Binary files /dev/null and b/res/drawable-mdpi/ic_timer_auto_disabled.png differ
diff --git a/res/drawable-mdpi/ic_timer_auto_indicator.png b/res/drawable-mdpi/ic_timer_auto_indicator.png
new file mode 100644 (file)
index 0000000..8f60aa9
Binary files /dev/null and b/res/drawable-mdpi/ic_timer_auto_indicator.png differ
diff --git a/res/drawable-mdpi/ic_timer_auto_normal.png b/res/drawable-mdpi/ic_timer_auto_normal.png
new file mode 100644 (file)
index 0000000..cea9daf
Binary files /dev/null and b/res/drawable-mdpi/ic_timer_auto_normal.png differ
index 0463282..176545a 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_off_disabled.png and b/res/drawable-mdpi/ic_timer_off_disabled.png differ
index 9780cc5..3b028c1 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_off_indicator.png and b/res/drawable-mdpi/ic_timer_off_indicator.png differ
index ad66d90..f43b799 100644 (file)
Binary files a/res/drawable-mdpi/ic_timer_off_normal.png and b/res/drawable-mdpi/ic_timer_off_normal.png differ
diff --git a/res/drawable-mdpi/ic_trash_disabled.png b/res/drawable-mdpi/ic_trash_disabled.png
new file mode 100644 (file)
index 0000000..1f1a215
Binary files /dev/null and b/res/drawable-mdpi/ic_trash_disabled.png differ
diff --git a/res/drawable-mdpi/ic_trash_normal.png b/res/drawable-mdpi/ic_trash_normal.png
new file mode 100644 (file)
index 0000000..e0a9ff6
Binary files /dev/null and b/res/drawable-mdpi/ic_trash_normal.png differ
diff --git a/res/drawable-mdpi/ic_video_blanket.png b/res/drawable-mdpi/ic_video_blanket.png
new file mode 100644 (file)
index 0000000..db57c43
Binary files /dev/null and b/res/drawable-mdpi/ic_video_blanket.png differ
diff --git a/res/drawable-mdpi/ic_video_disabled.png b/res/drawable-mdpi/ic_video_disabled.png
new file mode 100644 (file)
index 0000000..7531600
Binary files /dev/null and b/res/drawable-mdpi/ic_video_disabled.png differ
diff --git a/res/drawable-mdpi/ic_video_normal.png b/res/drawable-mdpi/ic_video_normal.png
new file mode 100644 (file)
index 0000000..b95ab55
Binary files /dev/null and b/res/drawable-mdpi/ic_video_normal.png differ
diff --git a/res/drawable-mdpi/stgs_cling.9.png b/res/drawable-mdpi/stgs_cling.9.png
new file mode 100644 (file)
index 0000000..b93d042
Binary files /dev/null and b/res/drawable-mdpi/stgs_cling.9.png differ
diff --git a/res/drawable-mdpi/stgs_cling_pressed.9.png b/res/drawable-mdpi/stgs_cling_pressed.9.png
new file mode 100644 (file)
index 0000000..f6e370b
Binary files /dev/null and b/res/drawable-mdpi/stgs_cling_pressed.9.png differ
diff --git a/res/drawable-xhdpi/aspect_ratio_16x9_selected.jpg b/res/drawable-xhdpi/aspect_ratio_16x9_selected.jpg
new file mode 100644 (file)
index 0000000..970d47f
Binary files /dev/null and b/res/drawable-xhdpi/aspect_ratio_16x9_selected.jpg differ
diff --git a/res/drawable-xhdpi/aspect_ratio_16x9_selected.png b/res/drawable-xhdpi/aspect_ratio_16x9_selected.png
deleted file mode 100644 (file)
index b456a39..0000000
Binary files a/res/drawable-xhdpi/aspect_ratio_16x9_selected.png and /dev/null differ
diff --git a/res/drawable-xhdpi/aspect_ratio_16x9_unselected.jpg b/res/drawable-xhdpi/aspect_ratio_16x9_unselected.jpg
new file mode 100644 (file)
index 0000000..d9d9323
Binary files /dev/null and b/res/drawable-xhdpi/aspect_ratio_16x9_unselected.jpg differ
diff --git a/res/drawable-xhdpi/aspect_ratio_16x9_unselected.png b/res/drawable-xhdpi/aspect_ratio_16x9_unselected.png
deleted file mode 100644 (file)
index 4d9b899..0000000
Binary files a/res/drawable-xhdpi/aspect_ratio_16x9_unselected.png and /dev/null differ
diff --git a/res/drawable-xhdpi/aspect_ratio_4x3_selected.jpg b/res/drawable-xhdpi/aspect_ratio_4x3_selected.jpg
new file mode 100644 (file)
index 0000000..0a89270
Binary files /dev/null and b/res/drawable-xhdpi/aspect_ratio_4x3_selected.jpg differ
diff --git a/res/drawable-xhdpi/aspect_ratio_4x3_selected.png b/res/drawable-xhdpi/aspect_ratio_4x3_selected.png
deleted file mode 100644 (file)
index 1a087db..0000000
Binary files a/res/drawable-xhdpi/aspect_ratio_4x3_selected.png and /dev/null differ
diff --git a/res/drawable-xhdpi/aspect_ratio_4x3_unselected.jpg b/res/drawable-xhdpi/aspect_ratio_4x3_unselected.jpg
new file mode 100644 (file)
index 0000000..359e2fd
Binary files /dev/null and b/res/drawable-xhdpi/aspect_ratio_4x3_unselected.jpg differ
diff --git a/res/drawable-xhdpi/aspect_ratio_4x3_unselected.png b/res/drawable-xhdpi/aspect_ratio_4x3_unselected.png
deleted file mode 100644 (file)
index 3c43025..0000000
Binary files a/res/drawable-xhdpi/aspect_ratio_4x3_unselected.png and /dev/null differ
index cce70b3..e4e3252 100644 (file)
Binary files a/res/drawable-xhdpi/btn_cling.9.png and b/res/drawable-xhdpi/btn_cling.9.png differ
index efa0f1c..83fd9ca 100644 (file)
Binary files a/res/drawable-xhdpi/btn_cling_pressed.9.png and b/res/drawable-xhdpi/btn_cling_pressed.9.png differ
diff --git a/res/drawable-xhdpi/geo_opt_in_graphic.jpg b/res/drawable-xhdpi/geo_opt_in_graphic.jpg
new file mode 100644 (file)
index 0000000..bfc6880
Binary files /dev/null and b/res/drawable-xhdpi/geo_opt_in_graphic.jpg differ
diff --git a/res/drawable-xhdpi/geo_opt_in_graphic.png b/res/drawable-xhdpi/geo_opt_in_graphic.png
deleted file mode 100644 (file)
index 95ceabb..0000000
Binary files a/res/drawable-xhdpi/geo_opt_in_graphic.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_camera_blanket.png b/res/drawable-xhdpi/ic_camera_blanket.png
new file mode 100644 (file)
index 0000000..2d66653
Binary files /dev/null and b/res/drawable-xhdpi/ic_camera_blanket.png differ
index 89ea31d..cc31b6c 100644 (file)
Binary files a/res/drawable-xhdpi/ic_camera_disabled.png and b/res/drawable-xhdpi/ic_camera_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_camera_normal.png b/res/drawable-xhdpi/ic_camera_normal.png
new file mode 100644 (file)
index 0000000..78536d0
Binary files /dev/null and b/res/drawable-xhdpi/ic_camera_normal.png differ
diff --git a/res/drawable-xhdpi/ic_capture_camera_disabled.png b/res/drawable-xhdpi/ic_capture_camera_disabled.png
new file mode 100644 (file)
index 0000000..93c03ad
Binary files /dev/null and b/res/drawable-xhdpi/ic_capture_camera_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_capture_camera_normal.png b/res/drawable-xhdpi/ic_capture_camera_normal.png
new file mode 100644 (file)
index 0000000..1b9fd9b
Binary files /dev/null and b/res/drawable-xhdpi/ic_capture_camera_normal.png differ
diff --git a/res/drawable-xhdpi/ic_capture_video.png b/res/drawable-xhdpi/ic_capture_video.png
new file mode 100644 (file)
index 0000000..8bcdd81
Binary files /dev/null and b/res/drawable-xhdpi/ic_capture_video.png differ
diff --git a/res/drawable-xhdpi/ic_capture_video_disabled.png b/res/drawable-xhdpi/ic_capture_video_disabled.png
new file mode 100644 (file)
index 0000000..c345391
Binary files /dev/null and b/res/drawable-xhdpi/ic_capture_video_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_discard_disabled.png b/res/drawable-xhdpi/ic_discard_disabled.png
deleted file mode 100644 (file)
index 37e2bae..0000000
Binary files a/res/drawable-xhdpi/ic_discard_disabled.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_discard_normal.png b/res/drawable-xhdpi/ic_discard_normal.png
deleted file mode 100644 (file)
index 27e64f4..0000000
Binary files a/res/drawable-xhdpi/ic_discard_normal.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_done_disabled.png b/res/drawable-xhdpi/ic_done_disabled.png
new file mode 100644 (file)
index 0000000..b2b2a62
Binary files /dev/null and b/res/drawable-xhdpi/ic_done_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_done_normal.png b/res/drawable-xhdpi/ic_done_normal.png
new file mode 100644 (file)
index 0000000..ed4edd5
Binary files /dev/null and b/res/drawable-xhdpi/ic_done_normal.png differ
index cd0fcdb..442ea51 100644 (file)
Binary files a/res/drawable-xhdpi/ic_edit_disabled.png and b/res/drawable-xhdpi/ic_edit_disabled.png differ
index 269b1a4..b6359c9 100644 (file)
Binary files a/res/drawable-xhdpi/ic_edit_normal.png and b/res/drawable-xhdpi/ic_edit_normal.png differ
index c7502cf..f44ff50 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_0.png and b/res/drawable-xhdpi/ic_exposure_0.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_0_disabled.png b/res/drawable-xhdpi/ic_exposure_0_disabled.png
new file mode 100644 (file)
index 0000000..1a3d8a8
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_0_disabled.png differ
index 6444e03..e4400f4 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_0_indicator.png and b/res/drawable-xhdpi/ic_exposure_0_indicator.png differ
index 7612dfe..ff399ae 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_disabled.png and b/res/drawable-xhdpi/ic_exposure_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_indicator.png b/res/drawable-xhdpi/ic_exposure_indicator.png
new file mode 100644 (file)
index 0000000..334203b
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_indicator.png differ
index 257a5de..47c0213 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_n1.png and b/res/drawable-xhdpi/ic_exposure_n1.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_n1_disabled.png b/res/drawable-xhdpi/ic_exposure_n1_disabled.png
new file mode 100644 (file)
index 0000000..95c9e6f
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_n1_disabled.png differ
index e658524..a06147d 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_n1_indicator.png and b/res/drawable-xhdpi/ic_exposure_n1_indicator.png differ
index c320e2d..c035c01 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_n2.png and b/res/drawable-xhdpi/ic_exposure_n2.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_n2_disabled.png b/res/drawable-xhdpi/ic_exposure_n2_disabled.png
new file mode 100644 (file)
index 0000000..5e412be
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_n2_disabled.png differ
index e9f9582..a5e8659 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_n2_indicator.png and b/res/drawable-xhdpi/ic_exposure_n2_indicator.png differ
index 42858e3..ed7fa9f 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_normal.png and b/res/drawable-xhdpi/ic_exposure_normal.png differ
index 4760d3b..ebeb0ce 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_p1.png and b/res/drawable-xhdpi/ic_exposure_p1.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_p1_disabled.png b/res/drawable-xhdpi/ic_exposure_p1_disabled.png
new file mode 100644 (file)
index 0000000..482688a
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_p1_disabled.png differ
index 5437770..c5a2a53 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_p1_indicator.png and b/res/drawable-xhdpi/ic_exposure_p1_indicator.png differ
index b23d040..3580d63 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_p2.png and b/res/drawable-xhdpi/ic_exposure_p2.png differ
diff --git a/res/drawable-xhdpi/ic_exposure_p2_disabled.png b/res/drawable-xhdpi/ic_exposure_p2_disabled.png
new file mode 100644 (file)
index 0000000..4596cd9
Binary files /dev/null and b/res/drawable-xhdpi/ic_exposure_p2_disabled.png differ
index 7c1be04..b56b270 100644 (file)
Binary files a/res/drawable-xhdpi/ic_exposure_p2_indicator.png and b/res/drawable-xhdpi/ic_exposure_p2_indicator.png differ
index 331812a..b9f149c 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_auto_disabled.png and b/res/drawable-xhdpi/ic_flash_auto_disabled.png differ
index c599d98..526a65e 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_auto_indicator.png and b/res/drawable-xhdpi/ic_flash_auto_indicator.png differ
index b1067c9..5358ff5 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_auto_normal.png and b/res/drawable-xhdpi/ic_flash_auto_normal.png differ
index 5cbabad..59b21a8 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_off_disabled.png and b/res/drawable-xhdpi/ic_flash_off_disabled.png differ
index 8793748..c047ff0 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_off_indicator.png and b/res/drawable-xhdpi/ic_flash_off_indicator.png differ
index b4789e3..84bce58 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_off_normal.png and b/res/drawable-xhdpi/ic_flash_off_normal.png differ
index 8aaa2e3..181eb30 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_on_disabled.png and b/res/drawable-xhdpi/ic_flash_on_disabled.png differ
index fb15711..ff413e6 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_on_indicator.png and b/res/drawable-xhdpi/ic_flash_on_indicator.png differ
index e86b301..ca8e119 100644 (file)
Binary files a/res/drawable-xhdpi/ic_flash_on_normal.png and b/res/drawable-xhdpi/ic_flash_on_normal.png differ
index 2c4e863..0878013 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_off_disabled.png and b/res/drawable-xhdpi/ic_grid_off_disabled.png differ
index 5a05966..3570ef5 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_off_indicator.png and b/res/drawable-xhdpi/ic_grid_off_indicator.png differ
index ae0b176..62a16bd 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_off_normal.png and b/res/drawable-xhdpi/ic_grid_off_normal.png differ
index 661174d..22624b6 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_on_disabled.png and b/res/drawable-xhdpi/ic_grid_on_disabled.png differ
index 6e1ff89..4bf674e 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_on_indicator.png and b/res/drawable-xhdpi/ic_grid_on_indicator.png differ
index 2e0514d..dcb58df 100644 (file)
Binary files a/res/drawable-xhdpi/ic_grid_on_normal.png and b/res/drawable-xhdpi/ic_grid_on_normal.png differ
index 61e616c..0a6d6d7 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_off_disabled.png and b/res/drawable-xhdpi/ic_hdr_off_disabled.png differ
index 527de2c..f60f8e2 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_off_indicator.png and b/res/drawable-xhdpi/ic_hdr_off_indicator.png differ
index ac26067..76d024d 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_off_normal.png and b/res/drawable-xhdpi/ic_hdr_off_normal.png differ
index fcc7911..851276e 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_on_disabled.png and b/res/drawable-xhdpi/ic_hdr_on_disabled.png differ
index 4218e50..2668ce2 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_on_indicator.png and b/res/drawable-xhdpi/ic_hdr_on_indicator.png differ
index cb3ae41..0ade21b 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_on_normal.png and b/res/drawable-xhdpi/ic_hdr_on_normal.png differ
index 005cbab..aff08f0 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_off_disabled.png and b/res/drawable-xhdpi/ic_hdr_plus_off_disabled.png differ
index d7454bf..1e743d3 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_off_indicator.png and b/res/drawable-xhdpi/ic_hdr_plus_off_indicator.png differ
index 5d5d762..b023353 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_off_normal.png and b/res/drawable-xhdpi/ic_hdr_plus_off_normal.png differ
index 78e61d6..22df163 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_on_disabled.png and b/res/drawable-xhdpi/ic_hdr_plus_on_disabled.png differ
index c2ce461..eb268b9 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_on_indicator.png and b/res/drawable-xhdpi/ic_hdr_plus_on_indicator.png differ
index ad28919..5a07aac 100644 (file)
Binary files a/res/drawable-xhdpi/ic_hdr_plus_on_normal.png and b/res/drawable-xhdpi/ic_hdr_plus_on_normal.png differ
diff --git a/res/drawable-xhdpi/ic_panorama_disabled.png b/res/drawable-xhdpi/ic_panorama_disabled.png
deleted file mode 100644 (file)
index 9b07405..0000000
Binary files a/res/drawable-xhdpi/ic_panorama_disabled.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_photo_sphere_disabled.png b/res/drawable-xhdpi/ic_photo_sphere_disabled.png
deleted file mode 100644 (file)
index 558bbe9..0000000
Binary files a/res/drawable-xhdpi/ic_photo_sphere_disabled.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_refocus_disabled.png b/res/drawable-xhdpi/ic_refocus_disabled.png
deleted file mode 100644 (file)
index dda3818..0000000
Binary files a/res/drawable-xhdpi/ic_refocus_disabled.png and /dev/null differ
index 71d3d81..63845ee 100644 (file)
Binary files a/res/drawable-xhdpi/ic_share_disabled.png and b/res/drawable-xhdpi/ic_share_disabled.png differ
index 5963715..42bce2a 100644 (file)
Binary files a/res/drawable-xhdpi/ic_share_normal.png and b/res/drawable-xhdpi/ic_share_normal.png differ
index 8f7f192..26ad3a5 100644 (file)
Binary files a/res/drawable-xhdpi/ic_switch_camera_back_disabled.png and b/res/drawable-xhdpi/ic_switch_camera_back_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_switch_camera_back_indicator.png b/res/drawable-xhdpi/ic_switch_camera_back_indicator.png
new file mode 100644 (file)
index 0000000..a68dd65
Binary files /dev/null and b/res/drawable-xhdpi/ic_switch_camera_back_indicator.png differ
index 4970deb..32a37d7 100644 (file)
Binary files a/res/drawable-xhdpi/ic_switch_camera_back_normal.png and b/res/drawable-xhdpi/ic_switch_camera_back_normal.png differ
index 4220c77..56fc8c4 100644 (file)
Binary files a/res/drawable-xhdpi/ic_switch_camera_front_disabled.png and b/res/drawable-xhdpi/ic_switch_camera_front_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_switch_camera_front_indicator.png b/res/drawable-xhdpi/ic_switch_camera_front_indicator.png
new file mode 100644 (file)
index 0000000..37baad5
Binary files /dev/null and b/res/drawable-xhdpi/ic_switch_camera_front_indicator.png differ
index 7ee1097..c1147b7 100644 (file)
Binary files a/res/drawable-xhdpi/ic_switch_camera_front_normal.png and b/res/drawable-xhdpi/ic_switch_camera_front_normal.png differ
index cc73c7a..c685668 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_10s_disabled.png and b/res/drawable-xhdpi/ic_timer_10s_disabled.png differ
index 0040e4b..a8a005b 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_10s_indicator.png and b/res/drawable-xhdpi/ic_timer_10s_indicator.png differ
index d8104e0..4815dfd 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_10s_normal.png and b/res/drawable-xhdpi/ic_timer_10s_normal.png differ
index 3fe1a2c..b3cca59 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_3s_disabled.png and b/res/drawable-xhdpi/ic_timer_3s_disabled.png differ
index 745c09f..ae46c8d 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_3s_indicator.png and b/res/drawable-xhdpi/ic_timer_3s_indicator.png differ
index c3874ac..982509c 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_3s_normal.png and b/res/drawable-xhdpi/ic_timer_3s_normal.png differ
diff --git a/res/drawable-xhdpi/ic_timer_auto_disabled.png b/res/drawable-xhdpi/ic_timer_auto_disabled.png
new file mode 100644 (file)
index 0000000..ab708b6
Binary files /dev/null and b/res/drawable-xhdpi/ic_timer_auto_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_timer_auto_indicator.png b/res/drawable-xhdpi/ic_timer_auto_indicator.png
new file mode 100644 (file)
index 0000000..c361b76
Binary files /dev/null and b/res/drawable-xhdpi/ic_timer_auto_indicator.png differ
diff --git a/res/drawable-xhdpi/ic_timer_auto_normal.png b/res/drawable-xhdpi/ic_timer_auto_normal.png
new file mode 100644 (file)
index 0000000..740c205
Binary files /dev/null and b/res/drawable-xhdpi/ic_timer_auto_normal.png differ
index 7ceb53a..f053bdf 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_off_disabled.png and b/res/drawable-xhdpi/ic_timer_off_disabled.png differ
index 7e6272d..9fd61bd 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_off_indicator.png and b/res/drawable-xhdpi/ic_timer_off_indicator.png differ
index b6554f1..7341cd0 100644 (file)
Binary files a/res/drawable-xhdpi/ic_timer_off_normal.png and b/res/drawable-xhdpi/ic_timer_off_normal.png differ
diff --git a/res/drawable-xhdpi/ic_trash_disabled.png b/res/drawable-xhdpi/ic_trash_disabled.png
new file mode 100644 (file)
index 0000000..efd17a2
Binary files /dev/null and b/res/drawable-xhdpi/ic_trash_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_trash_normal.png b/res/drawable-xhdpi/ic_trash_normal.png
new file mode 100644 (file)
index 0000000..fbe023e
Binary files /dev/null and b/res/drawable-xhdpi/ic_trash_normal.png differ
diff --git a/res/drawable-xhdpi/ic_video_blanket.png b/res/drawable-xhdpi/ic_video_blanket.png
new file mode 100644 (file)
index 0000000..790313c
Binary files /dev/null and b/res/drawable-xhdpi/ic_video_blanket.png differ
diff --git a/res/drawable-xhdpi/ic_video_disabled.png b/res/drawable-xhdpi/ic_video_disabled.png
new file mode 100644 (file)
index 0000000..e2bb06c
Binary files /dev/null and b/res/drawable-xhdpi/ic_video_disabled.png differ
diff --git a/res/drawable-xhdpi/ic_video_normal.png b/res/drawable-xhdpi/ic_video_normal.png
new file mode 100644 (file)
index 0000000..8a18640
Binary files /dev/null and b/res/drawable-xhdpi/ic_video_normal.png differ
diff --git a/res/drawable-xhdpi/stgs_cling.9.png b/res/drawable-xhdpi/stgs_cling.9.png
new file mode 100644 (file)
index 0000000..cce70b3
Binary files /dev/null and b/res/drawable-xhdpi/stgs_cling.9.png differ
diff --git a/res/drawable-xhdpi/stgs_cling_pressed.9.png b/res/drawable-xhdpi/stgs_cling_pressed.9.png
new file mode 100644 (file)
index 0000000..efa0f1c
Binary files /dev/null and b/res/drawable-xhdpi/stgs_cling_pressed.9.png differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_16x9_selected.jpg b/res/drawable-xxhdpi/aspect_ratio_16x9_selected.jpg
new file mode 100644 (file)
index 0000000..fbeb39e
Binary files /dev/null and b/res/drawable-xxhdpi/aspect_ratio_16x9_selected.jpg differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_16x9_selected.png b/res/drawable-xxhdpi/aspect_ratio_16x9_selected.png
deleted file mode 100644 (file)
index 6ef1e4c..0000000
Binary files a/res/drawable-xxhdpi/aspect_ratio_16x9_selected.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.jpg b/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.jpg
new file mode 100644 (file)
index 0000000..acfb95c
Binary files /dev/null and b/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.jpg differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.png b/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.png
deleted file mode 100644 (file)
index 1e4937a..0000000
Binary files a/res/drawable-xxhdpi/aspect_ratio_16x9_unselected.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_4x3_selected.jpg b/res/drawable-xxhdpi/aspect_ratio_4x3_selected.jpg
new file mode 100644 (file)
index 0000000..f34276f
Binary files /dev/null and b/res/drawable-xxhdpi/aspect_ratio_4x3_selected.jpg differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_4x3_selected.png b/res/drawable-xxhdpi/aspect_ratio_4x3_selected.png
deleted file mode 100644 (file)
index 9fc55d8..0000000
Binary files a/res/drawable-xxhdpi/aspect_ratio_4x3_selected.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.jpg b/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.jpg
new file mode 100644 (file)
index 0000000..861ce03
Binary files /dev/null and b/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.jpg differ
diff --git a/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.png b/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.png
deleted file mode 100644 (file)
index a72be3d..0000000
Binary files a/res/drawable-xxhdpi/aspect_ratio_4x3_unselected.png and /dev/null differ
index ba016b2..b41788c 100644 (file)
Binary files a/res/drawable-xxhdpi/btn_cling.9.png and b/res/drawable-xxhdpi/btn_cling.9.png differ
index 48e861a..3a95c15 100644 (file)
Binary files a/res/drawable-xxhdpi/btn_cling_pressed.9.png and b/res/drawable-xxhdpi/btn_cling_pressed.9.png differ
diff --git a/res/drawable-xxhdpi/geo_opt_in_graphic.jpg b/res/drawable-xxhdpi/geo_opt_in_graphic.jpg
new file mode 100644 (file)
index 0000000..7de7ede
Binary files /dev/null and b/res/drawable-xxhdpi/geo_opt_in_graphic.jpg differ
diff --git a/res/drawable-xxhdpi/geo_opt_in_graphic.png b/res/drawable-xxhdpi/geo_opt_in_graphic.png
deleted file mode 100644 (file)
index 6144b1b..0000000
Binary files a/res/drawable-xxhdpi/geo_opt_in_graphic.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_camera_blanket.png b/res/drawable-xxhdpi/ic_camera_blanket.png
new file mode 100644 (file)
index 0000000..b70de30
Binary files /dev/null and b/res/drawable-xxhdpi/ic_camera_blanket.png differ
index 9165d50..7a09213 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_camera_disabled.png and b/res/drawable-xxhdpi/ic_camera_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_camera_normal.png b/res/drawable-xxhdpi/ic_camera_normal.png
new file mode 100644 (file)
index 0000000..d24dc73
Binary files /dev/null and b/res/drawable-xxhdpi/ic_camera_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_capture_camera_disabled.png b/res/drawable-xxhdpi/ic_capture_camera_disabled.png
new file mode 100644 (file)
index 0000000..b5f3d72
Binary files /dev/null and b/res/drawable-xxhdpi/ic_capture_camera_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_capture_camera_normal.png b/res/drawable-xxhdpi/ic_capture_camera_normal.png
new file mode 100644 (file)
index 0000000..a82cafc
Binary files /dev/null and b/res/drawable-xxhdpi/ic_capture_camera_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_capture_video.png b/res/drawable-xxhdpi/ic_capture_video.png
new file mode 100644 (file)
index 0000000..685df78
Binary files /dev/null and b/res/drawable-xxhdpi/ic_capture_video.png differ
diff --git a/res/drawable-xxhdpi/ic_capture_video_disabled.png b/res/drawable-xxhdpi/ic_capture_video_disabled.png
new file mode 100644 (file)
index 0000000..1e9b295
Binary files /dev/null and b/res/drawable-xxhdpi/ic_capture_video_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_discard_disabled.png b/res/drawable-xxhdpi/ic_discard_disabled.png
deleted file mode 100644 (file)
index ccb90e5..0000000
Binary files a/res/drawable-xxhdpi/ic_discard_disabled.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_discard_normal.png b/res/drawable-xxhdpi/ic_discard_normal.png
deleted file mode 100644 (file)
index 4e0d89d..0000000
Binary files a/res/drawable-xxhdpi/ic_discard_normal.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_done_disabled.png b/res/drawable-xxhdpi/ic_done_disabled.png
new file mode 100644 (file)
index 0000000..1da358d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_done_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_done_normal.png b/res/drawable-xxhdpi/ic_done_normal.png
new file mode 100644 (file)
index 0000000..4bf9406
Binary files /dev/null and b/res/drawable-xxhdpi/ic_done_normal.png differ
index 2b0f928..4b5c33a 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_edit_disabled.png and b/res/drawable-xxhdpi/ic_edit_disabled.png differ
index d1e9fbd..55fb5ef 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_edit_normal.png and b/res/drawable-xxhdpi/ic_edit_normal.png differ
index 0a63701..1605d1e 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_0.png and b/res/drawable-xxhdpi/ic_exposure_0.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_0_disabled.png b/res/drawable-xxhdpi/ic_exposure_0_disabled.png
new file mode 100644 (file)
index 0000000..281f255
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_0_disabled.png differ
index 5919916..5f6479c 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_0_indicator.png and b/res/drawable-xxhdpi/ic_exposure_0_indicator.png differ
index b9d7d5a..e57d41d 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_disabled.png and b/res/drawable-xxhdpi/ic_exposure_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_indicator.png b/res/drawable-xxhdpi/ic_exposure_indicator.png
new file mode 100644 (file)
index 0000000..a8b8679
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_indicator.png differ
index b4c7d3a..3325ce3 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_n1.png and b/res/drawable-xxhdpi/ic_exposure_n1.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_n1_disabled.png b/res/drawable-xxhdpi/ic_exposure_n1_disabled.png
new file mode 100644 (file)
index 0000000..9e2c44e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_n1_disabled.png differ
index 8b91734..385b8af 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_n1_indicator.png and b/res/drawable-xxhdpi/ic_exposure_n1_indicator.png differ
index 929d733..4e0f612 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_n2.png and b/res/drawable-xxhdpi/ic_exposure_n2.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_n2_disabled.png b/res/drawable-xxhdpi/ic_exposure_n2_disabled.png
new file mode 100644 (file)
index 0000000..5b02189
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_n2_disabled.png differ
index 060dd81..c7ccfee 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_n2_indicator.png and b/res/drawable-xxhdpi/ic_exposure_n2_indicator.png differ
index 1ebc71c..1d48c58 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_normal.png and b/res/drawable-xxhdpi/ic_exposure_normal.png differ
index f854db4..b98c64c 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_p1.png and b/res/drawable-xxhdpi/ic_exposure_p1.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_p1_disabled.png b/res/drawable-xxhdpi/ic_exposure_p1_disabled.png
new file mode 100644 (file)
index 0000000..f89bf7e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_p1_disabled.png differ
index c03a20e..f647821 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_p1_indicator.png and b/res/drawable-xxhdpi/ic_exposure_p1_indicator.png differ
index 346d8d8..2816f8d 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_p2.png and b/res/drawable-xxhdpi/ic_exposure_p2.png differ
diff --git a/res/drawable-xxhdpi/ic_exposure_p2_disabled.png b/res/drawable-xxhdpi/ic_exposure_p2_disabled.png
new file mode 100644 (file)
index 0000000..c812054
Binary files /dev/null and b/res/drawable-xxhdpi/ic_exposure_p2_disabled.png differ
index dd4420a..43c24eb 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_exposure_p2_indicator.png and b/res/drawable-xxhdpi/ic_exposure_p2_indicator.png differ
index aec5d08..ce2c0ef 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_auto_disabled.png and b/res/drawable-xxhdpi/ic_flash_auto_disabled.png differ
index 65dcf1b..41a9e72 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_auto_indicator.png and b/res/drawable-xxhdpi/ic_flash_auto_indicator.png differ
index 48bdba3..27b968a 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_auto_normal.png and b/res/drawable-xxhdpi/ic_flash_auto_normal.png differ
index a4d070b..2054f6e 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_off_disabled.png and b/res/drawable-xxhdpi/ic_flash_off_disabled.png differ
index 5aa096c..09bc421 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_off_indicator.png and b/res/drawable-xxhdpi/ic_flash_off_indicator.png differ
index 33a372c..c60e855 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_off_normal.png and b/res/drawable-xxhdpi/ic_flash_off_normal.png differ
index 7db39d5..1997f86 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_on_disabled.png and b/res/drawable-xxhdpi/ic_flash_on_disabled.png differ
index 4177f65..619ca60 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_on_indicator.png and b/res/drawable-xxhdpi/ic_flash_on_indicator.png differ
index 660ff60..e2fb9d0 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_flash_on_normal.png and b/res/drawable-xxhdpi/ic_flash_on_normal.png differ
index d3bda52..87233a1 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_off_disabled.png and b/res/drawable-xxhdpi/ic_grid_off_disabled.png differ
index 1505870..3bad202 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_off_indicator.png and b/res/drawable-xxhdpi/ic_grid_off_indicator.png differ
index dc5af05..0225ff7 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_off_normal.png and b/res/drawable-xxhdpi/ic_grid_off_normal.png differ
index 2f0eefd..3fa8b2b 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_on_disabled.png and b/res/drawable-xxhdpi/ic_grid_on_disabled.png differ
index 381942f..4838e1c 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_on_indicator.png and b/res/drawable-xxhdpi/ic_grid_on_indicator.png differ
index 7afea35..1d0067b 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_grid_on_normal.png and b/res/drawable-xxhdpi/ic_grid_on_normal.png differ
index f29ab46..1d36659 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_off_disabled.png and b/res/drawable-xxhdpi/ic_hdr_off_disabled.png differ
index 640d903..2a3845e 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_off_indicator.png and b/res/drawable-xxhdpi/ic_hdr_off_indicator.png differ
index 227d173..d730c25 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_off_normal.png and b/res/drawable-xxhdpi/ic_hdr_off_normal.png differ
index 0abd17a..e7fcb3b 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_on_disabled.png and b/res/drawable-xxhdpi/ic_hdr_on_disabled.png differ
index eb44d43..f002056 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_on_indicator.png and b/res/drawable-xxhdpi/ic_hdr_on_indicator.png differ
index 879e53d..dcb5090 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_on_normal.png and b/res/drawable-xxhdpi/ic_hdr_on_normal.png differ
index 0ad52dd..96f4e7e 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_off_disabled.png and b/res/drawable-xxhdpi/ic_hdr_plus_off_disabled.png differ
index 4d5e046..bb5cb11 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_off_indicator.png and b/res/drawable-xxhdpi/ic_hdr_plus_off_indicator.png differ
index 8103f8b..854ef0c 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_off_normal.png and b/res/drawable-xxhdpi/ic_hdr_plus_off_normal.png differ
index 37ce481..c3fda73 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_on_disabled.png and b/res/drawable-xxhdpi/ic_hdr_plus_on_disabled.png differ
index 5999ba2..0aaedba 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_on_indicator.png and b/res/drawable-xxhdpi/ic_hdr_plus_on_indicator.png differ
index 6fb726c..3dfd452 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_hdr_plus_on_normal.png and b/res/drawable-xxhdpi/ic_hdr_plus_on_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_panorama_disabled.png b/res/drawable-xxhdpi/ic_panorama_disabled.png
deleted file mode 100644 (file)
index b064688..0000000
Binary files a/res/drawable-xxhdpi/ic_panorama_disabled.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_photo_sphere_disabled.png b/res/drawable-xxhdpi/ic_photo_sphere_disabled.png
deleted file mode 100644 (file)
index 11e2b44..0000000
Binary files a/res/drawable-xxhdpi/ic_photo_sphere_disabled.png and /dev/null differ
index 3338218..b07a573 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_refocus_disabled.png and b/res/drawable-xxhdpi/ic_refocus_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_refocus_normal.png b/res/drawable-xxhdpi/ic_refocus_normal.png
new file mode 100644 (file)
index 0000000..b65de73
Binary files /dev/null and b/res/drawable-xxhdpi/ic_refocus_normal.png differ
index 3a4a49b..bba9aee 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_share_disabled.png and b/res/drawable-xxhdpi/ic_share_disabled.png differ
index d50a4fa..9aa6089 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_share_normal.png and b/res/drawable-xxhdpi/ic_share_normal.png differ
index 5a91f9c..c2f0350 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_switch_camera_back_disabled.png and b/res/drawable-xxhdpi/ic_switch_camera_back_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_switch_camera_back_indicator.png b/res/drawable-xxhdpi/ic_switch_camera_back_indicator.png
new file mode 100644 (file)
index 0000000..6e3e930
Binary files /dev/null and b/res/drawable-xxhdpi/ic_switch_camera_back_indicator.png differ
index ee4f2e2..e351a35 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_switch_camera_back_normal.png and b/res/drawable-xxhdpi/ic_switch_camera_back_normal.png differ
index b04bb3d..1fe42d5 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_switch_camera_front_disabled.png and b/res/drawable-xxhdpi/ic_switch_camera_front_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_switch_camera_front_indicator.png b/res/drawable-xxhdpi/ic_switch_camera_front_indicator.png
new file mode 100644 (file)
index 0000000..a5e0529
Binary files /dev/null and b/res/drawable-xxhdpi/ic_switch_camera_front_indicator.png differ
index d35b954..700ca50 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_switch_camera_front_normal.png and b/res/drawable-xxhdpi/ic_switch_camera_front_normal.png differ
index bb84496..5c80813 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_10s_disabled.png and b/res/drawable-xxhdpi/ic_timer_10s_disabled.png differ
index 3994565..8cbfe4e 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_10s_indicator.png and b/res/drawable-xxhdpi/ic_timer_10s_indicator.png differ
index 61fffec..d759442 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_10s_normal.png and b/res/drawable-xxhdpi/ic_timer_10s_normal.png differ
index f67c754..eb67383 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_3s_disabled.png and b/res/drawable-xxhdpi/ic_timer_3s_disabled.png differ
index 7b0c5d3..9e27664 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_3s_indicator.png and b/res/drawable-xxhdpi/ic_timer_3s_indicator.png differ
index a4a7bf9..5965cf5 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_3s_normal.png and b/res/drawable-xxhdpi/ic_timer_3s_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_timer_auto_disabled.png b/res/drawable-xxhdpi/ic_timer_auto_disabled.png
new file mode 100644 (file)
index 0000000..527efc2
Binary files /dev/null and b/res/drawable-xxhdpi/ic_timer_auto_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_timer_auto_indicator.png b/res/drawable-xxhdpi/ic_timer_auto_indicator.png
new file mode 100644 (file)
index 0000000..dc2ed02
Binary files /dev/null and b/res/drawable-xxhdpi/ic_timer_auto_indicator.png differ
diff --git a/res/drawable-xxhdpi/ic_timer_auto_normal.png b/res/drawable-xxhdpi/ic_timer_auto_normal.png
new file mode 100644 (file)
index 0000000..2bafa3b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_timer_auto_normal.png differ
index d617e79..10d2b36 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_off_disabled.png and b/res/drawable-xxhdpi/ic_timer_off_disabled.png differ
index 21acf8c..c913fc7 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_off_indicator.png and b/res/drawable-xxhdpi/ic_timer_off_indicator.png differ
index 935b7ce..a1da31d 100644 (file)
Binary files a/res/drawable-xxhdpi/ic_timer_off_normal.png and b/res/drawable-xxhdpi/ic_timer_off_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_trash_disabled.png b/res/drawable-xxhdpi/ic_trash_disabled.png
new file mode 100644 (file)
index 0000000..7bd26e7
Binary files /dev/null and b/res/drawable-xxhdpi/ic_trash_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_trash_normal.png b/res/drawable-xxhdpi/ic_trash_normal.png
new file mode 100644 (file)
index 0000000..dbbe317
Binary files /dev/null and b/res/drawable-xxhdpi/ic_trash_normal.png differ
diff --git a/res/drawable-xxhdpi/ic_video_blanket.png b/res/drawable-xxhdpi/ic_video_blanket.png
new file mode 100644 (file)
index 0000000..d66dbd1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_video_blanket.png differ
diff --git a/res/drawable-xxhdpi/ic_video_disabled.png b/res/drawable-xxhdpi/ic_video_disabled.png
new file mode 100644 (file)
index 0000000..86e6da6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_video_disabled.png differ
diff --git a/res/drawable-xxhdpi/ic_video_normal.png b/res/drawable-xxhdpi/ic_video_normal.png
new file mode 100644 (file)
index 0000000..9eedd35
Binary files /dev/null and b/res/drawable-xxhdpi/ic_video_normal.png differ
diff --git a/res/drawable-xxhdpi/stgs_cling.9.png b/res/drawable-xxhdpi/stgs_cling.9.png
new file mode 100644 (file)
index 0000000..ba016b2
Binary files /dev/null and b/res/drawable-xxhdpi/stgs_cling.9.png differ
diff --git a/res/drawable-xxhdpi/stgs_cling_pressed.9.png b/res/drawable-xxhdpi/stgs_cling_pressed.9.png
new file mode 100644 (file)
index 0000000..48e861a
Binary files /dev/null and b/res/drawable-xxhdpi/stgs_cling_pressed.9.png differ
diff --git a/res/drawable-xxxhdpi/aspect_ratio_16x9_selected.jpg b/res/drawable-xxxhdpi/aspect_ratio_16x9_selected.jpg
new file mode 100644 (file)
index 0000000..be2f8eb
Binary files /dev/null and b/res/drawable-xxxhdpi/aspect_ratio_16x9_selected.jpg differ
diff --git a/res/drawable-xxxhdpi/aspect_ratio_16x9_unselected.jpg b/res/drawable-xxxhdpi/aspect_ratio_16x9_unselected.jpg
new file mode 100644 (file)
index 0000000..8ec2867
Binary files /dev/null and b/res/drawable-xxxhdpi/aspect_ratio_16x9_unselected.jpg differ
diff --git a/res/drawable-xxxhdpi/aspect_ratio_4x3_selected.jpg b/res/drawable-xxxhdpi/aspect_ratio_4x3_selected.jpg
new file mode 100644 (file)
index 0000000..f6073ea
Binary files /dev/null and b/res/drawable-xxxhdpi/aspect_ratio_4x3_selected.jpg differ
diff --git a/res/drawable-xxxhdpi/aspect_ratio_4x3_unselected.jpg b/res/drawable-xxxhdpi/aspect_ratio_4x3_unselected.jpg
new file mode 100644 (file)
index 0000000..cd405c2
Binary files /dev/null and b/res/drawable-xxxhdpi/aspect_ratio_4x3_unselected.jpg differ
diff --git a/res/drawable-xxxhdpi/btn_cling.9.png b/res/drawable-xxxhdpi/btn_cling.9.png
new file mode 100644 (file)
index 0000000..1400b86
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_cling.9.png differ
diff --git a/res/drawable-xxxhdpi/btn_cling_pressed.9.png b/res/drawable-xxxhdpi/btn_cling_pressed.9.png
new file mode 100644 (file)
index 0000000..a6bcb12
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_cling_pressed.9.png differ
diff --git a/res/drawable-xxxhdpi/geo_opt_in_graphic.jpg b/res/drawable-xxxhdpi/geo_opt_in_graphic.jpg
new file mode 100644 (file)
index 0000000..7108161
Binary files /dev/null and b/res/drawable-xxxhdpi/geo_opt_in_graphic.jpg differ
diff --git a/res/drawable-xxxhdpi/ic_camera_blanket.png b/res/drawable-xxxhdpi/ic_camera_blanket.png
new file mode 100644 (file)
index 0000000..717dca2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_blanket.png differ
diff --git a/res/drawable-xxxhdpi/ic_camera_disabled.png b/res/drawable-xxxhdpi/ic_camera_disabled.png
new file mode 100644 (file)
index 0000000..af0888d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_camera_normal.png b/res/drawable-xxxhdpi/ic_camera_normal.png
new file mode 100644 (file)
index 0000000..aeed3bd
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_camera_disabled.png b/res/drawable-xxxhdpi/ic_capture_camera_disabled.png
new file mode 100644 (file)
index 0000000..46d4bd7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_camera_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_camera_normal.png b/res/drawable-xxxhdpi/ic_capture_camera_normal.png
new file mode 100644 (file)
index 0000000..8ba74d6
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_camera_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_pano.png b/res/drawable-xxxhdpi/ic_capture_pano.png
new file mode 100644 (file)
index 0000000..8ab9b13
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_pano.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_pano_disabled.png b/res/drawable-xxxhdpi/ic_capture_pano_disabled.png
new file mode 100644 (file)
index 0000000..034fafe
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_pano_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_refocus.png b/res/drawable-xxxhdpi/ic_capture_refocus.png
new file mode 100644 (file)
index 0000000..107adbd
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_refocus.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_refocus_disabled.png b/res/drawable-xxxhdpi/ic_capture_refocus_disabled.png
new file mode 100644 (file)
index 0000000..993fa01
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_refocus_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_video.png b/res/drawable-xxxhdpi/ic_capture_video.png
new file mode 100644 (file)
index 0000000..bddc238
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_video.png differ
diff --git a/res/drawable-xxxhdpi/ic_capture_video_disabled.png b/res/drawable-xxxhdpi/ic_capture_video_disabled.png
new file mode 100644 (file)
index 0000000..bca96ec
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_capture_video_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_edit_disabled.png b/res/drawable-xxxhdpi/ic_edit_disabled.png
new file mode 100644 (file)
index 0000000..268e34b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_edit_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_edit_normal.png b/res/drawable-xxxhdpi/ic_edit_normal.png
new file mode 100644 (file)
index 0000000..91725d3
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_edit_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_0.png b/res/drawable-xxxhdpi/ic_exposure_0.png
new file mode 100644 (file)
index 0000000..cb14fa5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_0.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_0_disabled.png b/res/drawable-xxxhdpi/ic_exposure_0_disabled.png
new file mode 100644 (file)
index 0000000..9b83330
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_0_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_0_indicator.png b/res/drawable-xxxhdpi/ic_exposure_0_indicator.png
new file mode 100644 (file)
index 0000000..700b011
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_0_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_disabled.png b/res/drawable-xxxhdpi/ic_exposure_disabled.png
new file mode 100644 (file)
index 0000000..68a35ec
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_indicator.png b/res/drawable-xxxhdpi/ic_exposure_indicator.png
new file mode 100644 (file)
index 0000000..72d418b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n1.png b/res/drawable-xxxhdpi/ic_exposure_n1.png
new file mode 100644 (file)
index 0000000..a1020e4
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n1.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n1_disabled.png b/res/drawable-xxxhdpi/ic_exposure_n1_disabled.png
new file mode 100644 (file)
index 0000000..4a3acbe
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n1_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n1_indicator.png b/res/drawable-xxxhdpi/ic_exposure_n1_indicator.png
new file mode 100644 (file)
index 0000000..1d92998
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n1_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n2.png b/res/drawable-xxxhdpi/ic_exposure_n2.png
new file mode 100644 (file)
index 0000000..b9d2ecf
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n2.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n2_disabled.png b/res/drawable-xxxhdpi/ic_exposure_n2_disabled.png
new file mode 100644 (file)
index 0000000..391b63c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n2_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_n2_indicator.png b/res/drawable-xxxhdpi/ic_exposure_n2_indicator.png
new file mode 100644 (file)
index 0000000..cb68773
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_n2_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_normal.png b/res/drawable-xxxhdpi/ic_exposure_normal.png
new file mode 100644 (file)
index 0000000..2e3f980
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p1.png b/res/drawable-xxxhdpi/ic_exposure_p1.png
new file mode 100644 (file)
index 0000000..d1dfb40
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p1.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p1_disabled.png b/res/drawable-xxxhdpi/ic_exposure_p1_disabled.png
new file mode 100644 (file)
index 0000000..5e93cd9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p1_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p1_indicator.png b/res/drawable-xxxhdpi/ic_exposure_p1_indicator.png
new file mode 100644 (file)
index 0000000..3712b15
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p1_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p2.png b/res/drawable-xxxhdpi/ic_exposure_p2.png
new file mode 100644 (file)
index 0000000..242c2f4
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p2.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p2_disabled.png b/res/drawable-xxxhdpi/ic_exposure_p2_disabled.png
new file mode 100644 (file)
index 0000000..0bb19b7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p2_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_exposure_p2_indicator.png b/res/drawable-xxxhdpi/ic_exposure_p2_indicator.png
new file mode 100644 (file)
index 0000000..5b34fdf
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_exposure_p2_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_auto_disabled.png b/res/drawable-xxxhdpi/ic_flash_auto_disabled.png
new file mode 100644 (file)
index 0000000..2f884e1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_auto_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_auto_indicator.png b/res/drawable-xxxhdpi/ic_flash_auto_indicator.png
new file mode 100644 (file)
index 0000000..d6d4723
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_auto_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_auto_normal.png b/res/drawable-xxxhdpi/ic_flash_auto_normal.png
new file mode 100644 (file)
index 0000000..57a255d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_auto_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_off_disabled.png b/res/drawable-xxxhdpi/ic_flash_off_disabled.png
new file mode 100644 (file)
index 0000000..5e55c7b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_off_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_off_indicator.png b/res/drawable-xxxhdpi/ic_flash_off_indicator.png
new file mode 100644 (file)
index 0000000..882d7de
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_off_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_off_normal.png b/res/drawable-xxxhdpi/ic_flash_off_normal.png
new file mode 100644 (file)
index 0000000..390ab0c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_off_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_on_disabled.png b/res/drawable-xxxhdpi/ic_flash_on_disabled.png
new file mode 100644 (file)
index 0000000..1b1457e
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_on_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_on_indicator.png b/res/drawable-xxxhdpi/ic_flash_on_indicator.png
new file mode 100644 (file)
index 0000000..ca24d86
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_on_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_flash_on_normal.png b/res/drawable-xxxhdpi/ic_flash_on_normal.png
new file mode 100644 (file)
index 0000000..8042537
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flash_on_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_off_disabled.png b/res/drawable-xxxhdpi/ic_grid_off_disabled.png
new file mode 100644 (file)
index 0000000..cfe8b61
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_off_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_off_indicator.png b/res/drawable-xxxhdpi/ic_grid_off_indicator.png
new file mode 100644 (file)
index 0000000..cdce73f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_off_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_off_normal.png b/res/drawable-xxxhdpi/ic_grid_off_normal.png
new file mode 100644 (file)
index 0000000..c73c1f1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_off_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_on_disabled.png b/res/drawable-xxxhdpi/ic_grid_on_disabled.png
new file mode 100644 (file)
index 0000000..58ff1fe
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_on_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_on_indicator.png b/res/drawable-xxxhdpi/ic_grid_on_indicator.png
new file mode 100644 (file)
index 0000000..ab2c31e
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_on_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_grid_on_normal.png b/res/drawable-xxxhdpi/ic_grid_on_normal.png
new file mode 100644 (file)
index 0000000..c7fd7e5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_grid_on_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_off_disabled.png b/res/drawable-xxxhdpi/ic_hdr_off_disabled.png
new file mode 100644 (file)
index 0000000..603eb56
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_off_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_off_indicator.png b/res/drawable-xxxhdpi/ic_hdr_off_indicator.png
new file mode 100644 (file)
index 0000000..f76250b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_off_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_off_normal.png b/res/drawable-xxxhdpi/ic_hdr_off_normal.png
new file mode 100644 (file)
index 0000000..9b4a03a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_off_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_on_disabled.png b/res/drawable-xxxhdpi/ic_hdr_on_disabled.png
new file mode 100644 (file)
index 0000000..945f880
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_on_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_on_indicator.png b/res/drawable-xxxhdpi/ic_hdr_on_indicator.png
new file mode 100644 (file)
index 0000000..a1869d5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_on_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_on_normal.png b/res/drawable-xxxhdpi/ic_hdr_on_normal.png
new file mode 100644 (file)
index 0000000..6f371d7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_on_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_off_disabled.png b/res/drawable-xxxhdpi/ic_hdr_plus_off_disabled.png
new file mode 100644 (file)
index 0000000..3f5d9cb
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_off_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_off_indicator.png b/res/drawable-xxxhdpi/ic_hdr_plus_off_indicator.png
new file mode 100644 (file)
index 0000000..b095187
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_off_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_off_normal.png b/res/drawable-xxxhdpi/ic_hdr_plus_off_normal.png
new file mode 100644 (file)
index 0000000..e465b99
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_off_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_on_disabled.png b/res/drawable-xxxhdpi/ic_hdr_plus_on_disabled.png
new file mode 100644 (file)
index 0000000..6cd786a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_on_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_on_indicator.png b/res/drawable-xxxhdpi/ic_hdr_plus_on_indicator.png
new file mode 100644 (file)
index 0000000..a453823
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_on_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_hdr_plus_on_normal.png b/res/drawable-xxxhdpi/ic_hdr_plus_on_normal.png
new file mode 100644 (file)
index 0000000..091fd40
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hdr_plus_on_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_share_disabled.png b/res/drawable-xxxhdpi/ic_share_disabled.png
new file mode 100644 (file)
index 0000000..c7a441a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_share_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_share_normal.png b/res/drawable-xxxhdpi/ic_share_normal.png
new file mode 100644 (file)
index 0000000..58a4696
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_share_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_back_disabled.png b/res/drawable-xxxhdpi/ic_switch_camera_back_disabled.png
new file mode 100644 (file)
index 0000000..4b340bb
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_back_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_back_indicator.png b/res/drawable-xxxhdpi/ic_switch_camera_back_indicator.png
new file mode 100644 (file)
index 0000000..80fa60c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_back_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_back_normal.png b/res/drawable-xxxhdpi/ic_switch_camera_back_normal.png
new file mode 100644 (file)
index 0000000..771212d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_back_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_front_disabled.png b/res/drawable-xxxhdpi/ic_switch_camera_front_disabled.png
new file mode 100644 (file)
index 0000000..658da63
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_front_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_front_indicator.png b/res/drawable-xxxhdpi/ic_switch_camera_front_indicator.png
new file mode 100644 (file)
index 0000000..d19631d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_front_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_switch_camera_front_normal.png b/res/drawable-xxxhdpi/ic_switch_camera_front_normal.png
new file mode 100644 (file)
index 0000000..aad537f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_switch_camera_front_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_10s_disabled.png b/res/drawable-xxxhdpi/ic_timer_10s_disabled.png
new file mode 100644 (file)
index 0000000..1858e1b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_10s_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_10s_indicator.png b/res/drawable-xxxhdpi/ic_timer_10s_indicator.png
new file mode 100644 (file)
index 0000000..37b91b7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_10s_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_10s_normal.png b/res/drawable-xxxhdpi/ic_timer_10s_normal.png
new file mode 100644 (file)
index 0000000..aefcbb1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_10s_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_3s_disabled.png b/res/drawable-xxxhdpi/ic_timer_3s_disabled.png
new file mode 100644 (file)
index 0000000..377d1a1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_3s_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_3s_indicator.png b/res/drawable-xxxhdpi/ic_timer_3s_indicator.png
new file mode 100644 (file)
index 0000000..475aec2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_3s_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_3s_normal.png b/res/drawable-xxxhdpi/ic_timer_3s_normal.png
new file mode 100644 (file)
index 0000000..dbbf9c3
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_3s_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_auto_disabled.png b/res/drawable-xxxhdpi/ic_timer_auto_disabled.png
new file mode 100644 (file)
index 0000000..bd02146
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_auto_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_auto_indicator.png b/res/drawable-xxxhdpi/ic_timer_auto_indicator.png
new file mode 100644 (file)
index 0000000..6e8118b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_auto_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_auto_normal.png b/res/drawable-xxxhdpi/ic_timer_auto_normal.png
new file mode 100644 (file)
index 0000000..aa9e6f1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_auto_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_off_disabled.png b/res/drawable-xxxhdpi/ic_timer_off_disabled.png
new file mode 100644 (file)
index 0000000..2bee3e7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_off_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_off_indicator.png b/res/drawable-xxxhdpi/ic_timer_off_indicator.png
new file mode 100644 (file)
index 0000000..201a4dd
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_off_indicator.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_off_normal.png b/res/drawable-xxxhdpi/ic_timer_off_normal.png
new file mode 100644 (file)
index 0000000..4d1dbc0
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_off_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_trash_disabled.png b/res/drawable-xxxhdpi/ic_trash_disabled.png
new file mode 100644 (file)
index 0000000..a527acc
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_trash_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_trash_normal.png b/res/drawable-xxxhdpi/ic_trash_normal.png
new file mode 100644 (file)
index 0000000..6933c26
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_trash_normal.png differ
diff --git a/res/drawable-xxxhdpi/ic_video_blanket.png b/res/drawable-xxxhdpi/ic_video_blanket.png
new file mode 100644 (file)
index 0000000..758efef
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_video_blanket.png differ
diff --git a/res/drawable-xxxhdpi/ic_video_disabled.png b/res/drawable-xxxhdpi/ic_video_disabled.png
new file mode 100644 (file)
index 0000000..1e49bc9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_video_disabled.png differ
diff --git a/res/drawable-xxxhdpi/ic_video_normal.png b/res/drawable-xxxhdpi/ic_video_normal.png
new file mode 100644 (file)
index 0000000..2712559
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_video_normal.png differ
diff --git a/res/drawable/ic_capture_camera.xml b/res/drawable/ic_capture_camera.xml
new file mode 100644 (file)
index 0000000..9433dbc
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:constantSize="true">
+    <item android:state_enabled="false">
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_camera_disabled" />
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_camera_normal" />
+    </item>
+</selector>
diff --git a/res/drawable/ic_capture_panorama.xml b/res/drawable/ic_capture_panorama.xml
new file mode 100644 (file)
index 0000000..c62f231
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:constantSize="true">
+    <item android:state_enabled="false">
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_pano_disabled" />
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_pano" />
+    </item>
+</selector>
diff --git a/res/drawable/ic_capture_refocus.xml b/res/drawable/ic_capture_refocus.xml
new file mode 100644 (file)
index 0000000..33c4307
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:constantSize="true">
+    <item android:state_enabled="false">
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_refocus_disabled" />
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_refocus" />
+    </item>
+</selector>
diff --git a/res/drawable/ic_capture_video.xml b/res/drawable/ic_capture_video.xml
new file mode 100644 (file)
index 0000000..d3600c8
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:constantSize="true">
+    <item android:state_enabled="false">
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_video_disabled" />
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_capture_video" />
+    </item>
+</selector>
index 318ad41..cb94342 100644 (file)
@@ -16,7 +16,7 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_enabled="false"
-          android:drawable="@drawable/ic_discard_disabled" />
+          android:drawable="@drawable/ic_trash_disabled" />
     <item android:state_enabled="true"
-          android:drawable="@drawable/ic_discard_normal" />
+          android:drawable="@drawable/ic_trash_normal" />
 </selector>
similarity index 63%
rename from res/drawable/ic_menu_share.xml
rename to res/drawable/ic_share.xml
index cffd8fc..aafb97c 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!-- Copyright (C) 2013 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false"
-          android:drawable="@drawable/ic_share_disabled" />
-    <item android:state_enabled="true"
-          android:drawable="@drawable/ic_share_normal" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:constantSize="true">
+    <item android:state_enabled="false">
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_share_disabled" />
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ic_share_normal" />
+    </item>
 </selector>
diff --git a/res/drawable/settings_cling.xml b/res/drawable/settings_cling.xml
new file mode 100644 (file)
index 0000000..9d04a08
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+          android:drawable="@drawable/stgs_cling_pressed" />
+    <item android:drawable="@drawable/stgs_cling" />
+</selector>
index 7bdd9c2..9e1f7bc 100644 (file)
         android:id="@+id/cancel_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="bottom|center_horizontal"
-        android:paddingTop="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_cancel"
         android:background="?android:attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/cancel_button_description" />
-      <ImageButton
-        android:id="@+id/done_button"
+      <FrameLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:src="@drawable/ic_confirm"
         android:layout_weight="1"
-        android:background="?android:attr/selectableItemBackgroundBorderless"
-        android:contentDescription="@string/done_button_description" />
+        android:background="@null" >
+        <ImageButton
+          android:id="@+id/done_button"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_gravity="center"
+          android:src="@drawable/ic_confirm"
+          android:background="?android:attr/selectableItemBackgroundBorderless"
+          android:contentDescription="@string/done_button_description" />
+      </FrameLayout>
       <ImageButton
         android:id="@+id/retake_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="top|center_horizontal"
-        android:paddingBottom="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_back"
         android:background="?android:attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/retake_button_description" />
index 69e6781..7aca76f 100644 (file)
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/photo_size_selection_title"
-        android:textSize="22sp"
-        android:textColor="@color/dialog_text_color"
-        android:layout_marginBottom="28dp" />
+        style="@style/fullscreen_dialog_title"
+        android:layout_margin="28dp" />
     <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="56dp"
         android:layout_weight="1"
+        android:layout_margin="28dp"
         android:textSize="20sp"
         android:textColor="@color/dialog_text_color"
         android:gravity="center_horizontal"
index 16acd42..e3dab88 100644 (file)
         android:layout_marginLeft="16dp"
         android:layout_weight="1">
         <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/remember_location_title"
-        android:textSize="22sp"
-        android:textColor="@color/dialog_text_color"
-        android:layout_marginBottom="28dp" />
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/remember_location_title"
+            style="@style/fullscreen_dialog_title"
+            android:layout_marginLeft="28dp"
+            android:layout_marginRight="28dp"
+            android:layout_marginBottom="28dp" />
         <ImageView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             <CheckBox
                 android:id="@+id/check_box"
                 android:layout_width="match_parent"
-                android:layout_height="160dp"
-                android:layout_marginBottom="104dp"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="72dp"
                 android:gravity="top"
                 android:paddingLeft="10dp"
+                android:paddingRight="10dp"
                 android:text="@string/remember_location_prompt"
                 android:textColor="@color/dialog_text_color"
-                android:textSize="16sp" />
+                android:textSize="16sp"
+                android:lineSpacingExtra="1.9sp" />
             <Button
                 android:id="@+id/confirm_button"
                 style="@style/BlueButton"
index 59b0d1a..9c4e298 100644 (file)
@@ -17,7 +17,7 @@
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:orientation="vertical"
-        android:background="@drawable/on_screen_hint_frame">
+        android:background="@android:drawable/toast_frame">
     <TextView
             android:id="@+id/message"
             android:layout_height="wrap_content"
index a2c9c70..b343f60 100644 (file)
         android:id="@+id/cancel_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="top|center_horizontal"
-        android:paddingTop="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_cancel"
         android:background="@null"
         android:contentDescription="@string/cancel_button_description" />
-      <ImageButton
-        android:id="@+id/done_button"
+      <FrameLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:src="@drawable/ic_confirm"
         android:layout_weight="1"
-        android:background="@null"
-        android:contentDescription="@string/done_button_description" />
+        android:background="@null" >
+        <ImageButton
+          android:id="@+id/done_button"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_gravity="center"
+          android:src="@drawable/ic_confirm"
+          android:background="@null"
+          android:contentDescription="@string/done_button_description" />
+      </FrameLayout>
       <ImageButton
         android:id="@+id/retake_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="bottom|center_horizontal"
-        android:paddingBottom="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_back"
         android:background="@null"
         android:contentDescription="@string/retake_button_description" />
index b85ebe2..545d14d 100644 (file)
         android:id="@+id/retake_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="left|center_vertical"
-        android:paddingLeft="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_back"
         android:background="?android:attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/retake_button_description" />
-      <ImageButton
-        android:id="@+id/done_button"
+      <FrameLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:src="@drawable/ic_confirm"
         android:layout_weight="1"
-        android:background="?android:attr/selectableItemBackgroundBorderless"
-        android:contentDescription="@string/done_button_description" />
+        android:background="@null" >
+        <ImageButton
+          android:id="@+id/done_button"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_gravity="center"
+          android:src="@drawable/ic_confirm"
+          android:background="?android:attr/selectableItemBackgroundBorderless"
+          android:contentDescription="@string/done_button_description" />
+      </FrameLayout>
       <ImageButton
         android:id="@+id/cancel_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="right|center_vertical"
-        android:paddingRight="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_cancel"
         android:background="?android:attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/cancel_button_description" />
index e40825a..4086889 100644 (file)
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
+        android:layout_margin="28dp"
         android:gravity="center"
         android:text="@string/photo_size_selection_title"
-        android:textSize="22sp"
-        android:textColor="@color/dialog_text_color" />
+        style="@style/fullscreen_dialog_title" />
     <include
         layout="@layout/aspect_ratio_selector"
         android:layout_width="match_parent"
@@ -63,6 +63,7 @@
         android:layout_height="0dp"
         android:layout_weight="1"
         android:textSize="20sp"
+        android:layout_margin="28dp"
         android:textColor="@color/dialog_text_color"
         android:gravity="center"
         android:text="@string/photo_aspect_ratio_selection_content" />
index 6ca50d8..fee5d64 100644 (file)
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/remember_location_title"
-        android:textSize="22sp"
-        android:textColor="@color/dialog_text_color"
-        android:layout_marginTop="28dp"
-        android:layout_marginBottom="28dp" />
+        style="@style/fullscreen_dialog_title"
+        android:layout_margin="28dp" />
     <ImageView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:src="@drawable/geo_opt_in_graphic"
-        android:layout_marginBottom="56dp"/>
+        android:layout_marginBottom="28dp"/>
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_marginLeft="44dp"
-        android:layout_marginRight="44dp"
+        android:layout_marginLeft="28dp"
+        android:layout_marginRight="28dp"
         android:layout_weight="1"
         android:orientation="horizontal" >
         <CheckBox
             android:layout_height="wrap_content"
             android:gravity="top"
             android:paddingLeft="10dp"
+            android:paddingRight="10dp"
             android:text="@string/remember_location_prompt"
             android:textColor="@color/dialog_text_color"
-            android:textSize="16sp" />
+            android:textSize="16sp"
+            android:lineSpacingExtra="1.9sp" />
     </LinearLayout>
 
     <Button
         android:id="@+id/confirm_button"
         style="@style/BlueButton"
         android:text="@string/startup_dialog_button_next"
-        android:layout_marginBottom="28dp"
-        android:layout_marginTop="28dp"/>
+        android:layout_marginBottom="18dp"
+        android:layout_marginTop="18dp" />
 </LinearLayout>
\ No newline at end of file
index 467b67f..1475f3b 100644 (file)
@@ -17,7 +17,7 @@
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:orientation="horizontal"
-        android:background="@drawable/on_screen_hint_frame">
+        android:background="@android:drawable/toast_frame">
     <TextView
             android:id="@+id/message"
             android:layout_height="wrap_content"
index 306820f..e00ad5d 100644 (file)
         android:id="@+id/retake_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="left|center_vertical"
-        android:paddingLeft="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_back"
         android:background="@null"
         android:contentDescription="@string/retake_button_description" />
-      <ImageButton
-        android:id="@+id/done_button"
+      <FrameLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:src="@drawable/ic_confirm"
         android:layout_weight="1"
-        android:background="@null"
-        android:contentDescription="@string/done_button_description" />
+        android:background="@null" >
+        <ImageButton
+          android:id="@+id/done_button"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_gravity="center"
+          android:src="@drawable/ic_confirm"
+          android:background="@null"
+          android:contentDescription="@string/done_button_description" />
+      </FrameLayout>
       <ImageButton
         android:id="@+id/cancel_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="right|center_vertical"
-        android:paddingRight="24dp"
+        android:layout_gravity="center"
+        android:padding="24dp"
         android:src="@drawable/ic_cancel"
         android:background="@null"
         android:contentDescription="@string/cancel_button_description" />
index 2523647..650ad8f 100644 (file)
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
 
+    <com.android.camera.ui.FaceView
+        android:id="@+id/face_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
     <com.android.camera.ui.GridLines
         android:id="@+id/grid_lines"
         android:layout_width="match_parent"
@@ -50,7 +55,6 @@
         android:visibility="invisible" />
 
     <ImageView
-        xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/intent_review_imageview"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
             android:text="@string/btn_filmstrip_toggle"
             android:contentDescription="@string/accessibility_filmstrip_toggle"/>
     </LinearLayout>
-
-    <View
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:background="@android:color/black"
-        android:id="@+id/leftLetterBoxer1"
-        android:visibility="gone"
-        />
-
-    <View
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:background="@android:color/black"
-        android:id="@+id/leftLetterBoxer2"
-        android:visibility="gone"
-        />
-
 </FrameLayout>
index 63af3e5..023c7dd 100644 (file)
@@ -31,6 +31,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
 
-        <include layout="@layout/filmstrip_bottom_controls" />
     </FrameLayout>
+
+    <include layout="@layout/filmstrip_bottom_controls" />
 </com.android.camera.widget.FilmstripLayout>
index 99e77c1..7e85ddc 100644 (file)
@@ -18,6 +18,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_gravity="center">
+
     <com.android.camera.ui.ProgressOverlay
         android:id="@+id/progress_overlay"
         android:layout_width="match_parent"
         android:clickable="true"
         android:background="@android:color/black"
         android:scaleType="fitCenter"/>
-    <FrameLayout
+
+    <com.android.camera.ui.CountDownView
+        android:id="@+id/count_down_view"
+        android:visibility="invisible"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
-        <ImageView
-            android:id="@+id/gcam_preview_thumb"
-            android:visibility="invisible"
-            android:layout_width="@dimen/capture_size"
-            android:layout_height="@dimen/capture_size"
-            android:scaleType="centerInside"
-            android:layout_gravity="top|right"
-            android:layout_marginTop="@dimen/capture_margin_top"
-            android:layout_marginRight="@dimen/capture_margin_top"
-            android:contentDescription="@string/switch_photo_filmstrip" />
-    </FrameLayout>
+        android:layout_height="match_parent" >
+        <TextView android:id="@+id/remaining_seconds"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:textSize="160dp"
+            android:textColor="@android:color/white"
+            android:gravity="center"/>
+    </com.android.camera.ui.CountDownView>
+
 </FrameLayout>
 
index 4606a42..c5ef660 100644 (file)
@@ -45,7 +45,7 @@
             <ImageButton
                 android:id="@+id/filmstrip_bottom_control_share"
                 style="@style/FilmstripBottomControlButton"
-                android:src="@drawable/ic_menu_share"
+                android:src="@drawable/ic_share"
                 android:visibility="invisible"
                 android:contentDescription="@string/share_button_description" />
 
index e62d551..563454f 100644 (file)
          android:layout_width="match_parent"
          android:layout_height="match_parent" >
         <TextView android:id="@+id/remaining_seconds"
-              android:layout_width="200dp"
-              android:layout_height="200dp"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
               android:textSize="160dp"
               android:textColor="@android:color/white"
-              android:layout_gravity="top|left"
               android:gravity="center"/>
     </com.android.camera.ui.CountDownView>
 
index 406a016..eaeb7c7 100644 (file)
@@ -25,7 +25,7 @@
       android:layout_width="@dimen/settings_cling_width"
       android:layout_height="wrap_content"
       android:text="@string/settings_cling_text"
-      android:background="@drawable/btn_cling"
+      android:background="@drawable/settings_cling"
       android:textColor="@android:color/white"
       android:layout_gravity="top|left"/>
 </com.android.camera.widget.SettingsCling>
\ No newline at end of file
diff --git a/res/raw/beep_once.ogg b/res/raw/beep_once.ogg
deleted file mode 100644 (file)
index 06e8be8..0000000
Binary files a/res/raw/beep_once.ogg and /dev/null differ
diff --git a/res/raw/beep_twice.ogg b/res/raw/beep_twice.ogg
deleted file mode 100644 (file)
index 94a7c14..0000000
Binary files a/res/raw/beep_twice.ogg and /dev/null differ
diff --git a/res/raw/shutter.ogg b/res/raw/shutter.ogg
new file mode 100644 (file)
index 0000000..503991b
Binary files /dev/null and b/res/raw/shutter.ogg differ
diff --git a/res/raw/staged_shot_complete.ogg b/res/raw/staged_shot_complete.ogg
new file mode 100644 (file)
index 0000000..89882ea
Binary files /dev/null and b/res/raw/staged_shot_complete.ogg differ
diff --git a/res/raw/timer_final_second.ogg b/res/raw/timer_final_second.ogg
new file mode 100644 (file)
index 0000000..79945f2
Binary files /dev/null and b/res/raw/timer_final_second.ogg differ
diff --git a/res/raw/timer_increment.ogg b/res/raw/timer_increment.ogg
new file mode 100644 (file)
index 0000000..e8d9d02
Binary files /dev/null and b/res/raw/timer_increment.ogg differ
index 8a75c9d..770c2ab 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapieksels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Raak hier om te herfokus"</string>
index 7ee3d25..2c28e4b 100644 (file)
@@ -36,7 +36,7 @@
     <string name="crop_action" msgid="6933589718464132714">"ከርክም"</string>
     <string name="trim_action" msgid="4736803320203951827">"አሳጥር"</string>
     <string name="set_as" msgid="5469055085024870081">"አዘጋጀው እንደ"</string>
-    <string name="video_err" msgid="1562566029875081552">"á\89ªá\8b²ዮ ማጫወት አልተቻለም።"</string>
+    <string name="video_err" msgid="1562566029875081552">"á\89ªá\8bµዮ ማጫወት አልተቻለም።"</string>
     <string name="title" msgid="8061744305671964703">"ርዕስ"</string>
     <string name="description" msgid="8193138501982849808">"መግለጫ"</string>
     <string name="time" msgid="5248213506417024287">"ሰዓት"</string>
@@ -84,7 +84,7 @@
     <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"ወደታች በሚቆጠርበት ጊዜ ድምጽ አሰማ"</string>
     <string name="setting_off" msgid="6782191065550276632">"ጠፍቷል"</string>
     <string name="setting_on" msgid="9086728135773197891">"በርቷል"</string>
-    <string name="pref_video_quality_title" msgid="5887153490982738588">"á\89ªá\8b²ዮ ጥራት"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"á\89ªá\8bµዮ ጥራት"</string>
     <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"አላፊ ጊዜ"</string>
     <string name="pref_camera_settings_category" msgid="4274141528139077830">"የካሜራ ቅንብሮች"</string>
     <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"የካምኮርደር ቅንብሮች"</string>
     <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"ትናንሽ ዓይኖች"</string>
     <string name="effect_backdropper_space" msgid="9133825395915767627">"ጠፈር ላይ"</string>
     <string name="effect_backdropper_sunset" msgid="7354053769863638757">"ፀሀይ ስትጠልቅ"</string>
-    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"á\8b¨á\8a¥á\88­á\88µá\8b\8e á\89ªá\8b²ዮ"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"á\8b¨á\8a¥á\88­á\88µá\8b\8e á\89ªá\8bµዮ"</string>
     <string name="video_snapshot_hint" msgid="2707403607250082339">"እየቀረጹ ሳሉ ፎቶ ለማንሳት ይንኩ።"</string>
     <string name="video_recording_started" msgid="3374878415050991030">"የቪዲዮ ቀረጻ ተጀምሯል።"</string>
     <string name="video_recording_stopped" msgid="4658626532857624974">"የቪዲዮ ቀረጻ ቆሟል።"</string>
     <string name="accessibility_menu_button" msgid="7692103503958544723">"የምናሌ አዝራር"</string>
     <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s አመልካች ሳጥን"</string>
     <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ወደ ፎቶ ቀይር"</string>
-    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"á\8b\88á\8b° á\89ªá\8b²ዮ ቀይር"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"á\8b\88á\8b° á\89ªá\8bµዮ ቀይር"</string>
     <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"ወደ ፓኖራማ ቀይር"</string>
     <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"ወደ ሉል ገጽታ ፎቶ ቀይር"</string>
     <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"ወደ ከፍተኛ ጥራት ቀይር"</string>
     <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"የሁነታ ዝርዝር ክፍት ነው"</string>
     <string name="media_accessibility_peek" msgid="234540330161031946">"ቀረጻ ተወስዷል"</string>
     <string name="photo_accessibility_peek" msgid="5934133371001677250">"ፎቶ ተነስቷል"</string>
-    <string name="video_accessibility_peek" msgid="7845916149291383132">"á\89ªá\8b²ዮ ተቀርጹዋል"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"á\89ªá\8bµዮ ተቀርጹዋል"</string>
     <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ወደ ካሜራ ይክፈቱ"</string>
     <string name="media_date_content_description" msgid="2155634843596817141">"በ%s ላይ የተወሰደ ማህደረመረጃ"</string>
     <string name="photo_date_content_description" msgid="5705865897898465619">"በ%s ላይ የተነሳ ፎቶ"</string>
-    <string name="video_date_content_description" msgid="2151884014634284456">"á\89 %s á\88\8bá\8b­ á\8b¨á\89°á\89\80á\88¨á\8c¸ á\89ªá\8b²ዮ"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"á\89 %s á\88\8bá\8b­ á\8b¨á\89°á\89\80á\88¨á\8c¸ á\89ªá\8bµዮ"</string>
     <string name="panorama_date_content_description" msgid="990703578639006144">"በ%s ላይ የተነሳ ፓኖራማ"</string>
     <string name="photosphere_date_content_description" msgid="4183741743409007876">"በ%s ላይ የተነሳ የሉል ገጽታ ፎቶ"</string>
     <string name="refocus_date_content_description" msgid="5630960320424345547">"በ%s ላይ የተነሳ የምስሪት ድብዘዛ"</string>
     <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ድርድር ፊልም"</string>
     <string name="capital_on" msgid="1118214824959797269">"በርቷል"</string>
     <string name="capital_off" msgid="3020696135020167263">"ጠፍቷል"</string>
-    <string name="video_control_play" msgid="6895236811408921715">"á\89ªá\8b²ዮ ያጫውቱ"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"á\89ªá\8bµዮ ያጫውቱ"</string>
     <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ጠፍቷል"</string>
     <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 ሰከንዶች"</string>
     <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 ስከንድ"</string>
     <string name="crop_save" msgid="2841974981340098579">"አስቀምጥ"</string>
     <string name="cannot_load_image" msgid="4100136187076585580">"ምስሉን መጫን አልተቻለም!"</string>
     <string name="switch_photo_filmstrip" msgid="1448511001008888767">"የድርድር ፊልም እይታ"</string>
-    <string name="setting_wallpaper" msgid="2397759659347872725">"á\8b¨á\8c\8dá\8bµá\8c\8dá\8b³ á\8b\88á\88¨á\89\80á\89µ በማዘጋጀት ላይ"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"á\88\8dá\8c£á\8d\8d  በማዘጋጀት ላይ"</string>
     <string name="mode_settings" msgid="2021937261522670921">"ቅንብሮች"</string>
     <string name="mode_camera" msgid="279763925715250603">"ካሜራ"</string>
-    <string name="mode_video" msgid="8633929034048169139">"á\89ªá\8b²ዮ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"á\89ªá\8bµዮ"</string>
     <string name="mode_photosphere" msgid="5082338476237291833">"የሉል ገጽታ ፎቶ"</string>
     <string name="mode_timelapse" msgid="1517168724627815453">"አላፊ ጊዜ"</string>
     <string name="mode_wideangle" msgid="1099640345041696830">"ሰፊ አንግል"</string>
     <string name="mode_panorama" msgid="6882648621305828861">"ፓኖራማ"</string>
     <string name="mode_refocus" msgid="172192967119469061">"የካሜራ መስታወት ድብዘዛ"</string>
     <string name="mode_camera_desc" msgid="3670807361165657278">"ወደ ካሜራ ሁነታ ቀይር"</string>
-    <string name="mode_video_desc" msgid="4058407412929464689">"á\8b\88á\8b° á\89ªá\8b²ዮ ካሜራ ቀይር"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"á\8b\88á\8b° á\89ªá\8bµዮ ካሜራ ቀይር"</string>
     <string name="mode_photosphere_desc" msgid="2403816283825579161">"ወደ ሉል ገጽታ ፎቶ ሁነታ ቀይር"</string>
     <string name="mode_panorama_desc" msgid="6023020404237519590">"ወደ ፓኖራማ ሁነታ ቀይር"</string>
     <string name="mode_refocus_desc" msgid="6171183297515508465">"ወደ የካሜራ መስታወት ድብዘዛ ሁነታ ቀይር"</string>
     <string name="button_change_announcement" msgid="3759686152778772111">"አዝራር አሁን %s ነው"</string>
     <string name="setting_location" msgid="4459859689227893838">"አካባቢ"</string>
     <string name="setting_back_camera_photo" msgid="256738900473265017">"የኋላ ካሜራ ፎቶ"</string>
-    <string name="setting_back_camera_video" msgid="5220819479408164689">"á\8b¨á\8a\8bá\88\8b á\8a«á\88\9cá\88« á\89ªá\8b²ዮ"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"á\8b¨á\8a\8bá\88\8b á\8a«á\88\9cá\88« á\89ªá\8bµዮ"</string>
     <string name="setting_front_camera_photo" msgid="4131886734622868637">"የፊት ካሜራ ፎቶ"</string>
-    <string name="setting_front_camera_video" msgid="2178799452805359752">"á\8b¨á\8d\8aá\89µ á\8a«á\88\9cá\88« á\89ªá\8b²ዮ"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"á\8b¨á\8d\8aá\89µ á\8a«á\88\9cá\88« á\89ªá\8bµዮ"</string>
     <string name="setting_default_camera" msgid="6954076799301004779">"ነባሪ ካሜራ"</string>
     <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"እገዛ እና ግብረመልስ"</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ በማስኬድ ላይ …"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"ከፍተኛ ጥራት 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"ከፍተኛ ጥራት 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"ዩኤችዲ 4ኬ"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s ሜጋፒክሰል"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s ሜጋፒክስሎች"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ዳግም ለማተኮር እዚህ ይንኩ"</string>
index 18cd768..6d7601f 100644 (file)
     <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"تبديل إلى وضع الصور"</string>
     <string name="accessibility_switch_to_video" msgid="8174781871592793967">"تبديل إلى وضع الفيديو"</string>
     <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"تبديل إلى بانوراما"</string>
-    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"تبديل إلى بانوراما 360 درجة"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"‏تبديل إلى بانوراما Photo Sphere"</string>
     <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"تبديل إلى جودة عالية"</string>
     <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"تبديل إلى إعادة التركيز"</string>
     <string name="accessibility_review_cancel" msgid="5462850829869569629">"الإلغاء بعد المراجعة"</string>
     <string name="photo_date_content_description" msgid="5705865897898465619">"‏صورة تمّ التقاطها في %s"</string>
     <string name="video_date_content_description" msgid="2151884014634284456">"‏مقطع فيديو تمّ التقاطه في %s"</string>
     <string name="panorama_date_content_description" msgid="990703578639006144">"‏بانوراما تم التقاطها في %s"</string>
-    <string name="photosphere_date_content_description" msgid="4183741743409007876">"‏بانوراما 360 درجة تمّ التقاطها في %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"‏بانوراما Photo Sphere تمّ التقاطها في %s"</string>
     <string name="refocus_date_content_description" msgid="5630960320424345547">"‏صورة بتركيز العدسة تمّ التقاطها في %s"</string>
     <string name="media_processing_content_description" msgid="8138587719107183754">"جارٍ معالجة الوسائط"</string>
     <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"تبديل قائمة الأوضاع"</string>
     <string name="mode_settings" msgid="2021937261522670921">"الإعدادات"</string>
     <string name="mode_camera" msgid="279763925715250603">"الكاميرا"</string>
     <string name="mode_video" msgid="8633929034048169139">"فيديو"</string>
-    <string name="mode_photosphere" msgid="5082338476237291833">"بانوراما 360 درجة"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"‏بانوراما Photo Sphere"</string>
     <string name="mode_timelapse" msgid="1517168724627815453">"لقطات متتابعة"</string>
     <string name="mode_wideangle" msgid="1099640345041696830">"زاوية واسعة"</string>
     <string name="mode_panorama" msgid="6882648621305828861">"بانوراما"</string>
     <string name="mode_refocus" msgid="172192967119469061">"تركيز العدسة"</string>
     <string name="mode_camera_desc" msgid="3670807361165657278">"التبديل إلى وضع الكاميرا"</string>
     <string name="mode_video_desc" msgid="4058407412929464689">"التبديل إلى كاميرا الفيديو"</string>
-    <string name="mode_photosphere_desc" msgid="2403816283825579161">"التبديل إلى وضع بانوراما 360 درجة"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"‏التبديل إلى وضع بانوراما Photo Sphere"</string>
     <string name="mode_panorama_desc" msgid="6023020404237519590">"التبديل إلى الوضع بانوراما"</string>
     <string name="mode_refocus_desc" msgid="6171183297515508465">"التبديل إلى وضع تركيز العدسة"</string>
     <string name="settings_open_desc" msgid="6914471293841793766">"فتح الإعدادات"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"دقة عالية 720 بكسل"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"دقة عالية 1080 بكسل"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"‏%1$s ميغابكسل"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"‏%1$d:%2$d ،%3$s ميغابكسل"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"لإعادة التركيز، المس هنا"</string>
index 47c5497..d6a7dcb 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD при 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD при 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксела"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мегапиксела"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Докоснете тук за повторно фокусиране"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
new file mode 100644 (file)
index 0000000..c43a947
--- /dev/null
@@ -0,0 +1,380 @@
+<?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="1175086483881127797">"ক্যামেরা"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"ক্যামকর্ডার"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"এই হিসাবে ছবি সেট করুন"</string>
+    <string name="delete" msgid="2714492172818940424">"মুছুন"</string>
+    <string name="share" msgid="8581089487762243115">"ভাগ করুন"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"প্যানোরামা ভাগ করুন"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ফটো হিসাবে ভাগ করুন"</string>
+    <string name="deleted" msgid="2036165115527228127">"মোছা হয়েছে"</string>
+    <string name="undo" msgid="5110048345890050107">"পূর্বাবস্থায় ফিরুন"</string>
+    <string name="details" msgid="4404020741542549488">"বিশদ বিবরণ"</string>
+    <string name="close" msgid="4826166926297479820">"বন্ধ করুন"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"মানচিত্রে দেখান"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"বামদিকে ঘোরান"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"ডানদিকে ঘোরান"</string>
+    <string name="edit" msgid="2776879395749004347">"সম্পাদনা করুন"</string>
+    <string name="crop_action" msgid="6933589718464132714">"ক্রপ"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ট্রিম করুন"</string>
+    <string name="set_as" msgid="5469055085024870081">"এই হিসাবে সেট করুন"</string>
+    <string name="video_err" msgid="1562566029875081552">"ভিডিও প্লে করা যাবে না৷"</string>
+    <string name="title" msgid="8061744305671964703">"শীর্ষক"</string>
+    <string name="description" msgid="8193138501982849808">"বর্ণনা"</string>
+    <string name="time" msgid="5248213506417024287">"সময়"</string>
+    <string name="location" msgid="564326205780827668">"অবস্থান"</string>
+    <string name="path" msgid="5927003361865586353">"পথ"</string>
+    <string name="width" msgid="7045750687833828758">"প্রস্থ"</string>
+    <string name="height" msgid="5186001199353423689">"উচ্চতা"</string>
+    <string name="orientation" msgid="3883761294106680270">"সজ্জা"</string>
+    <string name="duration" msgid="5316211067383665008">"সময়কাল"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME প্রকার"</string>
+    <string name="file_size" msgid="6841070748357980676">"ফাইলের আকার"</string>
+    <string name="maker" msgid="698691509121545856">"নির্মাতা"</string>
+    <string name="model" msgid="8547493604023069452">"মডেল"</string>
+    <string name="flash" msgid="995041910749174196">"ফ্ল্যাশ"</string>
+    <string name="aperture" msgid="2453802098282814022">"অ্যাপারচার"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ফোকাল দৈর্ঘ্য"</string>
+    <string name="white_balance" msgid="1600142743496129085">"হোয়াইট ব্যালান্স"</string>
+    <string name="exposure_time" msgid="949787291620767754">"এক্সপোজার সময়"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"মিমি"</string>
+    <string name="manual" msgid="2444400953521760140">"ম্যানুয়াল"</string>
+    <string name="auto" msgid="2552649885114400474">"স্বতঃ"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ফ্ল্যাশ জলেছে"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ফ্ল্যাশ হয়নি"</string>
+    <string name="unknown" msgid="564184550182858146">"অজানা"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"এই আইটেমটি স্থানীয় অবস্থানে সংরক্ষিত এবং অফলাইনে উপলব্ধ।"</string>
+    <string name="please_wait" msgid="1416313324505140068">"দয়া করে অপেক্ষা করুন"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"ক্যামেরা ত্রুটি"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"ক্যামেরা সাথে সংযোগ করতে পারবেন না।"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"নিরাপত্তা নীতিগুলির জন্য ক্যামেরা অক্ষমিত করা হয়েছে।"</string>
+    <string name="wait" msgid="765601745709933047">"দয়া করে অপেক্ষা করুন..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"ক্যামেরা ব্যবহার করার পূর্বে একটি SD কার্ড ঢোকান।"</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD কার্ড প্রস্তুত করা হচ্ছে..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD কার্ড অ্যাক্সেস করা যায়নি৷"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"সময় ব্যয় রেকর্ডিং"</string>
+    <string name="capturing" msgid="5255164204641920893">"ক্যাপচার করা হচ্ছে"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"ক্যামেরা চয়ন করুন"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"পিছনে"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"সামনের"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"অবস্থান সংরক্ষণ করুন"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"অবস্থান"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"কাউন্টডাউন টাইমার"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"কাউন্টডাউনের সময় বীপ"</string>
+    <string name="setting_off" msgid="6782191065550276632">"বন্ধ করুন"</string>
+    <string name="setting_on" msgid="9086728135773197891">"চালু করুন"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"ভিডিও গুণমান"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"সময় ব্যয়"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"ক্যামেরা সেটিংস"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ক্যামকর্ডার সেটিংস"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ছবির আকার"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"বৃহত্‍"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"মাঝারি"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"ক্ষুদ্র"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"ফোকাস মোড"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"স্বতঃ"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"অনন্ত"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"ম্যাক্রো"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"স্বয়ং"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"অনন্ত"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"ম্যাক্রো"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ফ্ল্যাশ মোড"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ফ্ল্যাশ মোড"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"স্বতঃ"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"চালু করুন"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"বন্ধ করুন"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"ফ্ল্যাশ স্বতঃ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ফ্ল্যাশ চালু"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ফ্ল্যাশ বন্ধ"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"হোয়াইট ব্যালান্স"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"হোয়াইট ব্যালান্স"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"স্বতঃ"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"দ্যুতিময়"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"দিবালোক"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ফ্লুরোসেণ্ট"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"মেঘলা"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"স্বয়ং"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"দ্যুতিময়"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"দিবালোক"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ফ্লুরোসেণ্ট"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"মেঘলা"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"দৃশ্য মোড"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ চালু করুন"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ বন্ধ করুন"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR চালু করুন"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"পার্টি"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"কোনো কিছুই নয়"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"অ্যাকশন"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"রাত্রি"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"সূর্যাস্ত"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"পার্টি"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"টাইমার বন্ধ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"১ সেকেন্ড"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"৩ সেকেন্ড"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"১০ সেকেন্ড"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"১৫ সেকেন্ড"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"দৃশ্য মোডে নির্বাচনযোগ্য নয়।"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"এক্সপোজার"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"এক্সপোজার"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"সামনের ক্যামেরা"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"পিছনের ক্যামেরা"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ঠিক আছে"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"বাতিল"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"আপনার SD কার্ডে আর পর্যাপ্ত নেই। গুণমান সেটিংস পরিবর্তন করুন অথবা কিছু চিত্র বা অন্য ফাইলগুলি মুছে দিন।"</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"আকার সীমায় পৌঁছে গেছে।"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"খুব দ্রুত"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"প্যানোরামা প্রস্তুত করা হচ্ছে"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"প্যানোরামা সংরক্ষণ করা যায়নি৷"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"প্যানোরামা"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"প্যানোরামা ক্যাপচার করা হচ্ছে"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"পূর্ববর্তী প্যানোরামার জন্য অপেক্ষা করা হচ্ছে"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"সংরক্ষণ হচ্ছে..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"প্যানোরামা রেন্ডার করা হচ্ছে"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ফোকাস করতে স্পর্শ করুন।"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"প্রভাবগুলি"</string>
+    <string name="effect_none" msgid="3102797925086872636">"কোনো কিছুই নয়"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"কুঈজ"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"বড় চোখ"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"বড় মুখ"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"ছোট মুখ"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"বড় নাক"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"ছোট চোখ"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"ব্যবধানে"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"সূর্যাস্ত"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"আপনার ভিডিও"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"রেকর্ডিংয়ের সময় ফটো তুলতে স্পর্শ করুন।"</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"ভিডিও রেকর্ডিং শুরু হয়েছে।"</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"ভিডিও রেকর্ড করা বন্ধ হয়ে গেছে।"</string>
+    <string name="clear_effects" msgid="6192797848995967992">"প্রভাবগুলি সাফ করুন"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"সিলি ফেস"</string>
+    <string name="effect_background" msgid="1358432220077975015">"পশ্চাদপট"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"শাটার"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"বাতিল"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"মেনু বোতাম"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s চেকবাক্স"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ফটোতে স্যুইচ করুন"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"ভিডিওতে স্যুইচ করুন"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"প্যানোরামাতে  স্যুইচ করুন"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere এ স্যুইচ করুন"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"উচ্চ গুণমানের স্যুইচ করুন"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"পুনঃফোকাসে স্যুইচ করুন"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"পর্যালোচনা বাতিল"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"পর্যালোচনা সম্পন্ন"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"পুনরায় তোলা ফটো/ভিডিও পর্যালোচনা করুন"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"বিকল্পগুলি"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"মোড তালিকা বন্ধ হয়েছে"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"মোড তালিকা খোলা"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"ক্যাপচার করা হয়েছে"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ফটো তোলা হয়েছে"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"ভিডিও নেওয়া হয়েছে"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ক্যামেরাতে আনলক করুন"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for media_date_content_description (2155634843596817141) -->
+    <skip />
+    <!-- String.format failed for translation -->
+    <!-- no translation found for photo_date_content_description (5705865897898465619) -->
+    <skip />
+    <!-- String.format failed for translation -->
+    <!-- no translation found for video_date_content_description (2151884014634284456) -->
+    <skip />
+    <!-- String.format failed for translation -->
+    <!-- no translation found for panorama_date_content_description (990703578639006144) -->
+    <skip />
+    <!-- String.format failed for translation -->
+    <!-- no translation found for photosphere_date_content_description (4183741743409007876) -->
+    <skip />
+    <!-- String.format failed for translation -->
+    <!-- no translation found for refocus_date_content_description (5630960320424345547) -->
+    <skip />
+    <string name="media_processing_content_description" msgid="8138587719107183754">"মিডিয়া প্রক্রিয়া করা হচ্ছে"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"মোড তালিকা টগল করুন"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"মোড তালিকা"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ফিল্মস্ট্রিপটি টগল করুন"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ফিল্মস্ট্রিপ"</string>
+    <string name="capital_on" msgid="1118214824959797269">"চালু করুন"</string>
+    <string name="capital_off" msgid="3020696135020167263">"বন্ধ করুন"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"ভিডিও চালান"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"বন্ধ করুন"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"০.৫ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"১ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"১.৫ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"২ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"২.৫ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"৩ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"৪ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"৫ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"৬ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"১০ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"১২ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"১৫ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"২৪ সেকেন্ড"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"০.৫ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"১ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"১.৫ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"২ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"২.৫ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"৩ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"৪ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"৫ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"৬ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"১০ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"১২ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"১৫ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"২৪ মিনিট"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"০.৫ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"১ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"১.৫ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"২ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"২.৫ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"৩ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"৪ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"৫ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"৬ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"১০ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"১২ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"১৫ ঘন্টা"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"২৪ ঘন্টা"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"সেকেন্ড"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"মিনিট"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"ঘন্টা"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"সম্পন্ন"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"সময় বিরতি সেট করুন"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"সময় ব্যয় বৈশিষ্ট্যটি বন্ধ। সময় বিরতি সেট করতে এটিকে চালু করুন।"</string>
+    <string name="set_duration" msgid="1638453882581604341">"সময়কাল সেকেন্ডে সেট করুন"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"একটি ফটো তুলতে কাউন্ট ডাউন হচ্ছে"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ফটোর অবস্থান মনে রাখবেন?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"ফটো ও ভিডিওগুলি যেখানে তোলা হয়েছে সেই অবস্থানের সঙ্গে সেগুলি ট্যাগ করুন।\n\nঅন্য অ্যাপ্লিকেশানগুলি আপনার সংরক্ষিত চিত্রগুলির সহ এই তথ্য অ্যাক্সেস করতে পারবে।"</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"না ধন্যবাদ"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"হ্যাঁ"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"আরো বিকল্প"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"সেটিংস"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Tiny Planet তৈরি করুন"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Tiny Planet সংরক্ষণ করা হচ্ছে…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"জুম"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"ঘোরান"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ফটো সম্পাদক"</string>
+    <string name="crop_save" msgid="2841974981340098579">"সংরক্ষণ করুন"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"চিত্রটি লোড করা যাবে না!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ফিল্মস্ট্রিপ দৃশ্য"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"ওয়ালপেপার সেট করা"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"সেটিংস"</string>
+    <string name="mode_camera" msgid="279763925715250603">"ক্যামেরা"</string>
+    <string name="mode_video" msgid="8633929034048169139">"ভিডিও"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"সময় ব্যয়"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"চওড়া কোণ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"প্যানোরামা"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"লেন্স ব্লার"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"ক্যামেরা মোডে স্যুইচ করুন"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"ভিডিও ক্যামেরাতে স্যুইচ করুন"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphere মোডে স্যুইচ করুন"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"প্যানোরামা মোডে স্যুইচ করুন"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"লেন্স ব্লার মোডে যান"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"সেটিংস খুলুন"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"সেটিংস বন্ধ করুন"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR প্লাস বন্ধ"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR প্লাস চালু"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR বন্ধ"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR চালু"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ফ্ল্যাশ বন্ধ"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"ফ্ল্যাশ স্বতঃ"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ফ্ল্যাশ চালু"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ফ্ল্যাশ বন্ধ"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ ফ্ল্যাশ স্বয়ংক্রিয়"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ফ্ল্যাশ চালু"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"টর্চ চালু করুন"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"টর্চ বন্ধ করুন"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"পিছনের ক্যামেরা"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"সামনের ক্যামেরা"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"গ্রিড লাইন বন্ধ"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"গ্রিড লাইন চালু"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"কাউন্টডাউন টাইমার বন্ধ রয়েছে"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"কাউন্টডাউন টাইমারের সময় ৩ সেকেন্ডে সেট করা হয়েছে"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"কাউন্টডাউন টাইমারের সময় ১০ সেকেন্ডে সেট করা হয়েছে"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"আরো বিকল্প"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"বাতিল"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"সম্পন্ন"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"পুনরায় নিন"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"ভাগ করুন"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"দেখুন"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"সম্পাদনা করুন"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"মুছুন"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"ম্যানুয়াল এক্সপোজার ঘাটতিপূরণ"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"এক্সপোজার ঘাটতিপূরণ -২"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"এক্সপোজার ঘাটতিপূরণ -১"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"এক্সপোজার ঘাটতিপূরণ ০"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"এক্সপোজার ঘাটতিপূরণ +১"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"এক্সপোজার ঘাটতিপূরণ: +২"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"এখন বোতাম হল %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"অবস্থান"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"ডিভাইসের পিছনের ক্যামেরার ফটোর"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"ডিভাইসের পিছনের ক্যামেরার ভিডিওর"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"সামনের ক্যামেরার ফটোর"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"সামনের ক্যামেরার ভিডিওর"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"ডিফল্ট ক্যামেরা"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"সহায়তা এবং প্রতিক্রিয়া"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ প্রক্রিয়াকরণ করা হচ্ছে…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"মুক্ত উৎস লাইসেন্স"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"সাধারণ সেটিংস"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"রেজোলিউশন এবং গুণমান"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"সম্পর্কে"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"বিল্ড সংস্করণ"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"নিম্ন"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"উচ্চ"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s মেগাপিক্সেল"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s মেগাপিক্সেল"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"পুনঃফোকাস করার জন্য এখানে স্পর্শ করুন"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"আরো বিকল্প"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"ম্যানুয়াল এক্সপোজার"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"সেটিংস-এ, রেজোলিউশন এবং গুণমান পরিবর্তন করুন, বা উন্নত বৈশিষ্ট্যগুলি ব্যবহার করে দেখুন৷"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ফটোর আকার চয়ন করুন"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"আপনি এই সেটিংসটি পরে পরিবর্তন করতে পারেন৷"</string>
+    <string name="share_to" msgid="5144911209144798122">"এর সাথে ভাগ করুন"</string>
+    <string name="edit_with" msgid="615569327230783971">"এর মাধ্যমে সম্পাদনা করুন"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"পরবর্তী"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ঠিক আছে, বুঝেছি"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"সম্পূর্ণ সেন্সর \n(৪:৩)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"কাটছাঁট করা সেন্সর \n(১৬:৯)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"০"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"১"</string>
+</resources>
index cd9fb1d..e6eb5f9 100644 (file)
     <string name="setting_front_camera_photo" msgid="4131886734622868637">"Foto de càmera frontal"</string>
     <string name="setting_front_camera_video" msgid="2178799452805359752">"Vídeo de càmera frontal"</string>
     <string name="setting_default_camera" msgid="6954076799301004779">"Càmera predeterminada"</string>
-    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Ajuda i comentaris"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Ajuda i suggeriments"</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"Processant HDR+..."</string>
     <string name="open_source_licenses" msgid="2169711954264883060">"Llicències de codi obert"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"Configuració general"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"720p, alta definició"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"1.080p, alta definició"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapíxels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapíxels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Per reenfocar, toca aquí"</string>
index 0a363bd..950f7b9 100644 (file)
     <string name="set_duration" msgid="1638453882581604341">"Nastavit dobu v sekundách"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"Odpočítávání spouště fotoaparátu"</string>
     <string name="remember_location_title" msgid="3045040613094030429">"Pamatovat, kde byly fotky pořízeny?"</string>
-    <string name="remember_location_prompt" msgid="5104210757873140169">"Přidejte do fotek a videí označení míst, kde jste je pořídili.\n\nOstatní aplikace budou mít k těmto informacím přístup společně s přístupem k uloženým obrázkům."</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Přidejte do fotek a videí označení míst, kde jste je pořídili.\n\nOstatní aplikace budou mít k těmto informacím přístup společně s přístupem k uloženým obrázkům."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"Díky, nemám zájem"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"Ano"</string>
     <string name="camera_menu_more_label" msgid="7951917844735828365">"DALŠÍ MOŽNOSTI"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s Mpx"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Mpx"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Chcete-li změnit zaostření, klepněte sem."</string>
     <string name="pref_category_advanced" msgid="5921085080077574872">"Pokročilé"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Ruční expozice"</string>
     <string name="settings_cling_text" msgid="5368054627268181292">"V Nastavení můžete změnit rozlišení a kvalitu nebo vyzkoušet pokročilé funkce."</string>
-    <string name="photo_size_selection_title" msgid="2789753590719172645">"Výběr velikosti fotky"</string>
-    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Později to můžete změnit v Nastavení."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Vyberte velikost fotky"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Poměr stran můžete později změnit v Nastaveních."</string>
     <string name="share_to" msgid="5144911209144798122">"Sdílet na"</string>
     <string name="edit_with" msgid="615569327230783971">"Upravit ve službě"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"DALŠÍ"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"OK, ROZUMÍM"</string>
-    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Celý obraz senzoru \n(4:3)"</string>
-    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Oříznout obraz senzoru \n(16:9)"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Celý obraz senzoru \n(4 : 3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Oříznout obraz senzoru \n(16 : 9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
     <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
 </resources>
index cd5d26a..ac5d215 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Tryk her for at skifte fokus"</string>
index 029a808..03664a7 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD mit 720 Pixeln"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD mit 1080 Pixeln"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s Megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Megapixel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Zum Neufokussieren hier tippen"</string>
index 6ab0425..37416f0 100644 (file)
@@ -22,7 +22,7 @@
     <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
     <string name="set_image" msgid="3969690281401045698">"Ορισμός εικόνας ως"</string>
     <string name="delete" msgid="2714492172818940424">"Διαγραφή"</string>
-    <string name="share" msgid="8581089487762243115">"Î\9aοινή Ï\87Ï\81ήση"</string>
+    <string name="share" msgid="8581089487762243115">"Î\9aοινοÏ\80οίηση"</string>
     <string name="share_panorama" msgid="3558466186935359444">"Κοινή χρήση πανοράματος"</string>
     <string name="share_as_photo" msgid="4831213580709167218">"Κοινή χρήση ως φωτογραφίας"</string>
     <string name="deleted" msgid="2036165115527228127">"Διαγράφηκε"</string>
@@ -71,7 +71,7 @@
     <string name="no_storage" product="default" msgid="5922012950780548098">"Εισαγάγετε κάρτα SD πριν χρησιμοποιήσετε τη φωτογραφική μηχανή."</string>
     <string name="preparing_sd" product="default" msgid="7435693655017362767">"Προετοιμασία κάρτας SD…"</string>
     <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Δεν ήταν δυνατή η πρόσβαση στην κάρτα SD."</string>
-    <string name="time_lapse_title" msgid="3267978566401228497">"Εγγραφή παρέλευσης χρόνου"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Εγγραφή time lapse"</string>
     <string name="capturing" msgid="5255164204641920893">"Λήψη"</string>
     <string name="pref_camera_id_title" msgid="4680648115225411185">"Επιλογή φωτ. μηχανής"</string>
     <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Πίσω"</string>
@@ -85,7 +85,7 @@
     <string name="setting_off" msgid="6782191065550276632">"Ανενεργό"</string>
     <string name="setting_on" msgid="9086728135773197891">"Ενεργό"</string>
     <string name="pref_video_quality_title" msgid="5887153490982738588">"Ποιότητα βίντεο"</string>
-    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Παρέλευση χρόνου"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Time lapse"</string>
     <string name="pref_camera_settings_category" msgid="4274141528139077830">"Ρυθμίσεις φωτογραφικής μηχανής"</string>
     <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Ρυθμίσεις βιντεοκάμερας"</string>
     <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Μέγεθος εικόνας"</string>
     <string name="time_lapse_hours" msgid="5294001144133261436">"ώρες"</string>
     <string name="time_lapse_interval_set" msgid="2418594453248958440">"Τέλος"</string>
     <string name="set_time_interval" msgid="2531393962847535331">"Ορισμός χρονικού διαστήματος"</string>
-    <string name="set_time_interval_help" msgid="64145154088021389">"Î\97 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γία Ï\80αÏ\81έλεÏ\85Ï\83ηÏ\82 Ï\87Ï\81Ï\8cνοÏ\85 έχει απενεργοποιηθεί. Ενεργοποιήστε την για να ορίσετε το χρονικό διάστημα."</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Î\97 ÎµÎ³Î³Ï\81αÏ\86ή time lapse έχει απενεργοποιηθεί. Ενεργοποιήστε την για να ορίσετε το χρονικό διάστημα."</string>
     <string name="set_duration" msgid="1638453882581604341">"Ορισμός διάρκειας σε δευτερόλεπτα"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"Αντίστροφη μέτρηση για λήψη φωτογραφίας"</string>
     <string name="remember_location_title" msgid="3045040613094030429">"Απομνημόνευση τοποθεσίας φωτογραφιών;"</string>
     <string name="cancel_button_description" msgid="3801167024006905033">"Ακύρωση"</string>
     <string name="done_button_description" msgid="1334963435441544592">"Τέλος"</string>
     <string name="retake_button_description" msgid="4234613030674787714">"Νέα λήψη"</string>
-    <string name="share_button_description" msgid="5108508790540832053">"Î\9aοινή Ï\87Ï\81ήση"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Î\9aοινοÏ\80οίηση"</string>
     <string name="view_button_description" msgid="4985768837891362075">"Προβολή"</string>
     <string name="edit_button_description" msgid="98550816724901925">"Επεξεργασία"</string>
     <string name="delete_button_description" msgid="2251065309677200911">"Διαγραφή"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Για επανάληψη εστίασης, αγγίξτε εδώ"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
new file mode 100644 (file)
index 0000000..50c2d7f
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Camera"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Camcorder"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Set picture as"</string>
+    <string name="delete" msgid="2714492172818940424">"Delete"</string>
+    <string name="share" msgid="8581089487762243115">"Share"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Share panorama"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Share as photo"</string>
+    <string name="deleted" msgid="2036165115527228127">"Deleted"</string>
+    <string name="undo" msgid="5110048345890050107">"UNDO"</string>
+    <string name="details" msgid="4404020741542549488">"Details"</string>
+    <string name="close" msgid="4826166926297479820">"Close"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Show on map"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Rotate left"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Rotate right"</string>
+    <string name="edit" msgid="2776879395749004347">"Edit"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Crop"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Trim"</string>
+    <string name="set_as" msgid="5469055085024870081">"Set as"</string>
+    <string name="video_err" msgid="1562566029875081552">"Cannot play video"</string>
+    <string name="title" msgid="8061744305671964703">"Title"</string>
+    <string name="description" msgid="8193138501982849808">"Description"</string>
+    <string name="time" msgid="5248213506417024287">"Time"</string>
+    <string name="location" msgid="564326205780827668">"Location"</string>
+    <string name="path" msgid="5927003361865586353">"Path"</string>
+    <string name="width" msgid="7045750687833828758">"Width"</string>
+    <string name="height" msgid="5186001199353423689">"Height"</string>
+    <string name="orientation" msgid="3883761294106680270">"Orientation"</string>
+    <string name="duration" msgid="5316211067383665008">"Duration"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME type"</string>
+    <string name="file_size" msgid="6841070748357980676">"File size"</string>
+    <string name="maker" msgid="698691509121545856">"Maker"</string>
+    <string name="model" msgid="8547493604023069452">"Model"</string>
+    <string name="flash" msgid="995041910749174196">"Flash"</string>
+    <string name="aperture" msgid="2453802098282814022">"Aperture"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Focal Length"</string>
+    <string name="white_balance" msgid="1600142743496129085">"White balance"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Exposure time"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Manual"</string>
+    <string name="auto" msgid="2552649885114400474">"Auto"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Flash fired"</string>
+    <string name="flash_off" msgid="7889323512830926273">"No flash"</string>
+    <string name="unknown" msgid="564184550182858146">"Unknown"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"This item is stored locally and available offline."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Please wait"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Camera error"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Can\'t connect to the camera."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Camera has been disabled because of security policies."</string>
+    <string name="wait" msgid="765601745709933047">"Please wait…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Insert an SD card before using the camera."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"Preparing SD card…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Couldn\'t access SD card."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Time lapse recording"</string>
+    <string name="capturing" msgid="5255164204641920893">"Capturing"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Choose camera"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Back"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Front"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Save location"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"LOCATION"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Countdown timer"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Beep during countdown"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Off"</string>
+    <string name="setting_on" msgid="9086728135773197891">"On"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Video quality"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Time lapse"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Camera settings"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Camcorder settings"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Picture size"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Large"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Medium"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Small"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Focus mode"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Auto"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Infinity"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Macro"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"AUTO"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"INFINITY"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MACRO"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Flash mode"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"FLASH MODE"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Auto"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"On"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Off"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"FLASH AUTO"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"FLASH ON"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"FLASH OFF"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"White balance"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"WHITE BALANCE"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Auto"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Incandescent"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Daylight"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Fluorescent"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Cloudy"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AUTO"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"INCANDESCENT"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"DAYLIGHT"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLUORESCENT"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"CLOUDY"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Scene mode"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Auto"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ON"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ OFF"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ON"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR OFF"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Action"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Night"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Sunset"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Party"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"NONE"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ACTION"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"NIGHT"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"SUNSET"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"PARTY"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"TIMER OFF"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SECOND"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SECONDS"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SECONDS"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SECONDS"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Not selectable in scene mode."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Exposure"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"EXPOSURE"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"FRONT CAMERA"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"BACK CAMERA"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"OK"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Cancel"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"Your SD card is running out of space. Change the quality setting or delete some images or other files."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Size limit reached."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Too fast"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Preparing panorama"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Couldn\'t save panorama."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Panorama"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Capturing panorama"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Waiting for previous panorama"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Saving…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Rendering panorama"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Touch to focus."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Effects"</string>
+    <string name="effect_none" msgid="3102797925086872636">"None"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Squeeze"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Big eyes"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Big mouth"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Small mouth"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Big nose"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Small eyes"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"In space"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Sunset"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Your video"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Touch to take photo while recording."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Video recording has started."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Video recording has stopped."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Clear effects"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"SILLY FACES"</string>
+    <string name="effect_background" msgid="1358432220077975015">"BACKGROUND"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Shutter"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Cancel"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Menu button"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s tick box"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Switch to photo"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Switch to video"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Switch to panorama"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Switch to Photo Sphere"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Switch to high quality"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Switch to Refocus"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Review cancel"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Review done"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Review retake"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Options"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Mode list closed"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Mode list open"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Capture taken"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Photo taken"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Video taken"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Unlock to Camera"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Media taken on %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Photo taken on %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Video taken on %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Panorama taken on %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"Photo Sphere taken on %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Lens blur taken on %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Media processing"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Toggle mode list"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Mode list"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Toggle filmstrip"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Filmstrip"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ON"</string>
+    <string name="capital_off" msgid="3020696135020167263">"OFF"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Play Video"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Off"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 second"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 seconds"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 minute"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 minutes"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 hour"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 hours"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 hours"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"seconds"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"minutes"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"hours"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Done"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Set Time Interval"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Time lapse feature is off. Turn it on to set time interval."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Set duration in seconds"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Counting down to take a photo"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Remember photo locations?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Tag your photos and videos with the locations where they are taken.\n\nOther apps can access this information along with your saved images."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"No, thanks"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Yes"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"MORE OPTIONS"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"SETTINGS"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Create Tiny Planet"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Saving Tiny Planet …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Zoom"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Rotate"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Photo Editor"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Save"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Cannot load the image!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Filmstrip view"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Setting wallpaper"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Settings"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Camera"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Video"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Time Lapse"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Wide Angle"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Panorama"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Lens Blur"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Switch to Camera Mode"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Switch to Video Camera"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Switch to Photo Sphere Mode"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Switch to Panorama Mode"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Switch to Lens Blur Mode"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Open settings"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Close settings"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus off"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus on"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR off"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR on"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Flash off"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Flash auto"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Flash on"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ flash off"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ flash auto"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ flash on"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Torch on"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Torch off"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Back camera"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Front camera"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Grid lines off"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Grid lines on"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Countdown timer is off"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Countdown timer duration is set to 3 seconds"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Countdown timer duration is set to 10 seconds"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"More Options"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Cancel"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Done"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Retake"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Share"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"View"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Edit"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Delete"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Manual Exposure Compensation"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Exposure Compensation -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Exposure Compensation -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Exposure Compensation 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Exposure Compensation +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Exposure Compensation +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Button is now %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Location"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Back camera photo"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Back camera video"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Front camera photo"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Front camera video"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Default Camera"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Help &amp; feedback"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"Processing HDR+ …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Open-source licences"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"General Settings"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Resolution &amp; quality"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"About"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Build version"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Low"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"High"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"To refocus, touch here"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Advanced"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Manual exposure"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"In Settings, change resolution and quality, or try advanced features."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Choose photo size"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"You can change this later in Settings."</string>
+    <string name="share_to" msgid="5144911209144798122">"Share to"</string>
+    <string name="edit_with" msgid="615569327230783971">"Edit with"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"NEXT"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"OK, GOT IT"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Full sensor \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Cropped sensor \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 30ccfc9..50c2d7f 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"To refocus, touch here"</string>
index 30ccfc9..50c2d7f 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"To refocus, touch here"</string>
index 5008cba..68853f8 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapíxeles"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s MP"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Toca para volver a enfocar"</string>
index 955ad00..77bbe3d 100644 (file)
     <string name="set_duration" msgid="1638453882581604341">"Define la duración en segundos"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"Cuenta atrás para hacer una foto"</string>
     <string name="remember_location_title" msgid="3045040613094030429">"¿Recordar ubicaciones de las fotos?"</string>
-    <string name="remember_location_prompt" msgid="5104210757873140169">"Etiqueta tus fotos y vídeos con las ubicaciones donde se han realizado.\n\nOtras aplicaciones pueden acceder a esta información, así como a las imágenes guardadas."</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Etiquetar tus fotos y vídeos con las ubicaciones donde se han realizado\n\nOtras aplicaciones pueden acceder a esta información y a imágenes guardadas."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"No, gracias"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"Sí"</string>
     <string name="camera_menu_more_label" msgid="7951917844735828365">"MÁS OPCIONES"</string>
     <string name="setting_front_camera_photo" msgid="4131886734622868637">"Foto de cámara frontal"</string>
     <string name="setting_front_camera_video" msgid="2178799452805359752">"Vídeo de cámara frontal"</string>
     <string name="setting_default_camera" msgid="6954076799301004779">"Cámara predeterminada"</string>
-    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Ayuda y opiniones"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Ayuda y sugerencias"</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"Procesando HDR+…"</string>
     <string name="open_source_licenses" msgid="2169711954264883060">"Licencias de código abierto"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"Ajustes generales"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapíxeles"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s MP"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Toca para volver a enfocar"</string>
-    <string name="pref_category_advanced" msgid="5921085080077574872">"Avanzados"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Avanzado"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Exposición manual"</string>
     <string name="settings_cling_text" msgid="5368054627268181292">"Cambia la resolución y la calidad en Ajustes o prueba las funciones avanzadas."</string>
-    <string name="photo_size_selection_title" msgid="2789753590719172645">"Selecciona el tamaño de foto"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Selecciona un tamaño de foto"</string>
     <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Puedes cambiar esta opción más tarde en Ajustes."</string>
     <string name="share_to" msgid="5144911209144798122">"Compartir en"</string>
     <string name="edit_with" msgid="615569327230783971">"Editar con"</string>
index fb903a5..5bcaa2d 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapikslit"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s MP"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Fookuse muutmiseks puudutage siin"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
new file mode 100644 (file)
index 0000000..8948255
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Kamera"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Bideokamera"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Ezarri argazkia honela"</string>
+    <string name="delete" msgid="2714492172818940424">"Ezabatu"</string>
+    <string name="share" msgid="8581089487762243115">"Partekatu"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Partekatu panoramika"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Partekatu argazki gisa"</string>
+    <string name="deleted" msgid="2036165115527228127">"Ezabatuta"</string>
+    <string name="undo" msgid="5110048345890050107">"DESEGIN"</string>
+    <string name="details" msgid="4404020741542549488">"Xehetasunak"</string>
+    <string name="close" msgid="4826166926297479820">"Itxi"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Erakutsi mapan"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Biratu ezkerrera"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Biratu eskuinera"</string>
+    <string name="edit" msgid="2776879395749004347">"Editatu"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Ebaki"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Moztu"</string>
+    <string name="set_as" msgid="5469055085024870081">"Ezarri honela"</string>
+    <string name="video_err" msgid="1562566029875081552">"Ezin da bideoa erreproduzitu."</string>
+    <string name="title" msgid="8061744305671964703">"Izena"</string>
+    <string name="description" msgid="8193138501982849808">"Azalpena"</string>
+    <string name="time" msgid="5248213506417024287">"Ordua"</string>
+    <string name="location" msgid="564326205780827668">"Kokapena"</string>
+    <string name="path" msgid="5927003361865586353">"Bidea"</string>
+    <string name="width" msgid="7045750687833828758">"Zabalera"</string>
+    <string name="height" msgid="5186001199353423689">"Altuera"</string>
+    <string name="orientation" msgid="3883761294106680270">"Orientazioa"</string>
+    <string name="duration" msgid="5316211067383665008">"Iraupena"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME mota"</string>
+    <string name="file_size" msgid="6841070748357980676">"Tamaina"</string>
+    <string name="maker" msgid="698691509121545856">"Egilea"</string>
+    <string name="model" msgid="8547493604023069452">"Modeloa"</string>
+    <string name="flash" msgid="995041910749174196">"Flasha"</string>
+    <string name="aperture" msgid="2453802098282814022">"Irekidura"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Foku-distantzia"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Zuri-balantzea"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Esposizio-denb."</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Eskuzkoa"</string>
+    <string name="auto" msgid="2552649885114400474">"Automatikoa"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Flasharekin"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Flashik gabe"</string>
+    <string name="unknown" msgid="564184550182858146">"Ezezaguna"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Elementua gailuan gordeta dago eta konexiorik gabe erabil daiteke."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Itxaron, mesedez"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Kameraren errorea"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Ezin da kamerara konektatu."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Segurtasun-gidalerroak direla medio, kamera desgaitu egin da."</string>
+    <string name="wait" msgid="765601745709933047">"Itxaron, mesedez…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Txertatu SD txartela kamera erabili aurretik."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD txartela prestatzen…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Ezin izan da SD txartela atzitu."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Denbora-bitartearen grabaketa"</string>
+    <string name="capturing" msgid="5255164204641920893">"Kapturatzen"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Aukeratu kamera"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Atzekoa"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Aurrekoa"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Gorde kokapena"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"KOKAPENA"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Atzeranzko kontagailua"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Egin bip soinua"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Desaktibatuta"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Aktibatuta"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Bideoaren kalitatea"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Denbora-bitartea"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Kameraren ezarpenak"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Bideokameraren ezarpenak"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Argazkiaren tamaina"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Handia"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Ertaina"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Txikia"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Fokatze modua"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Automatikoa"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Infinitua"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Makroa"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"AUTOMATIKOA"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"INFINITUA"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MAKROA"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Flash modua"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"FLASH MODUA"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Automatikoa"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Aktibatuta"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Desaktibatuta"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"FLASH AUTOMATIKOA"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"FLASHA AKTIBATUTA"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"FLASHA DESAKTIBATUTA"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Zuri-balantzea"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"ZURI-BALANTZEA"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Automatikoa"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Goria"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Egun-argia"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Fluoreszentea"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Hodeitsua"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AUTOMATIKOA"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"GORIA"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"OSKARBIA"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLUORESZENTEA"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"LAINOTUA"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Eszena modua"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Automatikoa"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ AKTIBATUTA"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ DESAKTIBATUTA"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR AKTIBATUTA"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR DESAKTIBATUTA"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Ekintza"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Gaua"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Ilunabarra"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Festa"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"BAT ERE EZ"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"EKINTZA"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"GAUA"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"ILUNABARRA"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"FESTA"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"KONTAGAILUA DESAKTIBATUTA"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SEGUNDO"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SEGUNDO"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SEGUNDO"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SEGUNDO"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Ezin da eszena moduan hautatu."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Esposizioa"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ESPOSIZIOA"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"AURREKO KAMERA"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"ATZEKO KAMERA"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Ados"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Utzi"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"USB memoria lekurik gabe ari da geratzen. Murriztu kalitatea edo ezabatu fitxategi batzuk."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Tamainaren mugara iritsi zara."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Azkarregi"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Panoramika prestatzen"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Ezin izan da panoramika gorde."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Panoramika"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Panoramika ateratzen"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Aurreko panoramikaren zain"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Gordetzen…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Panoramika errendatzen"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Ukitu fokatzeko."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Efektuak"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Bat ere ez"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Estutzea"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Begi handiak"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Aho handia"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Aho txikia"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Sudur handia"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Begi txikiak"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Espazioan"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Ilunabarra"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Zure bideoa"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Grabatzen ari denean, ukitu pantaila argazkiak ateratzeko."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Bideoa grabatzen hasi da."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Bideoa grabatzen gelditu da."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Garbitu efektuak"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"AURPEGI BARREGARRIAK"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ATZEKO PLANOA"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Obturadorea"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Utzi"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Menua botoia"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s kontrol-laukia"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Aldatu argazki modura"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Aldatu bideora"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Aldatu panoramika modura"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Aldatu 360°-ko panoramika modura"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Aldatu kalitate handira"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Aldatu fokatzeko modura"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Utzi bertan behera"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Berrikusten amaitu da"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Egin berrikuspena berriro"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Aukerak"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Moduen zerrenda itxi egin da"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Moduen zerrenda ireki egin da"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Argazkia atera da"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Argazkia atera da"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Bideoa grabatu da"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Desblokeatu kamera"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Multimedia-elementuaren aldatze-data: %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Argazkiaren aldatze-data: %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Bideoaren aldatze-data: %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Panoramikaren aldatze-data: %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"360°-ko panoramikaren aldatze-data: %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Fokatze-efektuaren aldatze-data: %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Multimedia-elementuak prozesatzen"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Ezkutatu edo erakutsi moduen zerrenda"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Moduen zerrenda"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Aldatu film-banda"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Film-banda"</string>
+    <string name="capital_on" msgid="1118214824959797269">"AKTIBATUTA"</string>
+    <string name="capital_off" msgid="3020696135020167263">"DESAKTIBATUTA"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Erreproduzitu bideoa"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Desaktibatuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 minutu"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 ordu"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 ordu"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"segundo"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"minutu"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"ordu"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Eginda"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Ezarri denbora-bitartea"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Denbora-bitarte modua desaktibatuta dago. Aktiba ezazu bitartea zehazteko."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Ezarri iraupena segundotan"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Argazkia ateratzeko atzerantz kontatzen"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Argazkien kokapenak gogoratu nahi dituzu?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Etiketatu argazkiak eta bideoak ateratzeko eta grabatzeko aukeratutako kokapenekin.\n\nBeste aplikazio batzuek informazio hau atzi dezakete, gordetako irudiekin batera."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Ez, eskerrik asko"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Bai"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"AUKERA GEHIAGO"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"EZARPENAK"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Sortu planeta txikia"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Planeta txikia gordetzen…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Aplikatu zooma"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Biratu"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Argazki-editorea"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Gorde"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Ezin da irudia kargatu!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Filmina-ikuspegia"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Horma-papera ezartzen"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Ezarpenak"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Kamera"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Bideoa"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360°-ko panoramika"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Denbora-bitartea"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Angeluhandia"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Panoramika"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Fokatze-efektua"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Aldatu kamera modura"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Aldatu bideokamerara"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Aldatu 360°-ko panoramika modura"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Aldatu panoramika modura"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Aldatu fokatze-efektu modura"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Ireki ezarpenak"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Itxi ezarpenak"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus desaktibatuta"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus aktibatuta"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR desaktibatuta"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR aktibatuta"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Flasha desaktibatuta"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Flash automatikoa"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Flasha aktibatuta"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ flasha desaktibatuta"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ flash automatikoa"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ flasha aktibatuta"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Linterna aktibatuta"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Linterna desaktibatuta"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Atzeko kamera"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Aurreko kamera"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Sareta desaktibatuta"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Sareta aktibatuta"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Atzeranzko kontagailua desaktibatuta dago"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Atzeranzko kontagailuaren iraupena 3 segundotan ezarri da"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Atzeranzko kontagailuaren iraupena 10 segundotan ezarri da"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Aukera gehiago"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Utzi"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Eginda"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Atera berriro"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Partekatu"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Ikusi"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Editatu"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Ezabatu"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Eskuzko esposizio-konpentsazioa"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Esposizio-konpentsazioa: -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Esposizio-konpentsazioa: -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Esposizio-konpentsazioa: 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Esposizio-konpentsazioa: +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Esposizio-konpentsazioa: +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Orain botoia %s da"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Kokapena"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Atzeko kameraren argazkiak"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Atzeko kameraren bideoa"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Aurreko kameraren argazkiak"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Aurreko kameraren bideoa"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Kamera lehenetsia"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Laguntza eta iritziak"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ prozesatzen…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Kode irekiko lizentziak"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Ezarpen orokorrak"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Bereizmena eta kalitatea"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Honi buruz"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Konpilazio-bertsioa"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Txikia"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Handia"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480 p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixel"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Fokatze aldakorra erabiltzeko, ukitu hau"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Hobespen aurreratuak"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Eskuzko esposizioa"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Ezarpenak atalean, aldatu bereizmena eta kalitatea, edo probatu eginbide aurreratuak."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Aukeratu argazkiaren tamaina"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Geroago alda dezakezu Ezarpenak atalean."</string>
+    <string name="share_to" msgid="5144911209144798122">"Partekatu hemen:"</string>
+    <string name="edit_with" msgid="615569327230783971">"Editatu honekin:"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"HURRENGOA"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"Ados"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Sentsore osoa \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Ebakitako sentsorea \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index ff068a7..315eb3a 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"‏%1$s مگاپیکسل"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"‏(%1$d:%2$d)‏ %3$s مگاپیکسل"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"برای فوکوس مجدد، اینجا را لمس کنید"</string>
index e41ad47..a1ab401 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1 080 p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapikseliä"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Mpx"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Tarkenna uudelleen koskettamalla tätä"</string>
index 3b4276c..66c7676 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s mégapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s mégapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Pour effectuer une nouvelle mise au point, touchez ici"</string>
index a147dfa..a1b277f 100644 (file)
@@ -33,7 +33,7 @@
     <string name="rotate_left" msgid="2618440058490662604">"Faire pivoter vers la gauche"</string>
     <string name="rotate_right" msgid="4896096424267838355">"Faire pivoter vers la droite"</string>
     <string name="edit" msgid="2776879395749004347">"Modifier"</string>
-    <string name="crop_action" msgid="6933589718464132714">"Rogner"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Recadrer"</string>
     <string name="trim_action" msgid="4736803320203951827">"Couper"</string>
     <string name="set_as" msgid="5469055085024870081">"Définir comme"</string>
     <string name="video_err" msgid="1562566029875081552">"Impossible de lire la vidéo."</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s mégapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Mpx"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Pour effectuer une nouvelle mise au point, appuyez ici."</string>
     <string name="edit_with" msgid="615569327230783971">"Modifier avec"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"SUIVANT"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"OK"</string>
-    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Capteur complet\n(4:3)"</string>
-    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Capteur rogné\n(16:9)"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Format 4:3\n(complet)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Format 16:9\n(rogné)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
     <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
new file mode 100644 (file)
index 0000000..0df21b1
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Cámara"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Cámara de vídeo"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Establecer imaxe como"</string>
+    <string name="delete" msgid="2714492172818940424">"Eliminar"</string>
+    <string name="share" msgid="8581089487762243115">"Compartir"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Compartir panorámica"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Compartir como foto"</string>
+    <string name="deleted" msgid="2036165115527228127">"Eliminada"</string>
+    <string name="undo" msgid="5110048345890050107">"DESFACER"</string>
+    <string name="details" msgid="4404020741542549488">"Detalles"</string>
+    <string name="close" msgid="4826166926297479820">"Pechar"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Mostrar no mapa"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Xirar á esquerda"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Xirar á dereita"</string>
+    <string name="edit" msgid="2776879395749004347">"Editar"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Recortar"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Recortar"</string>
+    <string name="set_as" msgid="5469055085024870081">"Establecer como"</string>
+    <string name="video_err" msgid="1562566029875081552">"Non se pode reproducir o vídeo"</string>
+    <string name="title" msgid="8061744305671964703">"Título"</string>
+    <string name="description" msgid="8193138501982849808">"Descrición"</string>
+    <string name="time" msgid="5248213506417024287">"Hora"</string>
+    <string name="location" msgid="564326205780827668">"Localización"</string>
+    <string name="path" msgid="5927003361865586353">"Ruta"</string>
+    <string name="width" msgid="7045750687833828758">"Largura"</string>
+    <string name="height" msgid="5186001199353423689">"Altura"</string>
+    <string name="orientation" msgid="3883761294106680270">"Orientación"</string>
+    <string name="duration" msgid="5316211067383665008">"Duración"</string>
+    <string name="mimetype" msgid="6415940055077963944">"Tipo MIME"</string>
+    <string name="file_size" msgid="6841070748357980676">"Tam. ficheiro"</string>
+    <string name="maker" msgid="698691509121545856">"Creador"</string>
+    <string name="model" msgid="8547493604023069452">"Modelo"</string>
+    <string name="flash" msgid="995041910749174196">"Flash"</string>
+    <string name="aperture" msgid="2453802098282814022">"Abertura"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Distanc. focal"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Balance de brancos"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Exposición"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Manual"</string>
+    <string name="auto" msgid="2552649885114400474">"Automático"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Flash disparado"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Sen flash"</string>
+    <string name="unknown" msgid="564184550182858146">"Descoñecida"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Este elemento está almacenado localmente e dispoñible sen conexión."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Agarda"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Erro da cámara"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Non se pode conectar coa cámara."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"A cámara desactivouse debido ás políticas de seguridade."</string>
+    <string name="wait" msgid="765601745709933047">"Agarda..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Insire unha tarxeta SD antes de usar a cámara."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"Preparando tarxeta SD…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Non se puido acceder á tarxeta SD."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Gravación de período de tempo"</string>
+    <string name="capturing" msgid="5255164204641920893">"Capturando"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Escoller cámara"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Traseira"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Frontal"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Gardar localización"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"LOCALIZACIÓN"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Temporizador de conta atrás"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Son durante conta atrás"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Desactivado"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Activado"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Calidade de vídeo"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Período de tempo"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Configuración da cámara"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Configuración da cámara de vídeo"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Tamaño da imaxe"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Grande"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Medio"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Pequeno"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Modo de enfoque"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Automático"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Infinito"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Macro"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"AUTOMÁTICO"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"INFINITO"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MACRO"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Modo de flash"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"MODO DE FLASH"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Automático"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Activado"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Desactivado"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"FLASH AUTOMÁTICO"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"FLASH ACTIVADO"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"FLASH DESACTIVADO"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Balance de brancos"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"BALANCE DE BRANCOS"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Automático"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Incandescente"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Luz do día"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Fluorescente"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Nubrado"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AUTOMÁTICO"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"INCANDESCENTE"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"LUZ DO DIA"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLUORESCENTE"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"NUBRADO"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Modo de escena"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Automática"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ACTIVADO"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ DESACTIVADO"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ACTIVADO"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR DESACTIVADO"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Acción"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Noite"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Solpor"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Festa"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"NINGÚN"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ACCIÓN"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"NOITE"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"SOLPOR"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"FESTA"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"TEMPORIZADOR DESACTIVADO"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SEGUNDO"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SEGUNDOS"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SEGUNDOS"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SEGUNDOS"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Non se pode seleccionar no modo de escena."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Exposición"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"EXPOSICIÓN"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"Cámara frontal"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"CÁMARA TRASEIRA"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Aceptar"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Cancelar"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"Estase esgotando o espazo da tarxeta SD. Cambia a configuración de calidade ou elimina algunhas imaxes ou outros ficheiros."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Alcanzouse o límite de tamaño."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Demasiado rápido"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Preparando panorámica"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Non se puido gardar a panorámica."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Panorámica"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Capturando panorámica"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Agardando pola panorámica anterior"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Gardando…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Mostrando panorámica"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Toca para enfocar."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Efectos"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Ningún"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Estreitar"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Ollos grandes"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Boca grande"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Boca pequena"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Nariz grande"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Ollos pequenos"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"No espazo"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Solpor"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"O teu vídeo"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Toca para tirar fotos mentres gravas."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Comezou a gravación do vídeo."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Detívose a gravación do vídeo."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Borrar efectos"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"CARAS GRACIOSAS"</string>
+    <string name="effect_background" msgid="1358432220077975015">"SEGUNDO PLANO"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Obturador"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Cancelar"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Botón Menú"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s caixa de verificación"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Cambiar a foto"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Cambiar a vídeo"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Cambia a panorámica"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Cambiar a fotografía esférica"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Cambiar a alta calidade"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Cambiar ao modo Volver enfocar"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Cancelar"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Revisión rematada"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Repetir foto ou vídeo"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Opcións"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Lista de modos pechada"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Lista de modos aberta"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Captura realizada"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Foto realizada"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Vídeo gravado"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Desbloquea para acceder á cámara"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Recurso realizado o %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Foro realizada o %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Vídeo realizado o %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Panorámica realizada o %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"Fotografía esférica realizada o %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Efecto de enfoque realizado o %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Procesamento de ficheiro multimedia"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Alternar lista de modos"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Lista de modos"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Alternar tira de vídeo"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Tira de vídeo"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ACTIVAR"</string>
+    <string name="capital_off" msgid="3020696135020167263">"DESACTIVAR"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Reproducir vídeo"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Desactivado"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 segundo"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 segundos"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 minuto"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 minutos"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 hora"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 horas"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 horas"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"segundos"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"minutos"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"horas"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Feito"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Establecer intervalo temporal"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"A función de período de tempo está desactivada. Actívaa para establecer o intervalo de tempo."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Establecer a duración en segundos"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Contando cara atrás para tirar unha foto"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Queres que se lembren as localizacións das fotos?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Etiqueta as fotos e os vídeos coas localizacións en que se fixeron.\n\nOutras aplicacións poden acceder a esta información e ás imaxes gardadas."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Non, grazas"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Si"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"MÁIS OPCIÓNS"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"CONFIGURACIÓN"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Crear planeta diminuto"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Gardando planeta diminuto…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Zoom"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Xirar"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Editor de fotos"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Gardar"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Non se pode cargar a imaxe"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Vista de película"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Establecendo fondo de pantalla"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Configuración"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Cámara"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Vídeo"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Fotografía esférica"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Período de tempo"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Ángulo grande"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Panorámica"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Efecto de enfoque"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Cambiar ao modo de cámara"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Cambiar á cámara de vídeo"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Cambiar ao modo Fotografía esférica"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Cambiar ao modo de panorámica"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Cambiar ao modo Efecto de enfoque"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Abrir a configuración"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Pechar a configuración"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus desactivado"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus activado"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR desactivado"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR activado"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Flash desactivado"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Flash automático"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Flash activado"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR + flash desactivado"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR + flash automático"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR + flash activado"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Flash activado"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Flash desactivado"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Cámara traseira"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Cámara frontal"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Desactivar liñas da grade"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Activar liñas da grade"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"O temporizador de conta atrás está desactivado"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"A duración do temporizador de conta atrás está definida en 3 segundos"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"A duración do temporizador de conta atrás está definida en 10 segundos"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Máis opcións"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Cancelar"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Feito"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Repetir"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Compartir"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Ver"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Editar"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Eliminar"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Compensación da exposición manual"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Compensación da exposición -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Compensación da exposición -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Compensación da exposición 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Compensación da exposición +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Compensación da exposición +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Agora o botón está %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Localización"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Foto da cámara traseira"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Vídeo da cámara traseira"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Foto da cámara dianteira"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Vídeo da cámara dianteira"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Cámara predeterminada"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Axuda e comentarios"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"Procesando HDR+ …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Licenzas de código aberto"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Configuración xeral"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Resolución e calidade"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Acerca de"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Versión da compilación"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Baixa"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Alta"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480 p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD de 4 K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapíxeles"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapíxeles"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Para volver enfocar, toca aquí"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Avanzadas"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Exposición manual"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"En Configuración, cambia a resolución e a calidade ou proba opcións avanzadas."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Seleccionar tamaño da foto"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Podes cambiar esta opción máis tarde en Configuración."</string>
+    <string name="share_to" msgid="5144911209144798122">"Compartir en"</string>
+    <string name="edit_with" msgid="615569327230783971">"Editar con"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"SEGUINTE"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"DE ACORDO"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Sensor completo \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Sensor recortado \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
new file mode 100644 (file)
index 0000000..60fce7e
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"કૅમેરો"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"કેમકોર્ડર"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"ચિત્ર આ તરીકે સેટ કરો"</string>
+    <string name="delete" msgid="2714492172818940424">"કાઢી નાખો"</string>
+    <string name="share" msgid="8581089487762243115">"શેર કરો"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"પેનોરમા શેર કરો"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ફોટો તરીકે શેર કરો"</string>
+    <string name="deleted" msgid="2036165115527228127">"કાઢી નાખ્યું"</string>
+    <string name="undo" msgid="5110048345890050107">"પૂર્વવત્ કરો"</string>
+    <string name="details" msgid="4404020741542549488">"વિગતો"</string>
+    <string name="close" msgid="4826166926297479820">"બંધ કરો"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"નકશા પર દર્શાવો"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ડાબે ફેરવો"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"જમણે ફેરવો"</string>
+    <string name="edit" msgid="2776879395749004347">"સંપાદન"</string>
+    <string name="crop_action" msgid="6933589718464132714">"કાપો"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ટ્રિમ કરો"</string>
+    <string name="set_as" msgid="5469055085024870081">"તરીકે સેટ કરો"</string>
+    <string name="video_err" msgid="1562566029875081552">"વિડિઓ ચલાવી શકતા નથી."</string>
+    <string name="title" msgid="8061744305671964703">"શીર્ષક"</string>
+    <string name="description" msgid="8193138501982849808">"વર્ણન"</string>
+    <string name="time" msgid="5248213506417024287">"સમય"</string>
+    <string name="location" msgid="564326205780827668">"સ્થાન"</string>
+    <string name="path" msgid="5927003361865586353">"પાથ"</string>
+    <string name="width" msgid="7045750687833828758">"પહોળાઈ"</string>
+    <string name="height" msgid="5186001199353423689">"ઊંચાઈ"</string>
+    <string name="orientation" msgid="3883761294106680270">"ઑરિએન્ટેશન"</string>
+    <string name="duration" msgid="5316211067383665008">"અવધિ"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME પ્રકાર"</string>
+    <string name="file_size" msgid="6841070748357980676">"ફાઇલનું કદ"</string>
+    <string name="maker" msgid="698691509121545856">"નિર્માતા"</string>
+    <string name="model" msgid="8547493604023069452">"મોડેલ"</string>
+    <string name="flash" msgid="995041910749174196">"ફ્લેશ"</string>
+    <string name="aperture" msgid="2453802098282814022">"અપેરચર"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ફોકલ લેન્થ"</string>
+    <string name="white_balance" msgid="1600142743496129085">"વ્હાઇટ બેલેન્સ"</string>
+    <string name="exposure_time" msgid="949787291620767754">"પ્રદર્શન સમય"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"મિમી"</string>
+    <string name="manual" msgid="2444400953521760140">"મેન્યુઅલ"</string>
+    <string name="auto" msgid="2552649885114400474">"સ્વતઃ"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ફ્લેશ ફાયર્ડ"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ફ્લેશ નહીં"</string>
+    <string name="unknown" msgid="564184550182858146">"અજાણ્યું"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"આ આઇટમ સ્થાનિક રીતે સંગ્રહિત છે અને ઓફલાઇન ઉપલબ્ધ છે."</string>
+    <string name="please_wait" msgid="1416313324505140068">"કૃપા કરીને રાહ જુઓ"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"કૅમેરા ભૂલ"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"કેમેરા સાથે કનેક્ટ કરી શકાતું નથી."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"સુરક્ષા નીતિઓને કારણે કૅમેરાને અક્ષમ કરવામાં આવ્યો છે."</string>
+    <string name="wait" msgid="765601745709933047">"કૃપા કરીને રાહ જુઓ..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"કૅમેરાનો ઉપયોગ કરતાં પહેલાં એક SD કાર્ડ દાખલ કરો."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD કાર્ડ તૈયાર કરી રહ્યું છે…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD કાર્ડ ઍક્સેસ કરી શકાયું નથી."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"સમય વીતી ગયો રેકોર્ડિંગ"</string>
+    <string name="capturing" msgid="5255164204641920893">"કેપ્ચર કરી રહ્યું છે"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"કૅમેરો પસંદ કરો"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"પાછળ"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"આગળ"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"સ્થાન સાચવો"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"સ્થાન"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"કાઉન્ટડાઉન ટાઇમર"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"કાઉન્ટડાઉન દરમિયાન બીપ"</string>
+    <string name="setting_off" msgid="6782191065550276632">"બંધ"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ચાલુ"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"વિડિઓની ગુણવત્તા"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"સમય વીતી ગયો"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"કૅમેરા સેટિંગ્સ"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"કૅમકોર્ડર સેટિંગ્સ"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ચિત્રનું કદ"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"મોટું"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"મધ્યમ"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"નાનું"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"ફોકસ મોડ"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"સ્વતઃ"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"અનંત"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"મેક્રો"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"સ્વતઃ"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"અનંત"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"મેક્રો"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ફ્લેશ મોડ"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ફ્લેશ મોડ"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"સ્વતઃ"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ચાલુ"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"બંધ"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"સ્વતઃ ફ્લેશ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ફ્લેશ ચાલુ"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ફ્લેશ બંધ"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"વ્હાઇટ બેલેન્સ"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"વ્હાઇટ બેલેંસ"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"સ્વતઃ"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"ઉષ્ણતાથી પ્રકાશિત"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"ડેલાઇટ"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ફ્લોરોસન્ટ"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"વાદળછાયું"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"સ્વતઃ"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ઉષ્ણતાથી પ્રકાશિત"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"ડેલાઇટ"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ફ્લોરોસન્ટ"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"વાદળછાયું"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"દૃશ્ય મોડ"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ચાલુ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ બંધ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ચાલુ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"પાર્ટી"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"કંઈ નહીં"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ક્રિયા"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"રાત્રિ"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"સૂર્યાસ્ત"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"પાર્ટી"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ટાઇમર બંધ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 સેકંડ"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 સેકંડ"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 સેકંડ"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 સેકંડ"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"દૃશ્ય મોડમાં પસંદ કરવા યોગ્ય નથી."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"પ્રદર્શન"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"પ્રદર્શન"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"આગળનો કૅમેરા"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"પાછળનો કૅમેરા"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ઑકે"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"રદ કરો"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"તમારા SD કાર્ડમાં સ્થાન સમાપ્ત થયું છે. ગુણવત્તા સેટિંગ બદલો અથવા કેટલીક છબીઓ અથવા અન્ય ફાઇલો કાઢી નાખો."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"કદની સીમાએ પહોંચી ગયા."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"ખૂબ ઝડપથી"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"પેનોરમા તૈયાર કરી રહ્યું છે"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"પેનોરમા સાચવી શકાયું નથી."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"દૃશ્ય"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"કેપ્ચરિંગ પેનોરમા"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"પહેલાના પેનોરમા માટે રાહ જોઈ રહ્યું છે"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"સાચવી રહ્યું છે..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"રેન્ડરિંગ પેનોરમા"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ફોકસ કરવા માટે ટચ કરો."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"પ્રભાવો"</string>
+    <string name="effect_none" msgid="3102797925086872636">"કોઈ નહીં"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"સ્ક્વિઝ"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"મોટી આંખો"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"મોટું મોં"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"નાનું મોં"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"મોટું નાક"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"નાની આંખો"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"અવકાશમાં"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"સૂર્યાસ્ત"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"તમારી વિડિઓ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"રેકોર્ડિંગ કરતી વખતે ફોટો લેવા માટે માટે ટચ કરો."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"વિડિઓ રેકોર્ડિંગ પ્રારંભ કરી છે."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"વિડિઓ રેકોર્ડિંગ બંધ કરી છે."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"પ્રભાવો સાફ કરો"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"વિચિત્ર ચહેરા"</string>
+    <string name="effect_background" msgid="1358432220077975015">"પૃષ્ઠભૂમિ"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"શટર"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"રદ કરો"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"મેનૂ બટન"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s ચેક બોક્સ"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ફોટો પર સ્વિચ કરો"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"વિડિઓ પર સ્વિચ કરો"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"પેનોરમા પર સ્વિચ કરો"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 ડિગ્રી પેનોરામા પર સ્વિચ કરો"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"ઉચ્ચ ગુણવત્તા પર સ્વિચ કરો"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"રીફોકસ પર સ્વિચ કરો"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"સમીક્ષા રદ કરો"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"સમીક્ષા પૂર્ણ થઈ"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"સમીક્ષા ફરીથી લો"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"વિકલ્પો"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"મોડ સૂચિ બંધ થઈ"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"મોડ સૂચિ ખુલી"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"લેવાયેલ કેપ્ચર"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ફોટો લેવાયો"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"વિડિઓ લેવાયો"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"કૅમેરાને અનલૉક કરો"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s પર લેવાયેલ મીડિયા"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s પર લેવાયેલ ફોટો"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s પર વિડિઓ લેવાયો"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s પર લેવાયેલ પેનોરમા"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s પર લેવાયેલ 360 ડિગ્રી પેનોરામા"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s પર લેવાયેલ ફોકસ પ્રભાવ"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"મીડિયા પ્રોસેસિંગ"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"મોડ સૂચિ ટૉગલ કરો"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"મોડ સૂચિ"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ફિલ્મસ્ટ્રીપ ટૉગલ કરો"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ફિલ્મસ્ટ્રિપ"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ચાલુ"</string>
+    <string name="capital_off" msgid="3020696135020167263">"બંધ"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"વિડિઓ ચલાવો"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"બંધ"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 સેકંડ"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 મિનિટ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 કલાક"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 કલાક"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"સેકંડ"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"મિનિટ"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"કલાક"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"થઈ ગયું"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"સમય અંતરાલ સેટ કરો"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"સમય વીતી ગયો સુવિધા બંધ છે. સમય અંતરાલ સેટ કરવા માટે તેને ચાલુ કરો."</string>
+    <string name="set_duration" msgid="1638453882581604341">"સેકંડમાં અવધિ સેટ કરો"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ફોટો લેવા માટે કાઉન્ટ ડાઉન કરી રહ્યું છે"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ફોટો સ્થાનો યાદ રાખીએ?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"તમારા ફોટા અને વિડિઓઝને તે જ્યાં લેવાયા તે સ્થાનો સાથે ટેગ કરો.\n\nઅન્ય એપ્લિકેશન્સ આ માહિતીને તમારી સાચવેલ છબીઓ સાથે ઍક્સેસ કરી શકે છે."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"નહીં આભાર"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"હા"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"વધુ વિકલ્પો"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"સેટિંગ્સ"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"નાનું પ્લેનેટ બનાવો"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"નાનું પ્લેનેટ સાચવી રહ્યું છે ..."</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"ઝૂમ કરો"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"ફેરવો"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ફોટો સંપાદક"</string>
+    <string name="crop_save" msgid="2841974981340098579">"સાચવો"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"છબી લોડ કરી શકાતી નથી!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ફિલ્મસ્ટ્રીપ દૃશ્ય"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"વૉલપેપર સેટ કરી રહ્યું છે"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"સેટિંગ્સ"</string>
+    <string name="mode_camera" msgid="279763925715250603">"કૅમેરો"</string>
+    <string name="mode_video" msgid="8633929034048169139">"વિડિઓ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 ડિગ્રી પેનોરામા"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"સમય વીતી ગયો"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"વાઇડ એંગલ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"દૃશ્ય"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ફોકસ પ્રભાવ"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"કૅમેરા મોડ પર સ્વિચ કરો"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"વિડિઓ કૅમેરા પર સ્વિચ કરો"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 ડિગ્રી પેનોરામા મોડ પર સ્વિચ કરો"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"પેનોરમા મોડ પર સ્વિચ કરો"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ફોકસ પ્રભાવ મોડ પર સ્વિચ કરો"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"સેટિંગ્સ ખોલો"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"સેટિંગ્સ બંધ કરો"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR પ્લસ બંધ"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR પ્લસ ચાલુ"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR બંધ"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ચાલુ"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ફ્લેશ બંધ"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"સ્વતઃફ્લેશ"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ફ્લેશ ચાલુ"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ફ્લેશ બંધ"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ સ્વતઃ ફ્લેશ"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ફ્લેશ ચાલુ"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ટોર્ચ ચાલુ"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ટોર્ચ બંધ"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"પાછળનો કૅમેરા"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"આગળનો કૅમેરા"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ગ્રિડ લાઇન્સ બંધ"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ગ્રિડ લાઇન્સ ચાલુ"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"કાઉન્ટડાઉન ટાઇમર બંધ છે"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"કાઉન્ટડાઉન ટાઇમર સમયગાળો 3 સેકન્ડ પર સેટ કર્યો"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"કાઉન્ટડાઉન ટાઇમર સમયગાળો 10 સેકન્ડ પર સેટ કર્યો"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"વધુ વિકલ્પો"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"રદ કરો"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"થઈ ગયું"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"ફરીથી લો"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"શેર કરો"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"જુઓ"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"સંપાદન"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"કાઢી નાખો"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"મેન્યુઅલ પ્રદર્શન વળતર"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"પ્રદર્શન વળતર -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"પ્રદર્શન વળતર -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"પ્રદર્શન વળતર 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"પ્રદર્શન વળતર +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"પ્રદર્શન વળતર +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"બટન હવે %s છે"</string>
+    <string name="setting_location" msgid="4459859689227893838">"સ્થાન"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"પાછળના કૅમેરાથી ફોટો"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"પાછળનાં કૅમેરાથી વિડિઓ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"આગળના કૅમેરાથી ફોટો"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"આગળનાં કૅમેરાથી વિડિઓ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"ડિફોલ્ટ કૅમેરા"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"સહાય અને પ્રતિસાદ"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ પર પ્રક્રિયા કરી રહ્યું છે…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ખુલ્લા સ્ત્રોત લાઇસેંસેસ"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"સામાન્ય સેટિંગ્સ"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"રિઝોલ્યુશન અને ગુણવત્તા"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"વિશે"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"બિલ્ડ સંસ્કરણ"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"નિમ્ન"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"ઉચ્ચ"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s મેગાપિક્સેલ્સ"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s મેગાપિક્સેલ્સ"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"રીફોકસ કરવા માટે, અહીં ટચ કરો"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"વિગતવાર"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"મેન્યુઅલ પ્રદર્શન"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"સેટિંગ્સમાં, રિઝોલ્યુશન અને ગુણવત્તા બદલો અથવા વિગતવાર સુવિધાઓનો પ્રયાસ કરો."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ફોટોનું કદ પસંદ કરો"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"તમે આને પછીથી સેટિંગ્સમાં બદલી શકો છો"</string>
+    <string name="share_to" msgid="5144911209144798122">"આના પર શેર કરો"</string>
+    <string name="edit_with" msgid="615569327230783971">"આનાથી સંપાદિત કરો"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"આગલું"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"બરાબર, સમજાઇ ગયું"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"પૂર્ણ સેન્સર \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"કાપેલું સેન્સર \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 89bfe9d..92f039b 100644 (file)
     <string name="share_panorama" msgid="3558466186935359444">"पैनोरामा को साझा करें"</string>
     <string name="share_as_photo" msgid="4831213580709167218">"फ़ोटो के रूप में साझा करें"</string>
     <string name="deleted" msgid="2036165115527228127">"हटाया गया"</string>
-    <string name="undo" msgid="5110048345890050107">"पà¥\82रà¥\8dववत à¤\95रà¥\87ं"</string>
+    <string name="undo" msgid="5110048345890050107">"वापस à¤²à¤¾à¤\8fं"</string>
     <string name="details" msgid="4404020741542549488">"विवरण"</string>
     <string name="close" msgid="4826166926297479820">"बंद करें"</string>
-    <string name="show_on_map" msgid="8542853913632649160">"नà¤\95à¥\8dशà¥\87 पर दिखाएं"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"मानà¤\9aितà¥\8dर पर दिखाएं"</string>
     <string name="rotate_left" msgid="2618440058490662604">"बाएं घुमाएं"</string>
     <string name="rotate_right" msgid="4896096424267838355">"दाएं घुमाएं"</string>
     <string name="edit" msgid="2776879395749004347">"संपादित करें"</string>
@@ -76,7 +76,7 @@
     <string name="pref_camera_id_title" msgid="4680648115225411185">"कैमरा चुनें"</string>
     <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"पीछे का कैमरा"</string>
     <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"सामने का कैमरा"</string>
-    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"सà¥\8dथान à¤¸à¤¹à¥\87à¤\9cें"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"सà¥\8dथान à¤\9cà¥\8bड़ें"</string>
     <string name="pref_camera_location_label" msgid="8695441802378057719">"स्थान"</string>
     <string name="pref_camera_timer_title" msgid="4728838281741571323">"काउंटडाउन टाइमर"</string>
     <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
     <string name="pref_camera_id_label_back" msgid="1645608049757733858">"सामने का कैमरा"</string>
     <string name="pref_camera_id_label_front" msgid="349308803062874842">"पीछे का कैमरा"</string>
     <string name="dialog_ok" msgid="774141340500181131">"ठीक"</string>
-    <string name="dialog_cancel" msgid="692365061128351656">"रदà¥\8dद à¤\95रà¥\87ं"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"à¤\85भà¥\80 à¤¨à¤¹à¥\80ं"</string>
     <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"आपके SD कार्ड में स्थान कम है. गुणवत्ता सेटिंग बदलें या कुछ चित्र या अन्य फ़ाइलें हटाएं."</string>
     <string name="video_reach_size_limit" msgid="9196836111505731836">"आकार सीमा तक पहुंच गए."</string>
     <string name="pano_too_fast_prompt" msgid="2503148095578052177">"बहुत तेज़"</string>
     <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"पिछले पैनोरामा की प्रतीक्षा की जा रही है"</string>
     <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"सहेजा जा रहा है…"</string>
     <string name="pano_review_rendering" msgid="2743087719999377155">"पैनोरामा रेंडर हो रहा है"</string>
-    <string name="tap_to_focus" msgid="3519718196270593468">"फ़à¥\8bà¤\95स à¤\95रनà¥\87 à¤¹à¥\87तà¥\81 स्‍पर्श करें."</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"फ़à¥\8bà¤\95स à¤\95रनà¥\87 à¤\95à¥\87 à¤²à¤¿à¤\8f स्‍पर्श करें."</string>
     <string name="pref_video_effect_title" msgid="594570613431209010">"प्रभाव"</string>
     <string name="effect_none" msgid="3102797925086872636">"कोई नहीं"</string>
     <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"पिचका हुआ"</string>
     <string name="effect_silly_faces" msgid="7952713419757286453">"मज़ाकिया चेहरे"</string>
     <string name="effect_background" msgid="1358432220077975015">"पृष्ठभूमि"</string>
     <string name="accessibility_shutter_button" msgid="6040483605347230438">"शटर"</string>
-    <string name="accessibility_cancel_button" msgid="5679989494636116448">"रदà¥\8dद à¤\95रà¥\87ं"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"à¤\85भà¥\80 à¤¨à¤¹à¥\80ं"</string>
     <string name="accessibility_menu_button" msgid="7692103503958544723">"मेनू बटन"</string>
     <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s चेक बॉक्स"</string>
     <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"फ़ोटो पर स्‍विच करें"</string>
     <string name="accessibility_switch_to_video" msgid="8174781871592793967">"वीडियो पर स्विच करें"</string>
     <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"पैनोरामा पर स्विच करें"</string>
-    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere पर स्‍विच करें"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 डिग्री पैनोरमा पर जाएं"</string>
     <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"उच्‍च गुणवत्ता पर स्विच करें"</string>
     <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"फिर से फ़ोकस पर स्विच करें"</string>
-    <string name="accessibility_review_cancel" msgid="5462850829869569629">"समà¥\80à¤\95à¥\8dषा à¤°à¤¦à¥\8dद करें"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"समà¥\80à¤\95à¥\8dषा à¤¨à¤¾ करें"</string>
     <string name="accessibility_review_ok" msgid="3486465319880320270">"समीक्षा पूर्ण"</string>
     <string name="accessibility_review_retake" msgid="2547112860787022130">"समीक्षा रीटेक"</string>
     <string name="accessibility_mode_options" msgid="6376831760155403217">"विकल्प"</string>
     <string name="video_date_content_description" msgid="2151884014634284456">"%s को लिया गया वीडियो"</string>
     <string name="panorama_date_content_description" msgid="990703578639006144">"%s को लिया गया पैनोरामा"</string>
     <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s को लिया गया 360 डिग्री पैनोरामा"</string>
-    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s à¤\95à¥\8b à¤²à¤¿à¤¯à¤¾ à¤\97या à¤²à¥\87ंस ब्लर"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s à¤\95à¥\8b à¤²à¤¿à¤¯à¤¾ à¤\97या à¤²à¥\88ंस ब्लर"</string>
     <string name="media_processing_content_description" msgid="8138587719107183754">"मीडिया प्रोसेस हो रहा है"</string>
     <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"मोड सूची टॉगल करें"</string>
     <string name="btn_mode_list_toggle" msgid="3986242443098400164">"मोड सूची"</string>
     <string name="set_time_interval_help" msgid="64145154088021389">"समय अंतराल सुविधा बंद है. समय अंतराल सेट करने के लिए इसे चालू करें."</string>
     <string name="set_duration" msgid="1638453882581604341">"अवधि को सेकंड में सेट करें"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"फ़ोटो लेने के लिए उल्टी गिनती कर रहा है"</string>
-    <string name="remember_location_title" msgid="3045040613094030429">"फ़à¥\8bà¤\9fà¥\8b à¤\95à¥\87 स्थान याद रखना हैं?"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"फ़à¥\8bà¤\9fà¥\8b à¤\95ा स्थान याद रखना हैं?"</string>
     <string name="remember_location_prompt" msgid="5104210757873140169">"अपने फ़ोटो और वीडियो को उन स्थानों के साथ टैग करें जहां वे लिए गए हैं.\n\nअन्य ऐप्लिकेशन आपके सहेजे गए चित्रों सहित इस जानकारी का उपयोग कर सकते हैं."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"नहीं,रहने दें"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"हां"</string>
     <string name="tiny_planet_zoom" msgid="2985522360577158474">"ज़ूम करें"</string>
     <string name="tiny_planet_rotate" msgid="5445336705705350004">"घुमाएं"</string>
     <string name="photo_editor" msgid="1521994560971367225">"फ़ोटो संपादक"</string>
-    <string name="crop_save" msgid="2841974981340098579">"सहà¥\87à¤\9cें"</string>
+    <string name="crop_save" msgid="2841974981340098579">"à¤\9cà¥\8bड़ें"</string>
     <string name="cannot_load_image" msgid="4100136187076585580">"चित्र लोड नहीं हो सकता!"</string>
     <string name="switch_photo_filmstrip" msgid="1448511001008888767">"फ़िल्मस्ट्रिप दृश्य"</string>
     <string name="setting_wallpaper" msgid="2397759659347872725">"वॉलपेपर सेट हो रहा है"</string>
     <string name="mode_settings" msgid="2021937261522670921">"सेटिंग"</string>
     <string name="mode_camera" msgid="279763925715250603">"कैमरा"</string>
     <string name="mode_video" msgid="8633929034048169139">"वीडियो"</string>
-    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 डिग्री पैनोरमा"</string>
     <string name="mode_timelapse" msgid="1517168724627815453">"समय अंतराल"</string>
     <string name="mode_wideangle" msgid="1099640345041696830">"वाइड एंगल"</string>
     <string name="mode_panorama" msgid="6882648621305828861">"पैनोरामा"</string>
-    <string name="mode_refocus" msgid="172192967119469061">"लà¥\87ंस ब्लर"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"लà¥\88ंस ब्लर"</string>
     <string name="mode_camera_desc" msgid="3670807361165657278">"कैमरा मोड में स्विच करें"</string>
     <string name="mode_video_desc" msgid="4058407412929464689">"वीडियो कैमरे में स्विच करें"</string>
-    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphere मोड में स्विच करें"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 डिग्री पैनोरमा मोड पर जाएं"</string>
     <string name="mode_panorama_desc" msgid="6023020404237519590">"पैनोरामा मोड में स्विच करें"</string>
-    <string name="mode_refocus_desc" msgid="6171183297515508465">"लà¥\87ंस ब्लर मोड में स्विच करें"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"लà¥\88ंस ब्लर मोड में स्विच करें"</string>
     <string name="settings_open_desc" msgid="6914471293841793766">"सेटिंग खोलें"</string>
     <string name="settings_close_desc" msgid="3095831199632813127">"सेटिंग बंद करें"</string>
     <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus बंद"</string>
     <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"काउंटडाउन टाइमर अवधि 3 सेकंड पर सेट है"</string>
     <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"काउंटडाउन टाइमर अवधि 10 सेकंड पर सेट है"</string>
     <string name="more_options_desc" msgid="4628738800610478353">"अधिक विकल्प"</string>
-    <string name="cancel_button_description" msgid="3801167024006905033">"रदà¥\8dद à¤\95रà¥\87ं"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"à¤\85भà¥\80 à¤¨à¤¹à¥\80ं"</string>
     <string name="done_button_description" msgid="1334963435441544592">"पूर्ण"</string>
     <string name="retake_button_description" msgid="4234613030674787714">"फिर से लें"</string>
     <string name="share_button_description" msgid="5108508790540832053">"साझा करें"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"सामान्य सेटिंग"</string>
     <string name="pref_category_resolution_quality" msgid="6641462402321962896">"रिज़ॉल्यूशन और गुणवत्ता"</string>
     <string name="pref_category_about" msgid="1966255405679342337">"संक्षिप्त विवरण"</string>
-    <string name="pref_title_build_version" msgid="481489988124832651">"बिलà¥\8dड à¤¸à¤\82सà¥\8dà¤\95रण"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"बिलà¥\8dड à¤µà¤°à¥\8dशन"</string>
     <string name="pref_video_quality_entry_low" msgid="737962621299050603">"निम्न"</string>
     <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"उच्च"</string>
     <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s मेगापिक्सेल"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s मेगापिक्सेल"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"फिर से फ़ोकस करने के लिए, यहां स्पर्श करें"</string>
-    <string name="pref_category_advanced" msgid="5921085080077574872">"à¤\89नà¥\8dनत"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"वरà¥\80यताà¤\8fà¤\82"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"मैन्युअल एक्सपोज़र"</string>
-    <string name="settings_cling_text" msgid="5368054627268181292">"सà¥\87à¤\9fिà¤\82à¤\97 à¤®à¥\87à¤\82, à¤°à¤¿à¤\9c़à¥\89लà¥\8dयà¥\82शन à¤\94र à¤\97à¥\81णवतà¥\8dता à¤¬à¤¦à¤²à¥\87à¤\82, à¤¯à¤¾ à¤\89नà¥\8dनत सुविधाओं को आज़माएं."</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"सà¥\87à¤\9fिà¤\82à¤\97 à¤®à¥\87à¤\82, à¤°à¤¿à¤\9c़à¥\89लà¥\8dयà¥\82शन à¤¬à¤¦à¤²à¥\87à¤\82, à¤¯à¤¾ à¤\85तिरिà¤\95à¥\8dत सुविधाओं को आज़माएं."</string>
     <string name="photo_size_selection_title" msgid="2789753590719172645">"फ़ोटो आकार चुनें"</string>
     <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"आप इसे बाद में सेटिंग में बदल सकते हैं."</string>
     <string name="share_to" msgid="5144911209144798122">"इनसे साझा करें:"</string>
     <string name="edit_with" msgid="615569327230783971">"इससे संपादित करें:"</string>
-    <string name="startup_dialog_button_next" msgid="1011831256978228993">"à¤\85à¤\97ला"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"à¤\86à¤\97à¥\87"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"ठीक है, समझ लिया"</string>
-    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"पà¥\82रà¥\8dण à¤¸à¥\87à¤\82सर \n(4:3)"</string>
-    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"काटा गया सेंसर \n(16:9)"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"पà¥\82रà¥\8dण à¤\86à¤\95ार \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"काटा गया \n(16:9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
     <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
 </resources>
index b4b7c6d..b0cc688 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksela"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s MP"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Za refokusiranje dodirnite ovdje"</string>
index f3031fd..a8ca75d 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Az újrafókuszáláshoz érintse meg itt"</string>
index ebb55a1..6016376 100644 (file)
@@ -35,7 +35,7 @@
     <string name="edit" msgid="2776879395749004347">"Խմբագրել"</string>
     <string name="crop_action" msgid="6933589718464132714">"Եզրատում"</string>
     <string name="trim_action" msgid="4736803320203951827">"Կտրել"</string>
-    <string name="set_as" msgid="5469055085024870081">"Õ\8dÕ¡Õ°Õ´Õ¡Õ¶ել որպես"</string>
+    <string name="set_as" msgid="5469055085024870081">"Õ\95Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®ել որպես"</string>
     <string name="video_err" msgid="1562566029875081552">"Անհնար է նվագարկել տեսանյութը:"</string>
     <string name="title" msgid="8061744305671964703">"Վերնագիր"</string>
     <string name="description" msgid="8193138501982849808">"Նկարագրություն"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s մեգապիքսել"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s մեգապիքսել"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Ֆոկուսը փոխելու համար հպեք այստեղ"</string>
index 96c65b2..6609833 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapiksel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Untuk fokus ulang, sentuh di sini"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
new file mode 100644 (file)
index 0000000..c20ec7b
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Myndavél"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Upptökuvél"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Nota mynd sem"</string>
+    <string name="delete" msgid="2714492172818940424">"Eyða"</string>
+    <string name="share" msgid="8581089487762243115">"Deila"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Deila víðmynd"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Deila sem mynd"</string>
+    <string name="deleted" msgid="2036165115527228127">"Eytt"</string>
+    <string name="undo" msgid="5110048345890050107">"AFTURKALLA"</string>
+    <string name="details" msgid="4404020741542549488">"Upplýsingar"</string>
+    <string name="close" msgid="4826166926297479820">"Loka"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Sýna á korti"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Snúa rangsælis"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Snúa réttsælis"</string>
+    <string name="edit" msgid="2776879395749004347">"Breyta"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Skera"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Klippa"</string>
+    <string name="set_as" msgid="5469055085024870081">"Nota sem"</string>
+    <string name="video_err" msgid="1562566029875081552">"Ekki hægt að spila myndskeið."</string>
+    <string name="title" msgid="8061744305671964703">"Heiti"</string>
+    <string name="description" msgid="8193138501982849808">"Lýsing"</string>
+    <string name="time" msgid="5248213506417024287">"Tími"</string>
+    <string name="location" msgid="564326205780827668">"Staðsetning"</string>
+    <string name="path" msgid="5927003361865586353">"Slóð"</string>
+    <string name="width" msgid="7045750687833828758">"Breidd"</string>
+    <string name="height" msgid="5186001199353423689">"Hæð"</string>
+    <string name="orientation" msgid="3883761294106680270">"Stefna"</string>
+    <string name="duration" msgid="5316211067383665008">"Tímalengd"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME-gerð"</string>
+    <string name="file_size" msgid="6841070748357980676">"Skráarstærð"</string>
+    <string name="maker" msgid="698691509121545856">"Höfundur"</string>
+    <string name="model" msgid="8547493604023069452">"Gerð"</string>
+    <string name="flash" msgid="995041910749174196">"Flass"</string>
+    <string name="aperture" msgid="2453802098282814022">"Ljósop"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Brennivídd"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Hvítjöfnun"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Lýsingartími"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Handvirkt"</string>
+    <string name="auto" msgid="2552649885114400474">"Sjálfvirkt"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Flass notað"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Ekkert flass"</string>
+    <string name="unknown" msgid="564184550182858146">"Óþekkt"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Þetta atriði er geymt í tækinu og tiltækt án nettengingar."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Augnablik"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Myndavélarvilla"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Ekki er hægt að tengjast myndavélinni."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Myndavélin hefur verið gerð óvirk vegna öryggisstefnu."</string>
+    <string name="wait" msgid="765601745709933047">"Augnablik…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Settu SD-kort í áður en þú notar myndavélina."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"Undirbýr SD-kort…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Aðgangur að SD-korti fékkst ekki."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Upptaka yfir tímabil"</string>
+    <string name="capturing" msgid="5255164204641920893">"Tekur mynd"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Veldu myndavél"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Til baka"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Fremri"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Vista staðsetningu"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"STAÐSETNING"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Niðurteljari"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Niðurtalningarhljóð"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Slökkt"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Kveikt"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Myndgæði"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Myndataka yfir tímabil"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Stillingar myndavélar"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Stillingar upptökuvélar"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Stærð myndar"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Stór"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Meðalstór"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Lítil"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Fókusstilling"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Sjálfvirkt"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Óendanlegt"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Makró"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"SJÁLFVIRKT"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ÓENDANLEGT"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MAKRÓ"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Flassstilling"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"FLASSSTILLING"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Sjálfvirkt"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Kveikt"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Slökkt"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"SJÁLFVIRKT FLASS"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"KVEIKT Á FLASSI"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"SLÖKKT Á FLASSI"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Hvítjöfnun"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"HVÍTJÖFNUN"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Sjálfvirkt"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Glópera"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Dagsbirta"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Flúrljós"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Skýjað"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"SJÁLFVIRKT"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"GLÓPERA"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"DAGSBIRTA"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLÚRLJÓS"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"SKÝJAÐ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Umhverfisstilling"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Sjálfvirkt"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"KVEIKT Á HDR+"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"SLÖKKT Á HDR+"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"KVEIKT Á HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"SLÖKKT Á HDR"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Fjör"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Nótt"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Sólarlag"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Teiti"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ENGIN"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"FJÖR"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"NÓTT"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"SÓLARLAG"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"TEITI"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"SLÖKKT Á NIÐURTELJARA"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SEKÚNDA"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SEKÚNDUR"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SEKÚNDUR"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SEKÚNDUR"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Ekki hægt að velja í umhverfisstillingu."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Lýsing"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"LÝSING"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"FREMRI MYNDAVÉL"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"AFTARI MYNDAVÉL"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Í lagi"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Hætta við"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD-kortið þitt er að fyllast. Breyttu gæðastillingum eða eyddu einhverjum myndum eða öðrum skrám."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Stærðarmörkum náð."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Of hratt"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Undirbýr víðmynd"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Ekki var hægt að vista víðmynd."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Víðmynd"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Tekur víðmynd"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Bíður eftir fyrri víðmynd"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Vistar…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Teiknar upp víðmynd"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Snertu til að stilla fókus."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Áhrif"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Engin"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Kreista"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Stór augu"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Stór munnur"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Lítill munnur"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Stórt nef"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Lítil augu"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Í geimnum"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Sólarlag"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Þitt myndskeið"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Snertu til að taka mynd meðan á upptöku stendur."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Myndupptaka er hafin."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Myndupptaka var stöðvuð."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Hreinsa áhrif"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"KJÁNALEG ANDLIT"</string>
+    <string name="effect_background" msgid="1358432220077975015">"BAKGRUNNUR"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Lokari"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Hætta við"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Valmyndarhnappur"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s gátreitur"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Skipta yfir í mynd"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Skipta yfir í myndskeið"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Skipta yfir í víðmynd"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Skipta yfir í hringmynd"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Skipta yfir í mikil gæði"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Skipta yfir í endurfókus"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Hætta við yfirferð"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Yfirferð lokið"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Fara yfir endurtöku"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Valkostir"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Stillingalista lokað"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Stillingalisti opnaður"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Mynd tekin"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Mynd tekin"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Myndskeið tekið"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Opna í myndavél"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Efni tekið %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Mynd tekin %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Myndskeið tekið %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Víðmynd tekin %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"Hringmynd tekin %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Linsumóða tekin %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Efni í vinnslu"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Sýna/fela stillingalista"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Stillingalisti"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Sýna/fela filmubút"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Filmubútur"</string>
+    <string name="capital_on" msgid="1118214824959797269">"KVEIKT"</string>
+    <string name="capital_off" msgid="3020696135020167263">"SLÖKKT"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Spila myndskeið"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Slökkt"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 sekúnda"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 sekúndur"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 mínúta"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 mínútur"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 klukkustund"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 klukkustundir"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 klukkustundir"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"sekúndur"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"mínútur"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"klukkustundir"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Lokið"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Veldu millibil"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Slökkt er á myndatöku yfir tímabil. Kveiktu á henni til að velja tökutíðni."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Veldu lengd í sekúndum"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Telur niður að myndatöku"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Muna tökustaðsetningar?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Merktu myndirnar þínar og myndskeið með þeim staðsetningum þar sem myndataka fór fram.\n\nÖnnur forrit hafa aðgang að þessum upplýsingum ásamt vistuðu myndunum."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Nei, takk"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Já"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"FLEIRI VALKOSTIR"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"STILLINGAR"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Skapa litla plánetu"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Vistar litla plánetu…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Aðdráttur"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Snúa"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Myndritill"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Vista"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Ekki er hægt að hlaða myndina!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Filmuræma"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Velur veggfóður"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Stillingar"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Myndavél"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Myndskeið"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Myndataka yfir tímabil"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Gleiðhorn"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Víðmynd"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Linsumóða"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Skipta yfir í myndavélarstillingu"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Skipta yfir í upptökuvél"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Skipta yfir í Photo Sphere stillingu"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Skipta yfir í víðmyndastillingu"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Skipta yfir í linsumóðustillingu"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Opna stillingar"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Loka stillingum"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"Slökkt á HDR-plús"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"Kveikt á HDR-plús"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"Slökkt á HDR"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"Kveikt á HDR"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Slökkt á flassi"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Sjálfvirkt flass"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Kveikt á flassi"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"Slökkt á HDR+ flassi"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"Sjálfvirkt HDR+ flass"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"Kveikt á HDR+ flassi"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Kveikt á vasaljósi"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Slökkt á vasaljósi"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Aftari myndavél"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Fremri myndavél"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Slökkt á hnitalínum"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Kveikt á hnitalínum"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Slökkt er á niðurtalningu"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Niðurtalningin er stillt á 3 sekúndur"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Niðurtalningin er stillt á 10 sekúndur"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Fleiri valkostir"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Hætta við"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Lokið"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Taka aftur"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Deila"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Skoða"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Breyta"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Eyða"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Handvirk lýsingaruppbót"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Lýsingaruppbót -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Lýsingaruppbót -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Lýsingaruppbót 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Lýsingaruppbót +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Lýsingaruppbót +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Hnappurinn er nú %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Staðsetning"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Mynd í aftari myndavél"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Myndskeið aftari myndavél"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Mynd í fremri myndavél"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Myndskeið fremri myndavél"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Sjálfgefin myndavél"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Hjálp og ábendingar"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ í vinnslu…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Leyfi opins kóða"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Almennar stillingar"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Upplausn og gæði"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Um forritið"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Útgáfa smíðar"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Lítil"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Mikil"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixlar"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixlar"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Snertu hér til að endurstilla fókusinn"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Ítarlegt"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Handvirk lýsing"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Í stillingunum geturðu breytt upplausn og myndgæðum og valið ítarlega eiginleika."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Veldu myndastærð"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Þú getur breytt þessu seinna í stillingunum."</string>
+    <string name="share_to" msgid="5144911209144798122">"Deila á"</string>
+    <string name="edit_with" msgid="615569327230783971">"Breyta með"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"ÁFRAM"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ÉG SKIL"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Allt frá myndflögu \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Skorið frá myndflögu \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index d70a315..ce6a23d 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD (720p)"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD (1080p)"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD con risoluzione 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Per rimettere a fuoco, tocca qui"</string>
index e233e11..9e2a015 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"‏HD‏ 720p‎"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"‏HD ‏1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"‏%1$s מגה-פיקסל"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"‏(%1$d:%2$d)‏ %3$s מגה-פיקסל"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"כדי למקד מחדש, גע כאן"</string>
index 44e6573..432815f 100644 (file)
     <string name="set_duration" msgid="1638453882581604341">"設定時間(秒数)"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"画像を撮影するまでカウントダウンします"</string>
     <string name="remember_location_title" msgid="3045040613094030429">"撮影場所を記録しますか?"</string>
-    <string name="remember_location_prompt" msgid="5104210757873140169">"ç\94»å\83\8fã\82\84å\8b\95ç\94»ã\81«æ\92®å½±å ´æ\89\80ã\81®ã\82¿ã\82°ã\82\92ä»\98ã\81\91ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82\n\nä»\96ã\81®ã\82¢ã\83\97ã\83ªã\81\8bã\82\89ã\80\81ä¿\9då­\98ã\81\95ã\82\8cã\81\9fç\94»å\83\8fã\81¨ã\81¨ã\82\82ã\81«æ\92®å½±å ´æ\89\80ã\81®æ\83\85å ±ã\81«ã\82\82ã\82¢ã\82¯ã\82»ã\82¹ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8aã\81¾ã\81\99ã\80\82"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"画像や動画に撮影場所のタグを付ける。\n\n他のアプリから、保存された画像とともに撮影場所の情報にもアクセスできるようになります。"</string>
     <string name="remember_location_no" msgid="4412802756840226925">"いいえ"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"はい"</string>
     <string name="camera_menu_more_label" msgid="7951917844735828365">"その他のオプション"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$sメガピクセル"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d)%3$sメガピクセル"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"リフォーカスするには、ここをタップします"</string>
index 6de4f81..db516b9 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s მეგაპიქსელი"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s მეგაპიქსელი"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ხელახლა ფოკუსირებისათვის, შეეხეთ აქ"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
new file mode 100644 (file)
index 0000000..6ae1235
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Камера"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Камкордер"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Фотосурет ретінде орнату"</string>
+    <string name="delete" msgid="2714492172818940424">"Жою"</string>
+    <string name="share" msgid="8581089487762243115">"Бөлісу"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Панорамамен бөлісу"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Фото ретінде бөлісу"</string>
+    <string name="deleted" msgid="2036165115527228127">"Жойылған"</string>
+    <string name="undo" msgid="5110048345890050107">"КЕРІ ОРЫНДАУ"</string>
+    <string name="details" msgid="4404020741542549488">"Егжей-тегжейі"</string>
+    <string name="close" msgid="4826166926297479820">"Жабу"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Картада көрсету"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Солға айналдыру"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Оңға айналдыру"</string>
+    <string name="edit" msgid="2776879395749004347">"Өзгерту"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Кесу"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Өңдеу"</string>
+    <string name="set_as" msgid="5469055085024870081">"Орнату"</string>
+    <string name="video_err" msgid="1562566029875081552">"Бейне таспаны ойната алмайды."</string>
+    <string name="title" msgid="8061744305671964703">"Атауы"</string>
+    <string name="description" msgid="8193138501982849808">"Сипаттама"</string>
+    <string name="time" msgid="5248213506417024287">"Уақыт"</string>
+    <string name="location" msgid="564326205780827668">"Аймақ"</string>
+    <string name="path" msgid="5927003361865586353">"Жол"</string>
+    <string name="width" msgid="7045750687833828758">"Ені"</string>
+    <string name="height" msgid="5186001199353423689">"Биіктігі"</string>
+    <string name="orientation" msgid="3883761294106680270">"Бағыты"</string>
+    <string name="duration" msgid="5316211067383665008">"Ұзақтығы"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME түрі"</string>
+    <string name="file_size" msgid="6841070748357980676">"Файл өлшемі"</string>
+    <string name="maker" msgid="698691509121545856">"Автор"</string>
+    <string name="model" msgid="8547493604023069452">"Үлгі"</string>
+    <string name="flash" msgid="995041910749174196">"Жарқыл"</string>
+    <string name="aperture" msgid="2453802098282814022">"Aпертура"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Көздеу ұзақтығы"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Ақ түсті теңгеру"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Кадр уақыты"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"мм"</string>
+    <string name="manual" msgid="2444400953521760140">"Қолмен"</string>
+    <string name="auto" msgid="2552649885114400474">"Авто"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Жарқыл қолданылды"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Жарқылсыз"</string>
+    <string name="unknown" msgid="564184550182858146">"Белгісіз"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Бұл элемент жергілікті сақталған және желіден тыс қол жетімді."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Күте тұрыңыз..."</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Камера қателігі"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Камераға жалғау мүмкін болмады."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Камера қауіпсіздік саясаты себебінен өшірілді."</string>
+    <string name="wait" msgid="765601745709933047">"Күте тұрыңыз..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Камераны қолдануға дейін SD картасын енгізу."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD картаны әзірлеу"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD картаға кіру мүмкін болмады."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Уақыт аралығы режимінде жазу"</string>
+    <string name="capturing" msgid="5255164204641920893">"Түсіруде"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Камераны таңдау"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Артқа"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Алдыңғы"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Аймақты сақтау"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ОРНЫ"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Кері санау таймері"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Кері санау кезінде бипілдеу"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Өшірулі"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Қосулы"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Видео сапасы"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Уақыт аралығы"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Камера параметрлері"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Камкордер параметрлері"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Сурет өлшемі"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Үлкен"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Орташа"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Кішкене"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Көздеу режимі"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Авто"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Шексіздік"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Maкро"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"Авто"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ШЕКСІЗДІК"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MAКРО"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Жарқыл режимі"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ЖАРҚЫЛ РЕЖИМІ"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Авто"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Қосулы"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Өшірулі"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"АВТО ЖАРҚЫЛ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ЖАРҚЫЛ ҚОСУЛЫ"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ЖАРҚЫЛ ӨШІРУЛІ"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Ақ түсті теңгеру"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"АҚ ТҮСТІ ТЕҢГЕРУ"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Авто"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Қызу түстері"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Күндізгі жарық"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Флюросцент"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Бұлтты"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"Авто"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ҚЫЗУ ТҮСТЕРІ"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"КҮНДІЗГІ ЖАРЫҚ"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ФЛУОРЕСЦЕНТ"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"БҰЛТТЫ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Көрініс режимі"</string>
+    <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">"HDR (жоғары динамикалық аумақ)"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ (жоғары динамикалық аумақ) ҚОСУЛЫ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ӨШІРУЛІ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR (жоғары динамикалық аумақ) ҚОСУЛЫ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Кеш"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"Ешқандай"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ӘРЕКЕТ"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"ТҮН"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"КҮНБАТЫС"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"КЕШ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ТАЙМЕР ӨШІРУЛІ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 секунд"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 СЕКУНД"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 СЕКУНД"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 секунд"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Көрініс режимінде таңдалмайды."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Кадр"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"КАДР"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR (жоғары динамикалық аумақ)"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"АЛДЫҢҒЫ КАМЕРА"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"АРТҚЫ КАМЕРА"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Жарайды"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Өшіру"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD картаңызда орын азайып барады. Сапа параметрін өзгертіңіз немесе кейбір суреттер немесе файлдарды жойыңыз."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Өлшем шектеуінен асып кетті."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Тым жылдам"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Панораманы әзірлеу"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Панораманы сақтау мүмкін болмады"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Панорама"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Панораманы түсіру"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Алдыңғы панораманы күтуде"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Сақталуда..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Панораманы жасауда"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Көздеу үшін түрту."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Әсерлер"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Ешқандай"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Қысу"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Үлкен көздер"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Үлкен ауыз"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Кішкене ауыз"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Үлкен мұрын"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Кішкене көздер"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Кеңістікте"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Күнбатыс"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Сіздің видеоңыз"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Жазу кезінде фотоға түсіру үшін түртіңіз."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Видео жазу басталды."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Видео жазу тоқтады."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Анықтық әсерлері"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"ҚЫЗЫҚ БЕТ-ӘЛПЕТТЕР"</string>
+    <string name="effect_background" msgid="1358432220077975015">"Жалпы мағлұмат"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Сырғыту"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Өшіру"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Mәзір түймесі"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s құсбелгі шаршысы"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Фотоға ауысу"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Видеоға ауысу"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Панорамаға ауыстыру"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere режиміне ауысу"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Жоғары сапаға ауыстыру"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Қайта көздеуге ауысу"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Шолу режиміндегі өшіру"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Шолу аяқталды"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Шолу режимі арқылы қайта түсіру"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Опциялар"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Режимдер тізімі жабылды"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Режимдер тізімі ашылды"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Сурет түсірілді"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Фотосурет түсірілді"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Бейне түсірілді"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Камераға бекітпесін ашу"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s күні түсірілген медиа"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s күні түсірілген фотосурет"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s күні түсірілген бейне"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s күні түсірілген панорама"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s күні түсірілген дөңгелек панорама"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s күні түсірілген бұлыңғыр объект әсері"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Медианы өңдеу"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Режимдер тізімін ажырата қосу"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Режимдер тізімі"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Диафильмді ажырата қосу"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Диафильм"</string>
+    <string name="capital_on" msgid="1118214824959797269">"Қосулы"</string>
+    <string name="capital_off" msgid="3020696135020167263">"Өшірулі"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Бейнені ойнату"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Өшірулі"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 минут"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 сағат"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 сағат"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"секундтар"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"минуттар"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"сағаттар"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Орындалды"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Уақыт аралығын орнату"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Уақыт аралығы функциясы өшірулі. Уақыт аралығын реттеу үшін оны қосыңыз."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Ұзақтығын секундпен реттеу"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Фотосурет түсіру үшін кері санау"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Фотосурет аймақтары есіңізде ме?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Фотосуреттер мен видеоларды түсірілген аймақтарымен байланыстырыңыз. \n\nБұл ақпарат сақталған бейнелеріңізбен бірге басқа қолданбаларға қол жетімді болады."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Жоқ рахмет"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Иә"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"Басқа опциялар"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ПАРАМЕТРЛЕР"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Шағын планета жасау"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Кішкене планетаны сақтауда …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Ұлғайту"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Айналдыру"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Фотосурет жөндеу"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Сақтау"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Бейнені жүктеу мүмкін болмады!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Диафильм көрінісі"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Артқы фонды реттеу"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Параметрлер"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Камера"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Видео"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Уақыт аралығы"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Кең көру бұрышы"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Панорама"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Бұлыңғыр линза"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Камера режиміне ауысу"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Видео камераға ауысу"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphere режиміне ауысу"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Панорама режиміне ауысу"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Бұлыңғыр линза режиміне ауысу"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Параметрлерді ашу"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Параметрлерді жабу"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus өшірулі"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus қосулы"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR  (жоғары динамикалық аумақ) өшірулі"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR (жоғары динамикалық аумақ) қосулы"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Жарқыл өшірулі"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Авто жарқыл"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Жарқыл қосулы"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ жарқыл өшірулі"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ жарқыл автоматты"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ жарқыл қосулы"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Алау қосулы"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Алау өшірулі"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Артқы камера"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Алдыңғы камера"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Тор сызықтарын өшіру"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Тор сызықтарын қосу"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Кері санау таймері өшірулі"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Кері санау таймерінің ұзақтығы 3 секундқа орнатылған"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Кері санау таймерінің ұзақтығы 10 секундқа орнатылған"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Басқа опциялар"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Өшіру"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Орындалды"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Қайта түсіру"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Бөлісу"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Көрініс"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Өзгерту"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Жою"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Қолмен реттелетін экспозиция түзетілімі"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Экспозиция түзетілімі -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Экспозиция түзетілімі -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Экспозиция түзетілімі 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Экспозиция түзетілімі +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Экспозиция түзетілімі +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Түйме қазір %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Аймақ"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Артқы камераның фотосур."</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Артқы камераның бейнесі"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Алдыңғы камераның фотос."</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Алдыңғы камераның бейнесі"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Бастапқы камера"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Анықтама және кері байл."</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ өңделуде …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Ашық бастапқы код лицензиялары"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Жалпы параметрлер"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Ажыратымдылық және сапа"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Туралы"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Құру нұсқасы"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Төмен"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Жоғары"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксель"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мп"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Қайта фокустау үшін осы жерді түртіңіз"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Қосымша"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Қолмен рет-тін экс."</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"«Параметрлер» тармағында ажыратымдылықты және сапаны өзгертіңіз немесе кеңейтілген мүмкіндіктерді қолданып көріңіз."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Фотосурет өлшемін таңдау"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Мұны кейінірек «Параметрлер» тармағында өзгертуге болады."</string>
+    <string name="share_to" msgid="5144911209144798122">"Бөлісу"</string>
+    <string name="edit_with" msgid="615569327230783971">"Келесімен өңдеу"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"КЕЛЕСІ"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ЖАРАЙДЫ, ТҮСІНДІМ"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Толық сенсор \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Қиып алынған сенсор \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 766e070..1f905b2 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s មេហ្គាភីកសែល"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s មីហ្គា​ភីកសែល"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ដើម្បី​ផ្ដោត​ ប៉ះ​ទីនេះ"</string>
     <string name="pref_category_advanced" msgid="5921085080077574872">"កម្រិត​ខ្ពស់"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"កែតម្រូវពន្លឺដោយដៃ"</string>
-    <string name="settings_cling_text" msgid="5368054627268181292">"នៅ​ក្នុង​ការ​កំណត់ ប្ដូរ​គុណភាព​បង្ហាញ និង​គុណភាព ឬ​​សាកល្បង​លក្ខណៈ​កម្រិត​ខ្ពស់។"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"á\9e\93á\9f\85â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bá\9e\80á\9e¶á\9e\9aâ\80\8bá\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8b á\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e¢á\9e¶á\9e\85â\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\82á\9e»á\9e\8eá\9e\97á\9e¶á\9e\96â\80\8bá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89 á\9e\93á\9e·á\9e\84â\80\8bá\9e\82á\9e»á\9e\8eá\9e\97á\9e¶á\9e\96 á\9e¬â\80\8bâ\80\8bá\9e\9fá\9e¶á\9e\80á\9e\9bá\9f\92á\9e\94á\9e\84â\80\8bá\9e\9bá\9e\80á\9f\92á\9e\81á\9e\8eá\9f\88â\80\8bá\9e\80á\9e\98á\9f\92á\9e\9aá\9e·á\9e\8fâ\80\8bá\9e\81á\9f\92á\9e\96á\9e\9fá\9f\8bá\9f\94"</string>
     <string name="photo_size_selection_title" msgid="2789753590719172645">"ជ្រើស​ទំហំ​រូបថត"</string>
     <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"អ្នក​អាច​ប្ដូរ​វា​ពេល​ក្រោយ​ក្នុង​ការ​កំណត់។"</string>
     <string name="share_to" msgid="5144911209144798122">"ចែករំលែក"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
new file mode 100644 (file)
index 0000000..3d4dc44
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"ಕ್ಯಾಮರಾ"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"ಕ್ಯಾಮ್‌ಕಾರ್ಡರ್"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"ಚಿತ್ರವನ್ನು ಹೀಗೆ ಹೊಂದಿಸಿ"</string>
+    <string name="delete" msgid="2714492172818940424">"ಅಳಿಸು"</string>
+    <string name="share" msgid="8581089487762243115">"ಹಂಚು"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"ಪನೋರಮಾ ಹಂಚಿಕೊಳ್ಳಿ"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ಫೋಟೋ ರೂಪದಲ್ಲಿ ಹಂಚಿರಿ"</string>
+    <string name="deleted" msgid="2036165115527228127">"ಅಳಿಸಲಾಗಿದೆ"</string>
+    <string name="undo" msgid="5110048345890050107">"ರದ್ದುಮಾಡು"</string>
+    <string name="details" msgid="4404020741542549488">"ವಿವರಗಳು"</string>
+    <string name="close" msgid="4826166926297479820">"ಮುಚ್ಚು"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"ನಕ್ಷೆಯಲ್ಲಿ ತೋರಿಸಿ"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ಎಡಕ್ಕೆ ತಿರುಗಿಸು"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"ಬಲಕ್ಕೆ ತಿರುಗಿಸು"</string>
+    <string name="edit" msgid="2776879395749004347">"ಸಂಪಾದಿಸು"</string>
+    <string name="crop_action" msgid="6933589718464132714">"ಕತ್ತರಿಸಿ"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ಟ್ರಿಮ್"</string>
+    <string name="set_as" msgid="5469055085024870081">"ಹೀಗೆ ಹೊಂದಿಸಿ"</string>
+    <string name="video_err" msgid="1562566029875081552">"ವೀಡಿಯೊ ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+    <string name="title" msgid="8061744305671964703">"ಶೀರ್ಷಿಕೆ"</string>
+    <string name="description" msgid="8193138501982849808">"ವಿವರಣೆ"</string>
+    <string name="time" msgid="5248213506417024287">"ಸಮಯ"</string>
+    <string name="location" msgid="564326205780827668">"ಸ್ಥಾನ"</string>
+    <string name="path" msgid="5927003361865586353">"ಹಾದಿ"</string>
+    <string name="width" msgid="7045750687833828758">"ಅಗಲ"</string>
+    <string name="height" msgid="5186001199353423689">"ಎತ್ತರ"</string>
+    <string name="orientation" msgid="3883761294106680270">"ಓರಿಯಂಟೇಶನ್"</string>
+    <string name="duration" msgid="5316211067383665008">"ಅವಧಿ"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME ಪ್ರಕಾರ"</string>
+    <string name="file_size" msgid="6841070748357980676">"ಫೈಲ್ ಗಾತ್ರ"</string>
+    <string name="maker" msgid="698691509121545856">"ತಯಾರಕರು"</string>
+    <string name="model" msgid="8547493604023069452">"ಮಾದರಿ"</string>
+    <string name="flash" msgid="995041910749174196">"ಫ್ಲ್ಯಾಶ್‌"</string>
+    <string name="aperture" msgid="2453802098282814022">"ಅಪರ್ಚರ್‌‌"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ಸಂಗಮ ದೂರ"</string>
+    <string name="white_balance" msgid="1600142743496129085">"ವೈಟ್ ಬ್ಯಾಲೆನ್ಸ್"</string>
+    <string name="exposure_time" msgid="949787291620767754">"ಅನಾವರಣ ಸಮಯ"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"ಮಿಮೀ"</string>
+    <string name="manual" msgid="2444400953521760140">"ಹಸ್ತಚಾಲಿತ"</string>
+    <string name="auto" msgid="2552649885114400474">"ಸ್ವಯಂ"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ಫ್ಲ್ಯಾಶ್ ಆಗಿದೆ"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ಫ್ಲ್ಯಾಶ್ ಇಲ್ಲ"</string>
+    <string name="unknown" msgid="564184550182858146">"ಅಜ್ಞಾತ"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"ಈ ಐಟಂ ಅನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಸಂಗ್ರಹಿಸಲಾಗಿದ್ದು, ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿರುತ್ತದೆ."</string>
+    <string name="please_wait" msgid="1416313324505140068">"ಸ್ವಲ್ಪ ಕಾಯಿರಿ"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"ಕ್ಯಾಮರಾ ದೋಷ"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"ಕ್ಯಾಮರಾಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"ಭದ್ರತಾ ನೀತಿಗಳ ಕಾರಣ ಕ್ಯಾಮರಾವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
+    <string name="wait" msgid="765601745709933047">"ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"ಕ್ಯಾಮರಾ ಬಳಸುವುದಕ್ಕೂ ಮೊದಲು ಒಂದು SD ಕಾರ್ಡ್ ಸೇರಿಸಿ."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD ಕಾರ್ಡ್ ಸಿದ್ದಪಡಿಸಲಾಗುತ್ತಿದೆ..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD ಕಾರ್ಡ್ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"ಸಮಯದ ಅಂತರ ರೆಕಾರ್ಡ್ ಆಗುತ್ತಿದೆ"</string>
+    <string name="capturing" msgid="5255164204641920893">"ಕ್ಯಾಪ್ಚರಿಂಗ್‌‌"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"ಕ್ಯಾಮರಾ ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"ಹಿಂದೆ"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"ಮುಂಬದಿ"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"ಸ್ಥಳವನ್ನು ಉಳಿಸಿ"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ಸ್ಥಳ"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"ಕ್ಷಣಗಣನೆ ಟೈಮರ್"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"ಕ್ಷಣಗಣನೆ ಸಮಯದಲ್ಲಿ ಬೀಪ್"</string>
+    <string name="setting_off" msgid="6782191065550276632">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ಆನ್ ಆಗಿದೆ"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"ವೀಡಿಯೊ ಗುಣಮಟ್ಟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"ಸಮಯದ ಅಂತರ"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"ಕ್ಯಾಮರಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ಕ್ಯಾಮ್‌ಕಾರ್ಡರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ಚಿತ್ರದ ಗಾತ್ರ"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"ದೊಡ್ಡದು"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"ಮಧ್ಯಮ"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"ಸಣ್ಣ"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"ಕೇಂದ್ರೀಕರಣದ ಮೋಡ್"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"ಸ್ವಯಂ"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"ಅಪರಿಮಿತ"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"ಮ್ಯಾಕ್ರೋ"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"ಸ್ವಯಂ"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ಅಪರಿಮಿತ"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"ಮ್ಯಾಕ್ರೋ"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ಫ್ಲ್ಯಾಶ್ ಮೋಡ್"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ಫ್ಲ್ಯಾಶ್ ಮೋಡ್"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"ಸ್ವಯಂ"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ಆನ್ ಆಗಿದೆ"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"ಫ್ಲ್ಯಾಶ್ ಆಟೋ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ಫ್ಲ್ಯಾಶ್ ಆನ್"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ಫ್ಲ್ಯಾಶ್ ಆಫ್"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"ವೈಟ್ ಬ್ಯಾಲೆನ್ಸ್"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"ವೈಟ್ ಬ್ಯಾಲೆನ್ಸ್"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"ಸ್ವಯಂ"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"ಇನ್‌ಕ್ಯಾಂಡಿಸೆಂಟ್"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"ಡೇಲೈಟ್"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ಫ್ಲೋರೊಸೆಂಟ್"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"ಮೋಡ ಕವಿದ"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"ಸ್ವಯಂ"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ಇನ್ಸಾಂಡೆಸೆಂಟ್"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"ಡೇಲೈಟ್"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ಫ್ಲೋರೆಸೆಂಟ್"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"ಮೋಡ ಕವಿದ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"ದೃಶ್ಯದ ಮೋಡ್"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ಆನ್"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ಆಫ್"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ಆನ್"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"ಪಾರ್ಟಿ"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ಯಾವುದೂ ಇಲ್ಲ"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ಕ್ರಿಯೆ"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"ರಾತ್ರಿ"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"ಸೂರ್ಯಾಸ್ತ"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"ಪಾರ್ಟಿ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ಟೈಮರ್ ಆಫ್"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 ಸೆಕೆಂಡು"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"ದೃಶ್ಯದ ಮೋಡ್‌ನಲ್ಲಿ ಆಯ್ಕೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"ಎಕ್ಸ್‌ಪೋಸರ್‌‌"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ಎಕ್ಸ್‌ಪೋಸರ್‌‌"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"ಮುಂಬದಿ ಕ್ಯಾಮರಾ"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"ಹಿಂಬದಿ ಕ್ಯಾಮರಾ"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ಸರಿ"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"ರದ್ದುಮಾಡು"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"ನಿಮ್ಮ SD ಕಾರ್ಡ್ ಸ್ಥಳವು ಭರ್ತಿಯಾಗಿದೆ. ಗುಣಮಟ್ಟದ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಿ ಅಥವಾ ಕೆಲವು ಚಿತ್ರಗಳನ್ನು ಇಲ್ಲವೇ ಇತರ ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಿ."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"ಗಾತ್ರದ ಮಿತಿ ತಲುಪಿದೆ."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"ತುಂಬಾ ವೇಗವಾಗಿದೆ"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"ಪನೋರಮಾ ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"ಪನೋರಮಾ ಉಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"ಪನೋರಮಾ"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"ಪನೋರಮಾ ಕ್ಯಾಪ್ಚರಿಂಗ್‌‌"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"ಹಿಂದಿನ ಪನೋರಮಾಗೆ ಕಾಯಲಾಗುತ್ತಿದೆ"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"ಉಳಿಸುತ್ತಿದೆ.."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"ಪನೋರಮಾ ಸಲ್ಲಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ಕೇಂದ್ರೀಕರಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"ಎಫೆಕ್ಟ್‌ಗಳು"</string>
+    <string name="effect_none" msgid="3102797925086872636">"ಯಾವುದೂ ಇಲ್ಲ"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"ಸ್ಕ್ವೀಜ್‌‌"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"ದೊಡ್ಡ ಕಣ್ಣುಗಳು"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"ದೊಡ್ಡ ಬಾಯಿ"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"ಸಣ್ಣ ಬಾಯಿ"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"ದೊಡ್ಡ ಮೂಗು"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"ಸಣ್ಣ ಕಣ್ಣುಗಳು"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"ಅಂತರಿಕ್ಷದಲ್ಲಿ"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"ಸೂರ್ಯಾಸ್ತ"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"ನಿಮ್ಮ ವೀಡಿಯೊ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಲು ಸ್ಪರ್ಶಿಸಿ."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭವಾಗಿದೆ."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ಸ್ಥಗಿತಗೊಂಡಿದೆ."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"ಎಫೆಕ್ಟ್‌ಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"ಬೆಪ್ಪ ಮುಖಗಳು"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ಹಿನ್ನೆಲೆ"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"ಶಟರ್"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"ರದ್ದುಮಾಡು"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"ಮೆನು ಬಟನ್"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s ಚೆಕ್ ಬಾಕ್ಸ್"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ಫೋಟೋಗೆ ಬದಲಿಸು"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"ವೀಡಿಯೊಗೆ ಬದಲಾಯಿಸು"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"ಪನೋರಮಾಗೆ ಬದಲಾಯಿಸು"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 ಡಿಗ್ರಿ ಪನೋರಮಾಕ್ಕೆ ಬದಲಾಯಿಸು"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"ಉನ್ನತ ಗುಣಮಟ್ಟಕ್ಕೆ ಬದಲಾಯಿಸು"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"ಮರು ಕೇಂದ್ರೀಕರಿಸಲು ಸ್ವಿಚ್‌ ಮಾಡಿ"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"ವಿಮರ್ಶೆ ರದ್ದುಮಾಡಿ"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"ಪರಿಶೀಲನೆ ಮುಗಿದಿದೆ"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"ವಿಮರ್ಶೆ ಮರುತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"ಆಯ್ಕೆಗಳು"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"ಮೋಡ್‌ ಪಟ್ಟಿ ಮುಚ್ಚಲಾಗಿದೆ"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"ಮೋಡ್‌ ಪಟ್ಟಿ ತೆರೆದಿದೆ"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"ಸೆರೆಹಿಡಿಯಲಾಗಿದೆ"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"ವೀಡಿಯೊ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ಕ್ಯಾಮೆರಾಗೆ ಅನ್‌ಲಾಕ್‌ ಮಾಡಿ"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s ರಂದು ತೆಗೆದ ಮೀಡಿಯಾ"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s ರಂದು ತೆಗೆದ ಫೋಟೋ"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s ರಂದು ತೆಗೆದ ವೀಡಿಯೊ"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s ರಂದು ತೆಗೆದ ಪನೋರಮಾ"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s ರಂದು ತೆಗೆದ 360 ಡಿಗ್ರಿ ಪನೋರಮಾ"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s ರಂದು ತೆಗೆದ ಲೆನ್ಸ್ ಮಸುಕು"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"ಮಾಧ್ಯಮ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿದೆ"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"ಮೋಡ್‌ ಪಟ್ಟಿ ಟಾಗಲ್‌ ಮಾಡಿ"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"ಮೋಡ್‌ ಪಟ್ಟಿ"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ಸಿನಿಮಾ ತುಣುಕುಗಳನ್ನು ಟಾಗಲ್‌ ಮಾಡಿ"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ಚಲನಚಿತ್ರತುಣುಕು"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ಆನ್ ಮಾಡು"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ಆಫ್ ಮಾಡು"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"ವೀಡಿಯೊವನ್ನು ಪ್ಲೇ ಮಾಡಿ"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 ಸೆಕೆಂಡು"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 ನಿಮಿಷ"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 ನಿಮಿಷಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 ಗಂಟೆ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 ಗಂಟೆ"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 ಗಂಟೆಗಳು"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 ಗಂಟೆಗಳು"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"ನಿಮಿಷಗಳು"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"ಗಂಟೆಗಳು"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"ಮುಗಿದಿದೆ"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"ಮಧ್ಯಂತರದ ಸಮಯವನ್ನು ಹೊಂದಿಸಿ"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"ಸಮಯ ಅಂತರದ ವೈಶಿಷ್ಟ್ಯ ಆಫ್ ಆಗಿದೆ. ಮಧ್ಯಂತರದ ಸಮಯವನ್ನು ಹೊಂದಿಸಲು ಆದನ್ನು ಆನ್ ಮಾಡಿ."</string>
+    <string name="set_duration" msgid="1638453882581604341">"ಅವಧಿಯನ್ನು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಹೊಂದಿಸಿ"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ಪೋಟೋ ತೆಗೆದುಕೊಳ್ಳಲು ಎಣಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ಫೋಟೋ ಸ್ಥಳಗಳನ್ನು ನೆನಪಿಡುವುದೇ?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಸೆರೆಹಿಡಿದಿರುವ ಸ್ಥಳಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅವುಗಳನ್ನು ಟ್ಯಾಗ್ ಮಾಡಿ.\n\nನಿಮ್ಮ ಉಳಿಸಲಾಗಿರುವ ಚಿತ್ರಗಳ ಜೊತೆಗೆ ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಈ ಮಾಹಿತಿಯನ್ನು ಪ್ರವೇಶಿಸಬಹುದು."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"ಬೇಡ ಧನ್ಯವಾದಗಳು"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ಹೌದು"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"ಸಣ್ಣ ಪ್ಲಾನೆಟ್ ರಚಿಸಿ"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"ಸಣ್ಣ ಪ್ಲಾನೆಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"ಜೂಮ್ ಮಾಡು"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"ತಿರುಗಿಸು"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ಫೋಟೋ ಸಂಪಾದಕ"</string>
+    <string name="crop_save" msgid="2841974981340098579">"ಉಳಿಸು"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ಫಿಲ್ಮ್‌ಸ್ಟ್ರಿಪ್ ವೀಕ್ಷಣೆ"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="mode_camera" msgid="279763925715250603">"ಕ್ಯಾಮರಾ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"ವೀಡಿಯೊ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 ಡಿಗ್ರಿ ಪನೋರಮಾ"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"ಸಮಯದ ಅಂತರ"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"ವಿಶಾಲ ಕೋನ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"ಪನೋರಮಾ"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ಫೋಕಸ್‌ ಎಫೆಕ್ಟ್‌"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"ಕ್ಯಾಮರಾ ಮೋಡ್‌ಗೆ ಬದಲಾಯಿಸಿ"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"ವೀಡಿಯೊ ಕ್ಯಾಮರಾಗೆ ಬದಲಾಯಿಸಿ"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 ಡಿಗ್ರಿ ಪನೋರಮಾ ಮೋಡ್‌ಗೆ ಬದಲಾಯಿಸು"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"ಪನೋರಮಾ ಮೋಡ್‌ಗೆ ಬದಲಾಯಿಸಿ"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ಫೋಕಸ್‌ ಎಫೆಕ್ಟ್‌‌ ಮೋಡ್‌ಗೆ ಬದಲಾಯಿಸಿ"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"ಸೆಟ್ಟಿಂಗ್‍ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮುಚ್ಚಿರಿ"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR ಪ್ಲಸ್ ಆಫ್"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR ಪ್ಲಸ್ ಆನ್"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR ಆಫ್"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ಆನ್"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ಫ್ಲ್ಯಾಶ್ ಆಫ್"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"ಫ್ಲ್ಯಾಶ್ ಆಟೋ"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ಫ್ಲ್ಯಾಶ್ ಆನ್"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ಫ್ಲ್ಯಾಶ್‌ ಆಫ್‌ ಮಾಡು"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ ಸ್ವಯಂ ಫ್ಲ್ಯಾಶ್‌"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ಫ್ಲ್ಯಾಶ್‌ ಆನ್‌ ಮಾಡು"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ಟಾರ್ಚ್ ಆನ್"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ಟಾರ್ಚ್ ಆಫ್"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"ಹಿಂದಿನ ಕ್ಯಾಮರಾ"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"ಮುಂಬದಿ ಕ್ಯಾಮರಾ"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ಗ್ರಿಡ್ ಸಾಲುಗಳು ಆಫ್"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ಗ್ರಿಡ್ ಸಾಲುಗಳು ಆನ್"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"ಕೌಂಟ್‌ಡೌನ್ ಟೈಮರ್ ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"ಕೌಂಟ್‌ಡೌನ್ ಸಮಯದ ಅವಧಿಯನ್ನು 3 ಸೆಕೆಂಡುಗಳಿಗೆ ಹೊಂದಿಸಲಾಗಿದೆ"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"ಕೌಂಟ್‌ಡೌನ್ ಸಮಯದ ಅವಧಿಯನ್ನು 10 ಸೆಕೆಂಡುಗಳಿಗೆ ಹೊಂದಿಸಲಾಗಿದೆ"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"ರದ್ದುಮಾಡು"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"ಮುಗಿದಿದೆ"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"ಮತ್ತೆ ಸೆರೆಹಿಡಿಯಿರಿ"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"ವೀಕ್ಷಿಸು"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"ಸಂಪಾದಿಸು"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"ಅಳಿಸು"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"ಮ್ಯಾನುಯಲ್ ಮಾನ್ಯತೆ ಪರಿಹಾರ"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"ಮಾನ್ಯತೆ ಪರಿಹಾರ -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"ಮಾನ್ಯತೆ ಪರಿಹಾರ -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"ಮಾನ್ಯತೆ ಪರಿಹಾರ 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"ಮಾನ್ಯತೆ ಪರಿಹಾರ +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"ಮಾನ್ಯತೆ ಪರಿಹಾರ +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"ಬಟನ್ ಇದೀಗ %s ಆಗಿದೆ"</string>
+    <string name="setting_location" msgid="4459859689227893838">"ಸ್ಥಾನ"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"ಬ್ಯಾಕ್ ಕ್ಯಾಮರಾ ಫೋಟೋ"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"ಬ್ಯಾಕ್‌‌ ಕ್ಯಾಮೆರಾ ವೀಡಿಯೊ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"ಫ್ರಂಟ್ ಕ್ಯಾಮೆರಾ ಫೋಟೋ"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"ಫ್ರಂಟ್‌ ಕ್ಯಾಮರಾ ವಿಡಿಯೋ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"ಡೀಫಾಲ್ಟ್ ಕ್ಯಾಮರಾ"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"ಸಹಾಯ &amp; ಪ್ರತಿಕ್ರಿಯೆ"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿದೆ…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ಮುಕ್ತ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"ಸಾಮಾನ್ಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"ರೆಸಲ್ಯೂಷನ್ &amp; ಗುಣಮಟ್ಟ"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"ಕುರಿತು"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"ಬಿಲ್ಡ್ ಆವೃತ್ತಿ"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"ಕಡಿಮೆ"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"ಅಧಿಕ"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s ಮೆಗಾ ಪಿಕ್ಸೆಲ್ಸ್‌‌"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s ಮೆಗಾಪಿಕ್ಸೆಲ್"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ಮರುಕೇಂದ್ರೀಕರಿಸಲು, ಇಲ್ಲಿ ಸ್ಪರ್ಶಿಸಿ"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"ಸುಧಾರಿತ"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"ಮ್ಯಾನ್ಯುಯಲ್ ಎಕ್ಸ್‌‌ಪೋಸರ್‌"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ, ರೆಸಲ್ಯೂಷನ್ ಮತ್ತು ಗುಣಮಟ್ಟವನ್ನು ಬದಲಾಯಿಸಿ ಅಥವಾ ಸುಧಾರಿತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ಫೋಟೋ ಗಾತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"ನೀವು ಇದನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಂತರ ಬದಲಾಯಿಸಬಹುದು."</string>
+    <string name="share_to" msgid="5144911209144798122">"ಇದಕ್ಕೆ ಹಂಚಿರಿ"</string>
+    <string name="edit_with" msgid="615569327230783971">"ಇವರ ಜೊತೆಗೆ ಸಂಪಾದಿಸಿ"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"ಮುಂದೆ"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ಸರಿ, ಅರ್ಥವಾಯಿತು"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"ಪೂರ್ಣ ಸೆನ್ಸಾರ್ \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"ಕತ್ತರಿಸಲಾದ ಸೆನ್ಸಾರ್ \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 59ef1e3..d436b17 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s메가픽셀"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s메가픽셀"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"포커스를 재조정하려면 여기를 터치하세요."</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
new file mode 100644 (file)
index 0000000..8ec75f2
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Камера"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Камкордер"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Сүрөттү бул катары орнотуу"</string>
+    <string name="delete" msgid="2714492172818940424">"Жок кылуу"</string>
+    <string name="share" msgid="8581089487762243115">"Бөлүшүү"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Панорама бөлүшүү"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Сүрөт катары бөлүшүү"</string>
+    <string name="deleted" msgid="2036165115527228127">"Жок кылынды"</string>
+    <string name="undo" msgid="5110048345890050107">"КАЙТАРУУ"</string>
+    <string name="details" msgid="4404020741542549488">"Кеңири маалыматтар"</string>
+    <string name="close" msgid="4826166926297479820">"Жабуу"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Картада көрсөтүү"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Солго буруу"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Оңго буруу"</string>
+    <string name="edit" msgid="2776879395749004347">"Өзгөртүү"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Тегиздөө"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Тегиздөө"</string>
+    <string name="set_as" msgid="5469055085024870081">"Орнотулуучу түрү"</string>
+    <string name="video_err" msgid="1562566029875081552">"Видеону ойнотуу мүмкүн эмес."</string>
+    <string name="title" msgid="8061744305671964703">"Аталышы"</string>
+    <string name="description" msgid="8193138501982849808">"Баяндама"</string>
+    <string name="time" msgid="5248213506417024287">"Убакыт"</string>
+    <string name="location" msgid="564326205780827668">"Жайгаштыруу"</string>
+    <string name="path" msgid="5927003361865586353">"Жолу"</string>
+    <string name="width" msgid="7045750687833828758">"Туурасы"</string>
+    <string name="height" msgid="5186001199353423689">"Бийиктиги"</string>
+    <string name="orientation" msgid="3883761294106680270">"Багыттоо"</string>
+    <string name="duration" msgid="5316211067383665008">"Узактыгы"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME type"</string>
+    <string name="file_size" msgid="6841070748357980676">"Файлдын өлчөмү"</string>
+    <string name="maker" msgid="698691509121545856">"Жаратуучу"</string>
+    <string name="model" msgid="8547493604023069452">"Үлгүсү"</string>
+    <string name="flash" msgid="995041910749174196">"Жаркыма"</string>
+    <string name="aperture" msgid="2453802098282814022">"Апертура"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Фокус аралыгы"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Актын балансы"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Экспозиция убактысы"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"мм"</string>
+    <string name="manual" msgid="2444400953521760140">"Нускама"</string>
+    <string name="auto" msgid="2552649885114400474">"Авто"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Жаркыратылды"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Жаркымасыз"</string>
+    <string name="unknown" msgid="564184550182858146">"Белгисиз"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Бул жергиликтүү сакталды жана офлайндан жеткиликтүү"</string>
+    <string name="please_wait" msgid="1416313324505140068">"Сураныч, күтө туруңуз"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Камерада ката кетти"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Камерага кошула алган жок."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Коопсуздук максаттарынан улам камера токтотулду."</string>
+    <string name="wait" msgid="765601745709933047">"Күтө туруңуз…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Камераны колдонуп баштаардан мурун SD-карта салыңыз."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD-карта даярдалууда…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD-картага жете албай жатат."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Убакыт кармоо жазылууда"</string>
+    <string name="capturing" msgid="5255164204641920893">"Тартууда"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Камера тандоо"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Артка"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Алдыңкы"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Жайгашууну сактоо"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ЖАЙГАШТЫРУУ"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Артка саноо таймери"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Артка саналып жатканда үн чыгаруу"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Өчүк"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Жандырылган"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Видеонун сапаты"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Убакыт аралыгы"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Камеранын тууралоолору"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Видеокамера тууралоолору"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Сүрөт өлчөмү"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Чоң"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Орточо"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Кичине"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Фокус тартиби"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Авто"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Чексиз"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Макро"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"АВТО"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ЧЕКСИЗДИК"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"МАКРО"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Жаркыма тартиби"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ЖАРКЫМА ТАРТИБИ"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Авто"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Жандырылган"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Өчүрүлгөн"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"АВТО ЖАРКЫМА"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ЖАРКЫМА ЖАНДЫРЫЛГАН"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ЖАРКЫМА ӨЧҮК"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Актын балансы"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"АКТЫН БАЛАНСЫ"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Авто"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Аптап"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Күндүзгү жарык"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Флуоресценттик"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Булуттуу"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"АВТО"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"АПТАП"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"КҮНДҮЗГҮ ЖАРЫК"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ФЛУОРЕСЦЕНТТИК"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"КҮН БҮРКӨК"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Көрүнүш тартиби"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ЖАНДЫРЫЛГАН"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ӨЧҮК"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ЖАНДЫРЫЛГАН"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Кече"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ЭЧ НЕРСЕ ЖОК"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"КЫЙМЫЛ АРАКЕТ"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"ТҮН"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"КҮНДҮН БАТЫШЫ"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"КЕЧЕ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ТАЙМЕР ӨЧҮК"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 СЕКУНД"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 секунд"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 секунд"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 секунд"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Бул көрүнүштө тандалбайт."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Экспозиция"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ЭКСПОЗИЦИЯ"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"БЕТКИ КАМЕРА"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"АРТКЫ КАМЕРА"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"OK"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Айнуу"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD-картаңызда орун түгөнүүдө. Сапат тууралоолорун өзгөртүңүз же айрым сүрөттөрдү же файлдарды өчүрүңүз."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Өлчөмдүн чегине жетти."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Өтө тез"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Панораманы алдын ала көрүү"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Панораманы сактоо мүмкүн эмес."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Панорама"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Панорама тартылууда"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Панорама алдын ала көрүүгө даярдалууда"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Сакталууда…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Панорама иштелүүдө"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Фокус алыш үчүн тийиңиз."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Эффекттер"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Эч нерсе жок"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Кыстыруу"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Бакыраң көз"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Чоң ооз"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Оймок ооз"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Чоң мурун"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Кичинекей көздөр"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Космосто"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Күндүн батышы"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Видеоңуз"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Жазылып жатканда сүрөт тарттуу үчүн тийиңиз."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Видео жазуу башталды."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Видео жазуу токтотулду."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Эффектерди тазалоо"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"МАҢЫРОО ЧАЛЫШ"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ФОН"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Жапкыч"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Айнуу"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Меню баскычы"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s чекбокс"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Сүрөткө которулуу"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Видеого которулуу"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Панорамага которулуу"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere\'ге которулуу"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Жогорку сапатка которулуу"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Фокусту алмаштырууга өтүү"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Көрүү токтотулду"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Каралды"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Кайра тартуу"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Параметрлер"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Режим тизмеси жабык"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Режим тизмеси ачык"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Көрүнүш тартылды"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Сүрөт тартылды"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Видео тартылды"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Кулпуну ачып Камерага өтүү"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s тартылган медиа файлдар"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s тартылган сүрөт"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s тартылган видео"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s тартылган панорама"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s тартылган сүрөт сферасы"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s тартылган оптикалык мунарык"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Медиа иштетүү"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Режим тизмесин которуу"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Режим тизмеси"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Тасманы которуу"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Тасма"</string>
+    <string name="capital_on" msgid="1118214824959797269">"Жандырылган"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ӨЧҮК"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Видео ойнотуу"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Өчүрүлгөн"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 секунд"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 мүнөт"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 саат"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 саат"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"секунд"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"мүнөт"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"саат"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Даяр"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Убакыт аралыгын орнотуу"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Убакыт кармоо мүмкүнчүлүгү иштебейт. Аны иштетиш үчүн убакыт аралыгын бериңиз."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Узактыгын секунд менен орнотуу"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Сүрөт тартаардын алдында санак жүргүзүү"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Сүрөттүн жайгашуусу эстелип калсынбы?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Сүрөттөрдүн жана видеолордун тартылган орундарын белгилеңиз.\n\nСиз киргизген бул маалыматтарды башка колдонмолор пайдалана алышат."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Алкыш, кереги жок"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Ооба"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"КӨБҮРӨӨК МҮМКҮНЧҮЛҮКТӨР"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ТУУРАЛООЛОР"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Кыпындай планета түзүү"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Кыпындай планета сакталууда …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Масштаб"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Буруу"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Фото редактор"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Сактоо"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Сүрөттү жүктөй албайт!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Диафильм көрүнүшү"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Тушкагаз орнотулууда"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Тууралоолор"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Камера"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Видео"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Убакыт аралыгы"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Кең бурчтуу"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Панорама"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Оптикалык мунарык"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Камера тартибине которулуу"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Видео камерага которулуу"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphere тартибине которулуу"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Панорама тартибине которулуу"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Оптикалык мунарык тартибине которулуу"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Тууралоолорду ачуу"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Тууралоолорду жабуу"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus өчүк"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus жандырылган"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR өчүк"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR жандырылган"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Жаркыманы өчүк"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Авто жаркыма"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Жаркыма жандырылган"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ жарк этме өчүк"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ авто жарк этме"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ жарк этме күйүк"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Жарык жабдыгы жандырылган"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Жарык жабдыгы өчүк"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Арткы камера"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Бетки камера"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Тор сызыктары өчүрүлгөн"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Тор сызыктары жандырылган"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Артка саноо таймери өчүк"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Артка саноо таймеринин узактыгы 3 секундга коюлду"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Артка саноо таймеринин узактыгы 10 секундга коюлду"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Көбүрөөк мүмкүнчүлүктөр"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Айнуу"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Даяр"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Кайра тартуу"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Бөлүшүү"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Көрүү"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Өзгөртүү"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Жок кылуу"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Кол менен экспокомпенсациялоо"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Экспокомпенсация -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Экспокомпенсация -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Экспокомпенсация 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Экспокомпенсация +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Экспокомпенсация +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Баскыч азыр %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Жайгашуу"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Арткы камера сүрөтү"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Арткы камера видеосу"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Алдыңкы камера сүрөтү"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Алдыңкы камера видеосу"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Абалкы камера"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Жардам &amp; жооп пикир"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ иштетилүүдө …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Ачык программа уруксаттамалары"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Жалпы тууралоолор"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Чечилиш &amp; сапат"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Тууралуу"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Куралыш версиясы"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Начар"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Жогорку"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксель"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мегапиксель"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Кайра фокустоо үчүн бул жерге тийип коюңуз"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Өркүндөтүлгөн"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Колго экспозициялоо"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Жөндөөлөрдөн сүрөттүн чечилиши менен сапатын өзгөртүңүз же өркүндөтүлгөн мүмкүнчүлүктөрдү байкап көрүңүз."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Сүрөт өлчөмүн тандаңыз"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Муну кийинчерээк Жөндөөлөрдөн өзгөртсөңүз болот."</string>
+    <string name="share_to" msgid="5144911209144798122">"Төмнкү менн бөлүшүү:"</string>
+    <string name="edit_with" msgid="615569327230783971">"Төмнкү менн түзөтүү"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"КИЙИНКИ"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ЖАРАЙТ, ТҮШҮНДҮМ"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Толук сенсор \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Кесилген сенсор \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index ae51161..6f145a1 100644 (file)
     <string name="mode_photosphere" msgid="5082338476237291833">"ໂຟໂຕສະເຟຍ"</string>
     <string name="mode_timelapse" msgid="1517168724627815453">"Time Lapse"</string>
     <string name="mode_wideangle" msgid="1099640345041696830">"ມຸມກວ້າງ"</string>
-    <string name="mode_panorama" msgid="6882648621305828861">"ຮູàº\9aສີà»\88à»\81àº\88ສາàº\81à»\81àº\99ວàº\99ອàº\99"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"àº\9eາà»\82àº\99ຣາມາ"</string>
     <string name="mode_refocus" msgid="172192967119469061">"Lens Blur"</string>
     <string name="mode_camera_desc" msgid="3670807361165657278">"ສະຫຼັບເປັນໂໝດກ້ອງຖ່າຍຮູບ"</string>
     <string name="mode_video_desc" msgid="4058407412929464689">"ສະຫຼັບເປັນກ້ອງຖ່າຍວິດີໂອ"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s ເມ​ກາ​ພິກ​ເຊວ"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s ​ລ້ານ​ພິກ​ເຊວ"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"​ເພື່ອ​ປັບ​ໂຟ​ກັດ​ໃໝ່​, ໃຫ້​ແຕະ​ບ່ອນ​ນີ້"</string>
index 31e8466..a3381c2 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 piks."</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1 080 piks."</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiks."</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapiks."</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Jei norite perfokusuoti, palieskite čia"</string>
index 9be3a27..7eafe46 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD, 720 pikseļi"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD, 1080 pikseļi"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapikseļi"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapikseļi"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Lai veiktu atkārtotu fokusēšanu, pieskarieties šeit."</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
new file mode 100644 (file)
index 0000000..0df56a8
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Фотоапарат"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Видео камера"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Постави слика како"</string>
+    <string name="delete" msgid="2714492172818940424">"Избриши"</string>
+    <string name="share" msgid="8581089487762243115">"Сподели"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Сподели панорама"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Сподели како фотографија"</string>
+    <string name="deleted" msgid="2036165115527228127">"Избришано"</string>
+    <string name="undo" msgid="5110048345890050107">"ВРАТИ"</string>
+    <string name="details" msgid="4404020741542549488">"Детали"</string>
+    <string name="close" msgid="4826166926297479820">"Затвори"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Прикажи на карта"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Ротирај налево"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Ротирај надесно"</string>
+    <string name="edit" msgid="2776879395749004347">"Уреди"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Исечи"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Скрати"</string>
+    <string name="set_as" msgid="5469055085024870081">"Подеси како"</string>
+    <string name="video_err" msgid="1562566029875081552">"Видеото не може да се пушти."</string>
+    <string name="title" msgid="8061744305671964703">"Име"</string>
+    <string name="description" msgid="8193138501982849808">"Опис"</string>
+    <string name="time" msgid="5248213506417024287">"Време"</string>
+    <string name="location" msgid="564326205780827668">"Локација"</string>
+    <string name="path" msgid="5927003361865586353">"Патека"</string>
+    <string name="width" msgid="7045750687833828758">"Ширина"</string>
+    <string name="height" msgid="5186001199353423689">"Висина"</string>
+    <string name="orientation" msgid="3883761294106680270">"Ориентација"</string>
+    <string name="duration" msgid="5316211067383665008">"Времетраење"</string>
+    <string name="mimetype" msgid="6415940055077963944">"Тип MIME"</string>
+    <string name="file_size" msgid="6841070748357980676">"Големина на датотека"</string>
+    <string name="maker" msgid="698691509121545856">"Создавач"</string>
+    <string name="model" msgid="8547493604023069452">"Модел"</string>
+    <string name="flash" msgid="995041910749174196">"Блиц"</string>
+    <string name="aperture" msgid="2453802098282814022">"Отвор"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Фокусно растојание"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Баланс на бела боја"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Време на експозиција"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"мм"</string>
+    <string name="manual" msgid="2444400953521760140">"Рачно"</string>
+    <string name="auto" msgid="2552649885114400474">"Автоматски"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Блицот светна"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Без блиц"</string>
+    <string name="unknown" msgid="564184550182858146">"Непознато"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Оваа ставка е зачувана локално и е достапна без интернет."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Почекај..."</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Грешка на камера"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Не може да се поврзе со камерата."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Камерата е оневозможена поради безбедносните политики."</string>
+    <string name="wait" msgid="765601745709933047">"Почекај..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Вметнете СД картичка пред да ја користите камерата."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"СД картичката се подготвува..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Не можеше да се пристапи кон СД картичката."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Снимање на забрзано снимање"</string>
+    <string name="capturing" msgid="5255164204641920893">"Снимање"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Избери камера"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Задна"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Предна"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Зачувај локација"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ЛОКАЦИЈА"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Тајмер за одбројување"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Звук при одбројување"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Исклучено"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Вклучено"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Квалитет на видео"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Забрзано снимање"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Подесувања на фотоапарат"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Подесувања на видео камера"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Големина на слика"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Голема"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Средна"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Мала"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Режим на фокус"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Автоматски"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Бесконечност"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Макро"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"АВТОМАТСКИ"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"БЕСКОНЕЧНОСТ"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"МАКРО"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"РЕЖИМ НА БЛИЦ"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"РЕЖИМ НА БЛИЦ"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Автоматски"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Вклучено"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Исклучено"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"АВТОМАТСКИ БЛИЦ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"БЛИЦОТ Е ВКЛУЧЕН"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"БЛИЦОТ Е ИСКЛУЧЕН"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Баланс на бела боја"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"БАЛАНС НА БЕЛА БОЈА"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Автоматски"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Усвитено"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Дневна светлина"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Флуоресцентно"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Облачно"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"АВТОМАТСКИ"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"УСВИТЕНО"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"ДНЕВНА СВЕТЛИНА"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ФЛУОРЕСЦЕНТНО"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"ОБЛАЧНО"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Режим на сцена"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ е ВКЛУЧЕНО"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ИСКЛУЧЕНО"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR е ВКЛУЧЕНО"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Забава"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"НЕМА"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"Дејство"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"НОЌ"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"ЗАЛЕЗ"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"ЗАБАВА"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ТАЈМЕРОТ Е ИСКЛУЧЕН"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 СЕКУНДА"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 СЕКУНДИ"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 СЕКУНДИ"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 СЕКУНДИ"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Не може да се бира во режим на сцена."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Експозиција"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ЕКСПОЗИЦИЈА"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"ПРЕДНА КАМЕРА"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"ЗАДНА КАМЕРА"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Во ред"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Откажи"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"Вашата СД картичка ќе снема простор. Сменете го подесувањето за квалитет или избришете некои слики или други датотеки."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Достигнато е ограничувањето за големина."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Премногу брзо"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Панорамата се подготвува"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Не можеше да се зачува панорамата."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Панорама"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Снимање панорама"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Се чека претходната панорама"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Се зачувува..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Рендерирање панорама"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Допри да се фокусира."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Ефекти"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Нема"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Стисни"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Големи очи"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Голема уста"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Мала уста"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Голем нос"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Мали очи"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Во вселената"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Залез"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Ваше видео"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Допри за да фотографираш додека снимаш."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Снимањето видео започна."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Снимањето видео запре."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Отстрани ефекти"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"ГЛУПАВИ ЛИЦА"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ЗАДНИНА"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Бленда"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Откажи"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Копче „Мени“"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"Поле за избор %1$s"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Префрли на фотографија"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Префрли на видео"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Префрли на панорама"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Префрли на „Фотосфера“"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Префрли на висок квалитет"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Префрли на „Рефокус“"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Откажи преглед"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Прегледот е завршен"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Прегледот се повторува"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Опции"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Списокот со режими е затворен"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Списокот со режими е отворен"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Успешно снимено"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Фотографирано"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Снимено е видео"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Отклучи кон Фотоапарат"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Медиумот е снимен на %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Фотографијата е снимена на %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Видеото е снимено на %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Панорамата е снимена на %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"Фотосферата е снимена на %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Замаглен објектив снимен на %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Обработка на медиуми"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Вклучи список со режими"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Список со режими"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Намести го филмот"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Филм"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ВКЛУЧЕНО"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ИСКЛУЧЕНО"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Пушти видео"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Исклучено"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 секунда"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 секунди"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 минута"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 минути"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 час"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 час"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 часа"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 часа"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"секунди"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"минути"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"часа"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Готово"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Постави временски интервал"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Функцијата „Забрзано снимање“ е исклучена. Вклучете ја да поставите временски интервал."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Постави времетраење во секунди"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Одбројува за да фотографира"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Се сеќавате на локациите на фотографиите?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Означете ги вашите фотографии и видеа со локациите каде што се направени.\n\nДруги апликации може да пристапат кон овие информации, заедно со вашите зачувани слики."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Не, благодарам"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Да"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"ПОВЕЌЕ ОПЦИИ"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ПОДЕСУВАЊА"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Создај мала планета"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Зачувување „Мала планета“..."</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Зум"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Ротирај"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Уредник на фотографии"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Зачувај"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Не може да се вчита сликата!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Приказ на филмска лента"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Поставување тапет"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Подесувања"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Фотоапарат"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Видео"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Фотосфера"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Забрзано снимање"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Широк агол"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Панорама"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Замаглен објектив"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Префрли на „Режим на фотоапарат“"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Префрли на видео камера"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Префрли на „Режим на Фотосфера“"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Префрли на „Режим на панорама“"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Префрли на „Режим со замаглен објектив“"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Отвори подесувања"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Затвори подесувања"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Плус исклучено"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Плус е вклучено"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR исклучено"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR е вклучено"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Блицот е исклучен"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Автоматски блиц"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Блицот е вклучен"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"Блицот ХДР+ е исклучен"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"Блицот ХДР+ е автоматски"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"Блицот ХДР+ е вклучен"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Факелот е вклучен"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Факелот е исклучен"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Задна камера"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Предна камера"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Линиите на мрежата се исклучени"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Линиите на мрежата се вклучени"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Тајмерот за одбројување е исклучен"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Времетраењето на одбројувањето е поставено на 3 секунди"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Времетраењето на одбројувањето е поставено на 10 секунди"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Повеќе опции"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Откажи"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Готово"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Повтори"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Сподели"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Прикажи"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Уреди"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Избриши"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Рачна компензација на експозиција"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Компензација на експозиција -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Компензација на експозиција -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Компензација на експозиција 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Компензација на експозиција +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Компензација на експозиција +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Копчето е сега %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Локација"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Слика од задна камера"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Видео од задна камера"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Слика од предна камера"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Видео од предна камера"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Стандарден фотоапарат"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Помош и информации"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"Обработка на HDR+..."</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Лиценци со отворен код"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Општи подесувања"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Резолуција и квалитет"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"За"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Изгради верзија"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Низок"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Висок"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксели"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мегапиксели"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Допрете тука за да се рефокусира"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Напредни"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Рачна експозиција"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Во Поставки, променете ги резолуцијата и квалитетот или обидете се со напредни функции."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Изберете големина на фотографија"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Ова може да го промените подоцна во Поставки."</string>
+    <string name="share_to" msgid="5144911209144798122">"Сподели на"</string>
+    <string name="edit_with" msgid="615569327230783971">"Уреди со"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"СЛЕДНО"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ВО РЕД, СФАТИВ"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Целосен сензор \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Исечен сензор \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
new file mode 100644 (file)
index 0000000..3efa4e8
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"ക്യാമറ"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"ക്യാംകോർഡർ"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"ഇതായി ചിത്രം സജ്ജീകരിക്കുക"</string>
+    <string name="delete" msgid="2714492172818940424">"ഇല്ലാതാക്കുക"</string>
+    <string name="share" msgid="8581089487762243115">"പങ്കിടുക"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"പനോരമ പങ്കിടുക"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ഫോട്ടോയായി പങ്കിടുക"</string>
+    <string name="deleted" msgid="2036165115527228127">"ഇല്ലാതാക്കി"</string>
+    <string name="undo" msgid="5110048345890050107">"പഴയപടിയാക്കുക"</string>
+    <string name="details" msgid="4404020741542549488">"വിശദാംശങ്ങൾ"</string>
+    <string name="close" msgid="4826166926297479820">"അടയ്‌ക്കുക"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"മാപ്പിൽ കാണിക്കുക"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ഇടത്തേക്ക് തിരിക്കുക"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"വലത്തേക്ക് തിരിക്കുക"</string>
+    <string name="edit" msgid="2776879395749004347">"എഡിറ്റുചെയ്യുക"</string>
+    <string name="crop_action" msgid="6933589718464132714">"വലുപ്പം മാറ്റുക"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ട്രിം ചെയ്യുക"</string>
+    <string name="set_as" msgid="5469055085024870081">"ഇതായി സജ്ജീകരിയ്ക്കുക"</string>
+    <string name="video_err" msgid="1562566029875081552">"വീഡിയോ പ്ലേ ചെയ്യാനാകില്ല."</string>
+    <string name="title" msgid="8061744305671964703">"ശീര്‍ഷകം"</string>
+    <string name="description" msgid="8193138501982849808">"വിവരണം"</string>
+    <string name="time" msgid="5248213506417024287">"സമയം"</string>
+    <string name="location" msgid="564326205780827668">"ലൊക്കേഷൻ"</string>
+    <string name="path" msgid="5927003361865586353">"പാത്ത്"</string>
+    <string name="width" msgid="7045750687833828758">"വീതി"</string>
+    <string name="height" msgid="5186001199353423689">"ഉയരം"</string>
+    <string name="orientation" msgid="3883761294106680270">"ഓറിയന്‍റേഷന്‍‌"</string>
+    <string name="duration" msgid="5316211067383665008">"ദൈർഘ്യം"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME തരം"</string>
+    <string name="file_size" msgid="6841070748357980676">"ഫയൽ വലുപ്പം"</string>
+    <string name="maker" msgid="698691509121545856">"മേക്കർ"</string>
+    <string name="model" msgid="8547493604023069452">"മോഡല്‍"</string>
+    <string name="flash" msgid="995041910749174196">"ഫ്ലാഷ്"</string>
+    <string name="aperture" msgid="2453802098282814022">"അപ്‌റേച്ചർ"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ഫോക്കൽ ദൈർഘ്യം"</string>
+    <string name="white_balance" msgid="1600142743496129085">"വൈറ്റ് ബാലൻസ്"</string>
+    <string name="exposure_time" msgid="949787291620767754">"എക്‌സ്പോഷർ സമയം"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"മി.മീ"</string>
+    <string name="manual" msgid="2444400953521760140">"സ്വമേധയാലുള്ളത്"</string>
+    <string name="auto" msgid="2552649885114400474">"യാന്ത്രികം"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ഫ്ലാഷ് ചെയ്‌തു"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ഫ്ലാഷ് ഒന്നുമില്ല"</string>
+    <string name="unknown" msgid="564184550182858146">"അജ്ഞാതം"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"ഈ ഇനം പ്രദേശികമായി സംഭരിച്ചിരിക്കുന്നു, അത് ഓഫ്‌ലൈനിൽ ലഭ്യമാണ്."</string>
+    <string name="please_wait" msgid="1416313324505140068">"കാത്തിരിക്കുക"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"ക്യാമറ പിശക്"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"ക്യാമറയിൽ കണ‌ക്‌റ്റുചെയ്യാനായില്ല."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"സുരക്ഷാ നയങ്ങൾ കാരണം ക്യാമറ പ്രവർത്തനരഹിതമായി."</string>
+    <string name="wait" msgid="765601745709933047">"കാത്തിരിക്കൂ…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"ക്യാമറ ഉപയോഗിക്കുന്നതിന് മുമ്പ് SD കാർഡ് ചേർക്കുക."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD കാർഡ് തയ്യാറാക്കുന്നു..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD കാർഡ് ആക്‌സസ്സുചെയ്യാനായില്ല."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"ടൈം ലാപ്സ് റെക്കോർഡുചെയ്യൽ"</string>
+    <string name="capturing" msgid="5255164204641920893">"ചിത്രമെടുക്കുന്നു"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"ക്യാമറ തിരഞ്ഞെടുക്കുക"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"മടങ്ങുക"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"മുന്നിലെ ക്യാമറ"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"ലൊക്കേഷൻ സംരക്ഷിക്കുക"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ലൊക്കേഷൻ"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"കൗണ്ട്‌ഡൗൺ ടൈമർ"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"കൗ‌ണ്ട്‌ഡൗൺ സമയത്തുള്ള ബീപ് ശബ്ദം"</string>
+    <string name="setting_off" msgid="6782191065550276632">"ഓഫാണ്"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ഓണാണ്"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"വീഡിയോ നിലവാരം"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"ടൈം ലാപ്‌സ്"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"ക്യാമറ ക്രമീകരണങ്ങൾ"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ക്യാംകോർഡർ ക്രമീകരണങ്ങൾ"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ചിത്രത്തിന്റെ വലുപ്പം"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"വലുത്"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"ഇടത്തരം"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"ചെറുത്"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"ഫോക്കസ് മോഡ്"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"യാന്ത്രികം"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"ഇൻഫിനിറ്റി"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"മാക്രോ"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"യാന്ത്രികം"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ഇൻഫിനിറ്റി"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"മാക്രോ"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ഫ്ലാഷ് മോഡ്"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ഫ്ലാഷ് മോഡ്"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"യാന്ത്രികം"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ഓൺ ചെയ്യുക"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"ഓഫ്"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"യാന്ത്രിക ഫ്ലാഷ്"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ഫ്ലാഷ് ഓണാണ്"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ഫ്ലാഷ് ഓഫാണ്"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"വൈറ്റ് ബാലൻസ്"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"വൈറ്റ് ബാലൻസ്"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"യാന്ത്രികം"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"ഇൻകാൻഡസെന്റ്"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"പകൽ വെളിച്ചം"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ഫ്ലൂറസെന്റ്"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"മേഘാവൃതം"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"യാന്ത്രികം"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ഇൻകാൻഡസെന്റ്"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"പകൽ വെളിച്ചം"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ഫ്ലൂറസെന്റ്"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"മേഘാവൃതം"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"സീൻ മോഡ്"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ഓണാക്കുക"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ഓഫാക്കുക"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ഓണാക്കുക"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"പാർട്ടി"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ഒന്നുമില്ല"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ചലിക്കുന്ന ഷോട്ട്"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"രാത്രി"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"സൂര്യാസ്തമയം"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"പാർട്ടി"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ടൈമർ ഓഫാണ്"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"ഒരു സെക്കൻഡ്"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 സെക്കൻഡ്"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 സെക്കൻഡ്"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 സെക്കൻഡ്"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"സീൻ മോഡിൽ തിരഞ്ഞെടുക്കാനാവില്ല."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"എക്‌സ്‌പോഷർ"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"എക്‌സ്‌പോഷർ"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"മുന്നിലെ ക്യാമറ"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"പുറകിലെ ക്യാമറ"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ശരി"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"റദ്ദാക്കുക"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"നിങ്ങളുടെ SD കാർഡിലെ സംഭരണയിടം കഴിഞ്ഞു. നിലവാര ക്രമീകരണം മാറ്റുക അല്ലെങ്കിൽ ചില ചിത്രങ്ങളോ മറ്റ് ഫയലുകളോ ഇല്ലാതാക്കുക."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"വലുപ്പ പരിധിയിൽ എത്തിച്ചേർന്നു."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"വളരെയധികം വേഗത"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"പനോരമ തയ്യാറാക്കുന്നു"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"പനോരമ സംരക്ഷിക്കാനായില്ല."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"പനോരമ"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"പനോരമ ചിത്രമെടുക്കുന്നു"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"മുമ്പത്തെ പനോരമയ്ക്കായി കാത്തിരിയ്ക്കുന്നു"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"സംരക്ഷിക്കുന്നു…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"പനോരമ റെൻഡർ ചെയ്യൽ"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ഫോക്കസ് ചെയ്യാനായി സ്‌പർശിക്കുക."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"ഇഫക്റ്റുകൾ"</string>
+    <string name="effect_none" msgid="3102797925086872636">"ഒന്നുമില്ല"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"ഞെരുക്കുക"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"വലിയ കണ്ണുകൾ"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"വലിയ വായ"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"ചെറിയ വായ"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"വലിയ മൂക്ക്"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"ചെറിയ കണ്ണുകൾ"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"സ്‌പെയ്‌സിൽ"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"സൂര്യാസ്തമയം"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"നിങ്ങളുടെ വീഡിയോ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"റെക്കോർഡുചെയ്യുമ്പോൾ ഫോട്ടോ എടുക്കുന്നതിന് സ്‌പർശിക്കുക."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"വീഡിയോ റെക്കോർഡുചെയ്യൽ ആരംഭിച്ചു."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"വീഡിയോ റെക്കോർഡുചെയ്യൽ നിർത്തി."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"ഇഫക്‌റ്റുകൾ മായ്ക്കുക"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"രസകരമായ മുഖങ്ങൾ"</string>
+    <string name="effect_background" msgid="1358432220077975015">"പശ്ചാത്തലം"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"ഷട്ടർ"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"റദ്ദാക്കുക"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"മെനു ബട്ടൺ"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s ചെക്ക് ബോക്‌സ്"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ഫോട്ടോയിലേക്ക് മാറുക"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"വീഡിയോയിലേക്ക് മാറുക"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"പനോരമയിലേക്ക് മാറുക"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 ഡിഗ്രി പനോരമയിലേക്ക് മാറുക"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"ഉയർന്ന നിലവാരത്തിലേക്ക് മാറുക"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"വീണ്ടും ഫോക്കസ്സുചെയ്യുന്നതിലേയ്ക്ക് മാറുക"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"അവലോകനം റദ്ദാക്കുക"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"അവലോകനം പൂർത്തിയാക്കി"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"വീണ്ടുമുള്ള അവലോകനം"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"ഓപ്ഷനുകള്‍"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"മോഡ് ലിസ്‌റ്റ് അടച്ചു"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"മോഡ് ലിസ്റ്റ് തുറന്നു"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"ചിത്രമെടുത്തു"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ഫോട്ടോ എടുത്തു"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"വീഡിയോ എടുത്തു"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ക്യാമറയിലേയ്‌ക്ക് പോകാൻ അൺലോക്കുചെയ്യുക"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s-ന് എടുത്ത മീഡിയ"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s-ന് എടുത്ത ഫോട്ടോ"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s-ന് എടുത്ത വീഡിയോ"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s-ന് എടുത്ത പനോരമ"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s-ന് എടുത്ത 360 ഡിഗ്രി പനോരമ"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s-ന് എടുത്ത ഫോക്കസ് ഇഫക്റ്റ്"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"മീഡിയ പ്രോസസ്സുചെയ്യുന്നു"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"മോഡ് ലിസ്റ്റ് ടോഗിൾ ചെയ്യുക"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"മോഡ് ലിസ്റ്റ്"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ഫിലിംസ്ട്രിപ്പ് ടോഗിൾചെയ്യുക"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ഫിലിംസ്‌ട്രിപ്പ്"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ഓൺ"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ഓഫ്"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"വീഡിയോ പ്ലേ ചെയ്യുക"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ഓഫ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"ഒരു സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 സെക്കൻഡ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"ഒരു മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 മിനിറ്റ്"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"ഒരു മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 മണിക്കൂർ"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 മണിക്കൂർ"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"സെക്കൻഡ്"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"മിനിറ്റ്"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"മണിക്കൂര്‍"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"പൂർത്തിയായി"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"സമയ ഇടവേള സജ്ജീകരിയ്ക്കുക"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"ടൈം ലാപ്സ് സവിശേഷത ഓഫാണ്. സമയ ഇടവേള സജ്ജീകരിയ്ക്കുന്നതിന് അത് ഓണാക്കുക."</string>
+    <string name="set_duration" msgid="1638453882581604341">"ദൈർഘ്യം സെക്കൻഡിൽ സജ്ജീകരിക്കുക"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ഒരു ഫോട്ടോ എടുക്കുന്നതിന് കൗണ്ട്‌ഡൗൺ ചെയ്യുന്നു"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ഫോട്ടോ ലൊക്കേഷനുകൾ ഓർമ്മിക്കണോ?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"നിങ്ങളുടെ ഫോട്ടോകളിലും വീഡിയോകളിലും അവയെടുത്ത ലൊക്കേഷനുകൾ ടാഗുചെയ്യുക.\n\nനിങ്ങളുടെ സംരക്ഷിക്കപ്പെട്ട ചിത്രങ്ങളോടൊപ്പം മറ്റ് അപ്ലിക്കേഷനുകൾക്ക് ഈ വിവരവും ആക്‌‌സസ്സുചെയ്യാനാകും."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"വേണ്ട, നന്ദി"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ശരി"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"കൂടുതൽ ഓപ്ഷനുകൾ"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ക്രമീകരണങ്ങൾ"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"ചെറിയ പ്ലാനെറ്റ് സൃഷ്‌ടിക്കുക"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"ചെറിയ പ്ലാനെറ്റ് സംരക്ഷിക്കുന്നു …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"സൂം ചെയ്യുക"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"തിരിക്കുക"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ഫോട്ടോ എഡിറ്റർ"</string>
+    <string name="crop_save" msgid="2841974981340098579">"സംരക്ഷിക്കുക"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"ചിത്രം ലോഡുചെയ്യാനാവില്ല!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ഫിലിംസ്‌ട്രിപ്പ് കാഴ്‌ച"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"വാൾപേപ്പർ സജ്ജീകരിയ്ക്കുന്നു"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"ക്രമീകരണങ്ങൾ"</string>
+    <string name="mode_camera" msgid="279763925715250603">"ക്യാമറ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"വീഡിയോ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 ഡിഗ്രി പനോരമ"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"ടൈം ലാപ്‌സ്"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"വൈഡ് ആംഗിൾ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"പനോരമ"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ഫോക്കസ് ഇഫക്റ്റ്"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"ക്യാമറ മോഡിലേയ്ക്ക് മാറുക"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"വീഡിയോ ക്യാമറയിലേക്ക് മാറുക"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 ഡിഗ്രി പനോരമ മോഡിലേയ്ക്ക് മാറുക"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"പനോരമ മോഡിലേയ്ക്ക് മാറുക"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ഫോക്കസ് ഇഫക്റ്റ് മോഡിലേയ്ക്ക് മാറുക"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"ക്രമീകരണങ്ങൾ തുറക്കുക"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"ക്രമീകരണങ്ങൾ അടയ്ക്കുക"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR പ്ലസ് ഓഫാണ്"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR പ്ലസ് ഓണാണ്"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR ഓഫാണ്"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ഓണാണ്"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ഫ്ലാഷ് ഓഫാണ്"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"യാന്ത്രിക ഫ്ലാഷ്"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ഫ്ലാഷ് ഓണാണ്"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ഫ്ലാഷ് ഓഫ്"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ യാന്ത്രിക ഫ്ലാഷ്"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ഫ്ലാഷ് ഓൺ"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ടോർച്ച് ഓണാണ്"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ടോർച്ച് ഓഫാണ്"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"പിന്നിലെ ക്യാമറ"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"മുമ്പിലെ ക്യാമറ"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ഗ്രിഡ് ലൈനുകൾ ഓഫാണ്"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ഗ്രിഡ് ലൈനുകൾ ഓണാണ്"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"കൗണ്ട്‌ഡൗൺ ടൈമർ ഓഫാണ്"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"കൗണ്ട്‌ഡൗൺ ടൈമർ ദൈർഘ്യം 3 സെക്കൻഡായി സജ്ജമാക്കുക"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"കൗണ്ട്‌ഡൗൺ ടൈമർ ദൈർഘ്യം 10 സെക്കൻഡായി സജ്ജമാക്കുക"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"കൂടുതൽ ഓപ്‌ഷനുകൾ"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"റദ്ദാക്കുക"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"പൂർത്തിയായി"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"വീണ്ടും എടുക്കുക"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"പങ്കിടുക"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"കാണുക"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"എഡിറ്റുചെയ്യുക"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"ഇല്ലാതാക്കുക"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"സ്വമേധയായുള്ള എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"എക്‌സ്‌പോഷർ കോമ്പൻസേഷൻ +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"ബട്ടൺ ഇപ്പോൾ %s ആണ്"</string>
+    <string name="setting_location" msgid="4459859689227893838">"ലൊക്കേഷൻ"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"പിന്നിലെ ക്യാമറ ഫോട്ടോ"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"പിന്നിലെ ക്യാമറ വീഡിയോ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"മുമ്പിലെ ക്യാമറ ഫോട്ടോ"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"മുമ്പിലെ ക്യാമറ വീഡിയോ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"സ്ഥിരമായ ക്യാമറ"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"സഹായവും ഫീഡ്‌ബാക്കും"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ പ്രോസസ്സുചെയ്യുന്നു …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"പൊതുവായ സജ്ജീകരണങ്ങള്‍"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"മിഴിവും നിലവാരവും"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"ആമുഖം"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"ബിൽഡ് പതിപ്പ്"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"കുറഞ്ഞത്"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"ഉയർന്നത്"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s മെഗാപിക്‌സലുകൾ"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s മെഗാപിക്‌സലുകൾ"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"വീണ്ടും ഫോക്കസ് ചെയ്യാൻ, ഇവിടെ സ്‌പർശിക്കുക"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"വിപുലമായ"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"സ്വമേധയായുള്ള എക്‌സ്പോഷർ"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"ക്രമീകരണങ്ങളിൽ, മിഴിവും നിലവാരവും മാറ്റുക അല്ലെങ്കിൽ വിപുലമായ സവിശേഷതകൾ പരീക്ഷിക്കുക."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ഫോട്ടോ വലുപ്പം തിരഞ്ഞെടുക്കുക"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"നിങ്ങൾക്ക് ഇത് പിന്നീട് ക്രമീകരണങ്ങളിൽ മാറ്റാനാകും."</string>
+    <string name="share_to" msgid="5144911209144798122">"ഇതുമായി പങ്കിടുക"</string>
+    <string name="edit_with" msgid="615569327230783971">"ഇത് ഉപയോഗിച്ച് എഡിറ്റുചെയ്യുക"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"അടുത്തത്"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ശരി, മനസ്സിലായി"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"പൂർണ്ണ സെൻസർ \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"വലുപ്പം മാറ്റിയ സെൻസർ \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 1cf542f..0d8b1ca 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксел"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мегапиксел"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Дахин фокуслахын тулд энд хүрнэ үү"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
new file mode 100644 (file)
index 0000000..1abab65
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"कॅमेरा"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"कॅमकॉर्डर"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"चित्र या रूपात सेट करा"</string>
+    <string name="delete" msgid="2714492172818940424">"हटवा"</string>
+    <string name="share" msgid="8581089487762243115">"सामायिक करा"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"पॅनोरामा सामायिक करा"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"फोटो म्हणून सामायिक करा"</string>
+    <string name="deleted" msgid="2036165115527228127">"हटविला"</string>
+    <string name="undo" msgid="5110048345890050107">"पूर्ववत करा"</string>
+    <string name="details" msgid="4404020741542549488">"तपशील"</string>
+    <string name="close" msgid="4826166926297479820">"बंद करा"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"नकाशावर दर्शवा"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"डावीकडे फिरवा"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"उजवीकडे फिरवा"</string>
+    <string name="edit" msgid="2776879395749004347">"संपादित करा"</string>
+    <string name="crop_action" msgid="6933589718464132714">"क्रॉप करा"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ट्रिम करा"</string>
+    <string name="set_as" msgid="5469055085024870081">"या रूपात सेट करा"</string>
+    <string name="video_err" msgid="1562566029875081552">"व्हिडिओ प्ले करू शकत नाही."</string>
+    <string name="title" msgid="8061744305671964703">"शीर्षक"</string>
+    <string name="description" msgid="8193138501982849808">"वर्णन"</string>
+    <string name="time" msgid="5248213506417024287">"वेळ"</string>
+    <string name="location" msgid="564326205780827668">"स्थान"</string>
+    <string name="path" msgid="5927003361865586353">"पथ"</string>
+    <string name="width" msgid="7045750687833828758">"रूंदी"</string>
+    <string name="height" msgid="5186001199353423689">"उंची"</string>
+    <string name="orientation" msgid="3883761294106680270">"अभिमुखता"</string>
+    <string name="duration" msgid="5316211067383665008">"कालावधी"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME प्रकार"</string>
+    <string name="file_size" msgid="6841070748357980676">"फाईल आकार"</string>
+    <string name="maker" msgid="698691509121545856">"बनविणारा"</string>
+    <string name="model" msgid="8547493604023069452">"मॉडेल"</string>
+    <string name="flash" msgid="995041910749174196">"फ्लॅश"</string>
+    <string name="aperture" msgid="2453802098282814022">"छिद्र"</string>
+    <string name="focal_length" msgid="8351221512187346229">"फोकल लेंथः"</string>
+    <string name="white_balance" msgid="1600142743496129085">"शुभ्रता संतुलन"</string>
+    <string name="exposure_time" msgid="949787291620767754">"एक्सपोजर वेळ"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"मिमी"</string>
+    <string name="manual" msgid="2444400953521760140">"स्वहस्ते"</string>
+    <string name="auto" msgid="2552649885114400474">"स्वयंचलित"</string>
+    <string name="flash_on" msgid="6573457197393807642">"फ्लॅश टाकला"</string>
+    <string name="flash_off" msgid="7889323512830926273">"फ्‍लॅश नाही"</string>
+    <string name="unknown" msgid="564184550182858146">"अज्ञात"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"हा आयटम स्थानिकरित्या संचयित केलेला आहे आणि ऑफलाइन उपलब्ध आहे."</string>
+    <string name="please_wait" msgid="1416313324505140068">"कृपया प्रतीक्षा करा"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"कॅमेरा त्रुटी"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"कॅमेर्‍याशी कनेक्ट करणे शक्य नाही."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"सुरक्षा धोरणांमुळे कॅमेरा अक्षम केला गेला आहे."</string>
+    <string name="wait" msgid="765601745709933047">"कृपया प्रतीक्षा करा..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"कॅमेरा वापरण्‍यापूर्वी SD कार्ड घाला."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD कार्ड तयार करीत आहे..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD कार्डमध्‍ये प्रवेश करु शकलो नाही."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"वेळ समाप्ती रेकॉर्डिंग"</string>
+    <string name="capturing" msgid="5255164204641920893">"कॅप्चर करीत आहे"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"कॅमेरा निवडा"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"परत"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"समोर"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"स्थान जतन करा"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"स्थान"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"उलटगणती टाइमर"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"उलटगणती दरम्‍यान बीप"</string>
+    <string name="setting_off" msgid="6782191065550276632">"बंद"</string>
+    <string name="setting_on" msgid="9086728135773197891">"चालू"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"व्हिडिओची गुणवत्ता"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"वेळ समाप्ती"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"कॅमेरा सेटिंग्ज"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"कॅमकॉर्डर सेटिंग्ज"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"चित्राचा आकार"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"मोठा"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"मध्‍यम"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"लहान"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"फोकस मोड"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"स्वयंचलित"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"अनंतता"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"मॅक्रो"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"स्वयंचलित"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"अनंतता"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"मॅक्रो"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"फ्लॅश मोड"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"फ्लॅश मोड"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"स्वयंचलित"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"चालू"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"बंद"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"स्वयं फ्लॅश करा"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"फ्लॅश चालू"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"फ्लॅश बंद"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"शुभ्रता संतुलन"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"शुभ्रता संतुलन"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"स्वयंचलित"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"प्रदीप्त"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"दिनप्रकाश"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"स्वयंप्रकाशी"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"ढगाळ"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"स्वयंचलित"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"प्रदीप्त"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"दिनप्रकाश"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"स्वयंप्रकाशी"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"ढगाळ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"देखावा मोड"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ चालू"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ बंद"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR चालू"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"पार्टी"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"काहीही नाही"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"क्रिया"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"रात्र"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"सूर्यास्त"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"पार्टी"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"टाइमर बंद"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 सेकंद"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 सेकंद"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 सेकंद"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 सेकंद"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"देखावा मोडमध्ये निवडण्यायोग्य नाही."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"एक्सपोजर"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"एक्सपोजर"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"समोरचा कॅमेरा"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"मागील कॅमेरा"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ठिक आहे"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"रद्द करा"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"आपल्या SD कार्डावरील स्थान समाप्त झाले आहे. गुणवत्ता सेटिंग बदला किंवा काही प्रतिमा किंवा इतर फायली हटवा."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"आकार मर्यादा गाठली."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"खूप जलद"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"पॅनोरामा तयार करीत आहे"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"पॅनोरामा जतन करु शकलो नाही."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"पॅनोरामा"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"पॅनोरामा कॅप्‍चर करीत आहे"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"मागील पॅनोरामासाठी प्रतीक्षा करीत आहे"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"जतन करीत आहे..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"पॅनोरामा प्रस्तुत करीत आहे"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"फोकस करण्‍यासाठी स्‍पर्श करा."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"प्रभाव"</string>
+    <string name="effect_none" msgid="3102797925086872636">"काहीही नाही"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"दाबणे"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"मोठे डोळे"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"मोठे मुख"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"लहान मुख"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"मोठे नाक"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"लहान डोळे"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"अंतराळात"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"सूर्यास्त"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"आपला व्हिडिओ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"रेकॉर्डिंग करताना फोटो घेण्यासाठी स्पर्श करा."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"व्हिडिओ रेकॉर्डिंग सुरू झाले."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"व्हिडिओ रेकॉर्डिंग थांबविले."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"प्रभाव साफ करा"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"मूर्ख चेहरे"</string>
+    <string name="effect_background" msgid="1358432220077975015">"पार्श्वभूमी"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"शटर"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"रद्द करा"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"मेनू बटण"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s चेक बॉक्‍स"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"फोटोवर स्विच करा"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"व्हिडिओवर स्विच व्हा"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"पॅनोरामावर स्‍विच करा"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere वर स्‍विच करा"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"उच्च गुणवत्तेवर स्विच करा"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"रीफोकसवर स्विच करा"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"पुनरावलोकन रद्द"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"पुनरावलोकन केले"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"पुनःचित्रीकरणाचे पुनरावलोकन करा"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"पर्याय"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"मोड सूची बंद केली"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"मोड सूची खुली"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"कॅप्‍चर घेतले"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"फोटो घेतला"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"व्हिडिओ घेतला"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"कॅमेरावर अनलॉक करा"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s रोजी मीडिया घेतला"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s रोजी फोटो घेतला"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s रोजी व्हिडिओ घेतला"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s रोजी पॅनोरामा घेतला"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s रोजी 360 डिग्री पॅनोरामा घेतला"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s रोजी फोकस प्रभाव घेतला"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"मीडिया प्रक्रिया करीत आहे"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"मोड सूची टॉगल करा"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"मोड सूची"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"फिल्मस्ट्रीप टॉगल करा"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"फिल्मस्ट्रीप"</string>
+    <string name="capital_on" msgid="1118214824959797269">"चालू"</string>
+    <string name="capital_off" msgid="3020696135020167263">"बंद"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"व्हिडिओ प्ले करा"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"बंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 सेकंद"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 मिनिट"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 मिनिटे"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 तास"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 तास"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"सेकंद"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"मिनिटे"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"तास"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"पूर्ण झाले"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"वेळ मध्यांतर सेट करा"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"वेळ समाप्ती वैशिष्ट्य बंद आहे. वेळ मध्यांतर सेट करण्यासाठी ते चालू करा."</string>
+    <string name="set_duration" msgid="1638453882581604341">"कालावधी सेकंदांमध्ये सेट करा"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"फोटो घेण्‍यासाठी उलट गणना करत आहे"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"फोटो स्थाने लक्षात आहेत?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"आपले फोटो आणि व्‍हिडिओ जिथून घेतले त्या स्‍थानांसह टॅग करा.\n\nइतर अ‍ॅप्‍स आपल्‍या जतन केलेल्‍या प्रतिमांसह या माहितीमध्‍ये प्रवेश करु शकतात."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"नाही धन्यवाद"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"होय"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"अधिक पर्याय"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"सेटिंग्ज"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"लहान ग्रह तयार करा"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"लहान प्लॅनेट जतन करत आहे …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"झूम करा"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"चक्राकृती फिरवा"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"फोटो संपादक"</string>
+    <string name="crop_save" msgid="2841974981340098579">"जतन करा"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"प्रतिमा लोड करु शकत नाही!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"फिल्मस्ट्रीप दृश्य"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"वॉलपेपर सेट करत आहे"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"सेटिंग्ज"</string>
+    <string name="mode_camera" msgid="279763925715250603">"कॅमेरा"</string>
+    <string name="mode_video" msgid="8633929034048169139">"व्हिडिओ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"वेळ समाप्त"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"विस्तीर्ण-कोन"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"पॅनोरामा"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"फोकस प्रभाव"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"कॅमेरा मोडवर स्विच करा"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"व्हिडिओ कॅमेरा वर स्विच करा"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphere मोडवर स्विच करा"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"पॅनोरामा मोडवर स्विच करा"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"फोकस प्रभाव मोडवर स्‍विच करा"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"सेटिंग्ज उघडा"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"सेटिंग्ज बंद करा"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR प्लस बंद"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR प्लस चालू"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR बंद"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR चालू"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"फ्लॅश बंद"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"स्वयं फ्लॅश करा"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"फ्लॅश चालू"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ फ्लॅश बंद"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"स्वयं HDR+ फ्लॅश"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ फ्लॅश चालू"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"टॉर्च चालू"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"टॉर्च बंद"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"मागील कॅमेरा"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"समोरील कॅमेरा"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ग्रीड ओळी बंद"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ग्रीड ओळी चालू"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"उलटगणती समयदर्शक बंद आहे"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"उलटगणती समयदर्शक 3 सेकंदांवर सेट केले आहे"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"उलटगणती समयदर्शक 10 सेकंदांवर सेट केले आहे"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"अधिक पर्याय"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"रद्द करा"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"पूर्ण झाले"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"पुनःचित्रीकरण करा"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"सामायिक करा"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"पहा"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"संपादित करा"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"हटवा"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"व्यक्तिचलित उघडिप प्रतिपूर्ती"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"उघडिप प्रतिपूर्ती -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"उघडिप प्रतिपूर्ती -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"उघडिप प्रतिपूर्ती 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"उघडिप प्रतिपूर्ती +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"उघडिप प्रतिपूर्ती + 2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"बटण आता %s आहे"</string>
+    <string name="setting_location" msgid="4459859689227893838">"स्थान"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"कॅमेरा मागचा फोटो"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"कॅमेरा मागे व्‍हिडिओ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"कॅमेरा पुढील फोटो"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"कॅमेरा पुढील व्‍हिडिओ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"डीफॉल्ट कॅमेरा"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"मदत आणि अभिप्राय"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ प्रक्रिया करत आहे …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"मुक्त स्त्रोत परवाने"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"सामान्य सेटिंग्ज"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"रिझोल्‍यूशन आणि गुणवत्ता"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"विषयी"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"बिल्ड आवृत्ती"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"निम्न"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"उच्च"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD - 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s मेगापिक्‍सेल"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s मेगापिक्सेल"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"रीफोकस करण्यासाठी येथे स्पर्श करा"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"प्रगत"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"व्‍यक्तिचलित प्रदर्शन"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"सेटिंग्ज मध्ये, रिझॉल्यूशन आणि गुणवत्ता बदला किंवा प्रगत वैशिष्ट्ये वापरून पहा."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"फोटो आकार निवडा"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"आपण हे नंतर सेटिंग्ज मध्ये बदलू शकता."</string>
+    <string name="share_to" msgid="5144911209144798122">"यावर सामायिक करा"</string>
+    <string name="edit_with" msgid="615569327230783971">"सह संपादित करा"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"पुढील"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ठीक आहे, समजले"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"पूर्ण सेन्‍सर \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"क्रॉप केलेला सेन्‍सर \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 7b7a553..dd472cb 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s mpiksel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Untuk memfokus semula, sentuh di sini"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
new file mode 100644 (file)
index 0000000..c8df49c
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"ကင်မရာ"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"ဗီဒီယိုရိုက်"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"အနေဖြင့် ဓာတ်ပုံအားသတ်မှတ်ရန်"</string>
+    <string name="delete" msgid="2714492172818940424">"ဖျက်ပစ်ရန်"</string>
+    <string name="share" msgid="8581089487762243115">"မျှဝေခြင်း"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"မြင်ကွယ်ကျယ်အားမျှဝေပါ"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ဓာတ်ပုံအနေဖြင့်မျှပါ"</string>
+    <string name="deleted" msgid="2036165115527228127">"ဖျက်ပြီး"</string>
+    <string name="undo" msgid="5110048345890050107">"နောက်ပြန်လုပ်ပါ"</string>
+    <string name="details" msgid="4404020741542549488">"အသေးစိတ်"</string>
+    <string name="close" msgid="4826166926297479820">"ပိတ်ရန်"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"မြေပုံတွင်ပြရန်"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ဘယ်ဖက်သို့လှည့်ပါ"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"ညာဖက်သို့ လှည့်ပါ"</string>
+    <string name="edit" msgid="2776879395749004347">"ပြင်ဆင်ရန်"</string>
+    <string name="crop_action" msgid="6933589718464132714">"ဖြတ်ရန်"</string>
+    <string name="trim_action" msgid="4736803320203951827">"အနားသတ်ရန်"</string>
+    <string name="set_as" msgid="5469055085024870081">"အနေဖြင့် သတ်မှတ်ရန်"</string>
+    <string name="video_err" msgid="1562566029875081552">"ဗီဒီယို ဖွင့်လို့ မရပါ"</string>
+    <string name="title" msgid="8061744305671964703">"ခေါင်းစဉ်"</string>
+    <string name="description" msgid="8193138501982849808">"အကြောင်းအရာ"</string>
+    <string name="time" msgid="5248213506417024287">"အချိန်"</string>
+    <string name="location" msgid="564326205780827668">"တည်နေရာ"</string>
+    <string name="path" msgid="5927003361865586353">"လမ်းကြောင်း"</string>
+    <string name="width" msgid="7045750687833828758">"အနံ"</string>
+    <string name="height" msgid="5186001199353423689">"အမြင့်"</string>
+    <string name="orientation" msgid="3883761294106680270">"အနေအထား"</string>
+    <string name="duration" msgid="5316211067383665008">"ကြာချိန်"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME အမျိုးအစား"</string>
+    <string name="file_size" msgid="6841070748357980676">"ဖိုင်အရွယ်အစား"</string>
+    <string name="maker" msgid="698691509121545856">"ပြုလုပ်သူ"</string>
+    <string name="model" msgid="8547493604023069452">"မော်ဒယ်လ်"</string>
+    <string name="flash" msgid="995041910749174196">"မီးထိုး"</string>
+    <string name="aperture" msgid="2453802098282814022">"အလင်းဝင်ပေါက်"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ဖိုကယ်အရှည်"</string>
+    <string name="white_balance" msgid="1600142743496129085">"အဖြူရောင်ညီခြင်း"</string>
+    <string name="exposure_time" msgid="949787291620767754">"အလင်းဝင်ချိန်"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"မီလီမီတာ"</string>
+    <string name="manual" msgid="2444400953521760140">"ကိုယ်တိုင်ထည့်သွင်းခြင်း"</string>
+    <string name="auto" msgid="2552649885114400474">"အလိုအလျောက်"</string>
+    <string name="flash_on" msgid="6573457197393807642">"မီးထိုးပြီး"</string>
+    <string name="flash_off" msgid="7889323512830926273">"မီးမထိုး"</string>
+    <string name="unknown" msgid="564184550182858146">"အကြောင်းအရာမသိ"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"ဒီအရာကို စက်ပေါ်မှာသိမ်းဆည်းထားပြီး အွန်လိုင်းမရှိပဲ သုံးနိုင်ပါသည်"</string>
+    <string name="please_wait" msgid="1416313324505140068">"ကျေးဇူးပြု၍ ခဏစောင့်ပါ…"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"ကင်မရာအမှား"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"ကင်မရာကို ဆက်သွယ်လို့မရပါ"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"လုံခြုံရေးမူဝါဒကြောင့် ကင်မရာအား ပိတ်ထားပါသည်"</string>
+    <string name="wait" msgid="765601745709933047">"ကျေးဇူးပြု၍ ခဏစောင့်ပါ…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"ကင်မရာမသုံးခင် SDကဒ်အရင် ထည့်ပါ"</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SDကဒ်အအဆင်သင့်စေရန်ပြုလုပ်ခြင်း"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD အား ဆက်သွယ်လို့မရပါ"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"အချိန်ကြာရှည်ရိုက်ကူးမှု"</string>
+    <string name="capturing" msgid="5255164204641920893">"ရိုက်ယူရန်"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"ကင်မရာရွေးရန်"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"နောက်သို့"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"အရှေ့"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"တည်နေရာသိမ်းရန်"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"တည်နေရာ -"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"ရေတွက်မှု အချိန်မှတ်"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"အမှတ်စဉ်ခေါ်စဉ်အသံမြည်ပါ"</string>
+    <string name="setting_off" msgid="6782191065550276632">"ပိတ်"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ပွင့်"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"ဗီဒီယိုအရည်အသွေး"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"အချိန်ကြာမှု"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"ကင်မရာ ဆက်တင်များ"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ကင်မရာရိုက်ကူးမှုဆက်တင်များ"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ပုံအရွယ်အစား"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"ကြီးမားသော"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"အတော်အသင့်"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"သေးငယ်သော"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"အာရုံစိုက်နေခြင်း"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"အလိုအလျောက်"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"အတိုင်းအဆမရှိ"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"အနီးကပ်"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"အလိုအလျောက်"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"အတိုင်းအဆမရှိ"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"အနီးကပ်"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"မီးထိုးစနစ်"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"မီးထိုး စနစ်"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"အလိုအလျောက်"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ပွင့်"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"ပိတ်"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"အလိုအလျောက် မီးထိုး"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"မီးထိုးမှုဖွင့်ထား"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"မီးမထိုး"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"အဖြူရောင်ညီခြင်း"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"အဖြူရောင်ညီခြင်း"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"အလိုအလျောက်"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"အလင်းထုတ်မှု"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"နေ့အလင်းရောင်"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"အလင်းပြန်မှု"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"မိုးတိမ်ထူထပ်"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"အော်တို"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"အလင်းထုတ်မှု"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"နေ့အလင်းရောင်"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"အလင်းပြန်မှု"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"တိမ်ထူ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"မြင်ကွင်းစနစ်"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ဖွင့်ထား"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ပိတ်ထား"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ဖွင့်ထား"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"ပါတီ"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"တစ်ခုမှမဟုတ်ပါ"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ဆောင်ရွက်မှု"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"ည"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"နေဝင်ချိန်"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"ပါတီ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"အချိန်မှတ်မှုမရှိ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"၁ စက္ကန့်"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"၃ စက္ကန့်"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"၁၀ စက္ကန့်"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"၁၅ စက္ကန့်"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"မြင်ကွင်အနေအထားတွင်း ရွေးမရပါ"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"အလင်းရမှု"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"အလင်းထိတွေ့နှုန်း"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"အရှေ့ကင်မရာ"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"နောက်ကင်မရာ"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ကောင်းပြီ"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"ထားတော့"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD ကဒ်တွင် နေရာလွတ် နည်းနေပါပြီ။ ကွာလတီ ဆက်တင် ပြောင်းခြင်း သို့မဟုတ် ပုံအချို့ သို့မဟုတ် တခြားဖိုင်များအား ဖျက်ခြင်းလုပ်ပါ"</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"အရွယ်ကန့်သတ်မှုကျော်လွန်"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"အရမ်းမြန်"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"မြင်ကွင်းကျယ်အတွက်ပြင်ဆင်နေစဉ်"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"မြင်ကွင်းကျယ်အား သိမ်းလို့မရပါ"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"မြင်ကွင်းကျယ်"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"မြင်ကွင်းကျယ်အားရိုက်နေစဉ်"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"ပြီးခဲ့သော မြင်ကွင်းကျယ်အား စောင့်နေစဉ်"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"သိမ်းနေစဉ်…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"မြင်းကွင်းကျယ်အား ပြသနေစဉ်"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ဗဟိုချိန်ရန် ထိကိုင်ပါ"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"အထူးပြုလုပ်ချက်များ"</string>
+    <string name="effect_none" msgid="3102797925086872636">"တစ်ခုမှမဟုတ်ပါ"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"ဖြစ်ညှစ်သည်"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"မျက်လုံးကြီး"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"ပါးစပ်ကြီး"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"ပါးစပ်သေး"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"နှာခေါင်းကြီး"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"မျက်လုံးသေး"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"အာကာသတွင်"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"နေဝင်ချိန်"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"သင့် ဗီဒီယို"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"ရိုက်ကူးနေစဉ် ဓာတ်ပုံရိုက်ရန် ထိကိုင်ပါ"</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"ဗီဒီယိုရိုက်မှုစတင်ပြီး"</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"ဗီဒီယိုရိုက်မှုရပ်သွားပြီး"</string>
+    <string name="clear_effects" msgid="6192797848995967992">"အထူးပြုလုပ်ချက်များဖယ်ရန်"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"အသုံးမကျသောမျက်နှာများ"</string>
+    <string name="effect_background" msgid="1358432220077975015">"နောက်ခံ"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"ရှပ်တာ"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"ထားတော့"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"မီနူးခလုတ်"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s မှတ်သားကွက်"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ဓာတ်ပုံသို့ပြောင်းရန်"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"ဗီဒီယိုသို့ပြောင်းရန်"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"မြင်ကွင်းကျယ်သို့ ပြောင်းပါ"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Photo Sphere သို့ ပြောင်းရန်"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"အရည်အသွေးအမြင့်ပြောင်းရန်"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"အာရုံပြန်စိုက်ရန် ပြောင်းပါ"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"သုံးသပ်မှုအား ပယ်ဖျက်ရန်"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"သုံးသပ်မှုပြီး"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"သုံးသပ်မှုပြန်လုပ်ရန်"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"ရွေးစရာများ"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"မုဒ် စာရင်း ပိတ်ထား"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"မုဒ် စာရင်း ဖွင့်ထား"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"ရိုက်ယူမှု လုပ်ပြီး"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ဓာတ်ပုံ ရိုက်ပြီး"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"ဗီဒီယို ရိုက်ပြီး"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ကင်မရာသို့ သော့ဖွင့်"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"မီဒီယာကို %s မှာ ယူခဲ့"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"ဓာတ်ပုံ %s မှာ ရိုက်ခဲ့"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"ဗီဒီယို %s မှာ ရိုက်ခဲ့"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"မြင်ကွင်းကျယ် %s မှာ ရိုက်ခဲ့"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"ဓာတ်ပုံ အလုံး %s မှာ ရိုက်ခဲ့"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"မှုန်ဝါး မှန်ဘီလူး %s မှာ ရိုက်ခဲ့"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"မီဒီယာ စီမံဆောင်ရွက်နေ"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"လှုပ်ကစားမှု မုဒ် စာရင်း"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"မုဒ် စာရင်း"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ဖလင်ပြားကို လှုပ်ကစားရန်"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ဖလင်ပြား"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ပွင့်"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ပိတ်"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"ဗီဒီယို ဖွင့်ရန်"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ပိတ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"စက္ကန့်ဝက်"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"၁ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"၁ စက္ကန့်ခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"၂ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"၂ စက္ကန့်ခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"၃ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"၄ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"၅ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"၆ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"၁၀ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"၁၂ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"၁၅ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"၂၄ စက္ကန့်"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"မိနစ်ဝက်"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"၁ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"၁မိနစ်ခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"၂ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"၂ မိနစ်ခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"၃ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"၄ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"၅ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"၆ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"၁၀ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"၁၂ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"၁၅ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"၂၄ မိနစ်"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"နာရီဝက်"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"၁ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"၁နာရီခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"၂ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"၂နာရီခွဲ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"၃နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"၄ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"၅ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"၆ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"၁၀ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"၁၂ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"၁၅ နာရီ"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"၂၄နာရီ"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"စက္ကန့်"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"မိနစ်"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"နာရီ"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"ပြီးပါပြီ"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"အချိန်အကွာအဝေးသတ်မှတ်ရန်"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"အချိန်ကြာမှု ပြုလုပ်ချက်မရပါ။ ကြာချိန်သတ်မှတ်ရန် ထိုအရာအားဖွင့်ပါ"</string>
+    <string name="set_duration" msgid="1638453882581604341">"ကြာချိန်ကို စက္ကန့်ဖြင့် မှတ်ပါ"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ဓာတ်ပုံရိုက်ရန် အမှတ်ရေနေစဉ်"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ဓာတ်ပုံရိုက်ခဲ့တဲ့နေရာ သိမ်းရမလား"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"ဓာတ်ပုံများနှင့် ဗီဒီယိုများအား ရိုက်ကူးခဲ့ရာ နေရာများနှင့်တကွ မှတ်သားပါ\n\nတခြား အပ်ပလီကေးရှင်းများမှ ဒီအချက်အလက်ကို သိမ်းထားသော ပုံများနှင့်အတူ ရယူနိုင်သည်"</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"ကျေးဇူးပဲ မလိုပါဘူး"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"မှန်ပါသည်"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"ပိုမိုရွေးချယ်စရာများ"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ဆက်တင်များ"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Tiny Planet ဖန်တီးရန်"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Tiny Planet အားသိမ်းဆည်းနေစဉ်…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"ချဲ့ချုံ့ရန်"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"လှည့်ရန်"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ဓာတ်ပုံပြင်သောအရာ"</string>
+    <string name="crop_save" msgid="2841974981340098579">"သိမ်းပါ"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"ပုံတင်လို့မရပါ!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Filmstrip မြင်ကွင်း"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"နောက်ခံ ရွေးနေစဉ်"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"ဆက်တင်များ"</string>
+    <string name="mode_camera" msgid="279763925715250603">"ကင်မရာ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"ဗီ​ဒီ​ယို​"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"ကြားမြင့်ချိန်"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"ထောင့်ကျယ်"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"မြင်ကွင်းကျယ်"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"မှန်ဘီလူးဝါးဝါး"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"ကင်မရာစနစ်အားပြောင်းရန်"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"ဗီဒီယိုကင်မရာသို့ပြောင်းရန်"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Photo Sphereစနစ်အားပြောင်းရန်"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"မြင်ကွင်းကျယ်စနစ်သို့ ပြောင်းပါ"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"မှန်ဘီလူးမှုန်ဝါးမှုစနစ်သို့ ပြောင်းပါ"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"ဆက်တင်းကိုဖွင့်ရန်"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"ဆက်တင်အားပိတ်ရန်"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus မရှိ"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus ဖွင့်ထား"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDRမရှိ"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ဖွင့်ထား"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"မီးမထိုး"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"အလိုအလျောက်မီးထိုး"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"မီးပွင့်နိုင်"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ဖလက်ရှ ပိတ်ရန်"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ ဖလက်ရှ အော်တို"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ဖလက်ရှ ဖွင့်ရန်"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"မီးဖွင့်ထား"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"မီးပိတ်ထား"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"အနောက်မှကင်မရာ"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"အရှေ့ကင်မရာ"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"လိုင်းပြမှုမရှိ"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"လိုင်းပြမှုရှိ"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"အချိန်စေ့ တိုင်မား ပိတ်ထား"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"အချိန်စေ့ တိုင်မား ကြာချိန်ကို ၃ စက္ကန့်မှာ သတ်မှတ်ထား"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"အချိန်စေ့ တိုင်မား ကြာချိန်ကို ၁၀ စက္ကန့်မှာ သတ်မှတ်ထား"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"ပိုမိုရွေးချယ်စရာများ"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"ထားတော့"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"ပြီးပါပြီ"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"ပြန်ရိုက်ကူးပါ"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"မျှဝေခြင်း"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"မြင်ကွင်း"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"ပြင်ဆင်ရန်"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"ဖျက်ပစ်ရန်"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"လက်ဖြင့် အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း -၂"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း -၁"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း ၀"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း +၁"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"အလင်းဖွင့်ပေးမှုကို အစားထိုးပေးခြင်း +၂"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"ခလုတ်မှာယခု %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"တည်နေရာ"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"​​ကျောဘက် ကင်မရာ ဓာတ်ပုံ"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"​​ကျောဘက် ကင်မရာ ဗီဒီယို"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"ရှေ့ဘက် ကင်မရာ ဓာတ်ပုံ"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"ရှေ့ဘက် ကင်မရာ ဗီဒီယို"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"အခြေခံ ကင်မရာ"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"အကူအညီ &amp; တုန့်ပြန်ချက်"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ အားပြုလုပ်နေစဉ်…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"အခမဲ့ ရင်းမြစ် လိုင်စင်များ"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"အထွေထွေဆက်တင်များ"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"ပြတ်သားမှု &amp; အရည်အသွေး"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"အကြောင်း"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"တည်ဆောက်ခြင်းအမှတ်"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"နည်းသော"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"မြင့်မားခြင်း"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s မီဂါပစ်ဇယ်"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s မီဂါပစ်ဇယ်"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ဆုံချက် ပြန်ညှိရန် ဒီမှာ ထိပါ"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"အဆင့်မြင့်"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"လက်ဖြင့် အလင်းပေး"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"ဆက်တင် ထဲမှာ၊ ပြတ်သားမှု နှင့် အရည်အသွေးကို ပြောင်းပါ၊ သို့မဟုတ် အဆင့်မြင့် အင်္ဂါရပ်များကို စမ်းကြည့်ပါ။"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ဓာတ်ပုံဆိုက် ရွေးရန်"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"နောက်မှ ဆက်တင်ထဲတွင် ပြန်ပြောင်း၍ ရပါသည်။"</string>
+    <string name="share_to" msgid="5144911209144798122">"...အား မျှဝေရန်"</string>
+    <string name="edit_with" msgid="615569327230783971">"...နှင့် တည်းဖြတ်ရန်"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"ရှေ့ဆက်"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"အိုကေ၊ ရပြီ"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"အာရုံခံပုံ အပြည့် \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"အာရုံခံကိရိယာမှ ဖြတ်ထား\n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"၀"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"၁"</string>
+</resources>
index 7e2811e..77a40e6 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksler"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapiksler"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Trykk her for å endre fokus"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
new file mode 100644 (file)
index 0000000..804106c
--- /dev/null
@@ -0,0 +1,372 @@
+<?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="1175086483881127797">"क्यामेरा"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"क्यामकोर्डर"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"को रूपमा तस्बिरलाई मिलाउनुहोस्"</string>
+    <string name="delete" msgid="2714492172818940424">"मेटाउनुहोस्"</string>
+    <string name="share" msgid="8581089487762243115">"साझेदारी गर्नुहोस्"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"परिदृश्य साझेदार गर्नुहोस्"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"तस्बिरको रूपमा साझेदारी गर्नुहोस्"</string>
+    <string name="deleted" msgid="2036165115527228127">"मेटियो"</string>
+    <string name="undo" msgid="5110048345890050107">"अनावृत गर्नुहोस्"</string>
+    <string name="details" msgid="4404020741542549488">"विवरणहरू"</string>
+    <string name="close" msgid="4826166926297479820">"बन्द गर्नुहोस्"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"नक्सामा देखाउनुहोस्"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"बायाँ घुमाउनुहोस्"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"दायाँ घुमाउनुहोस्"</string>
+    <string name="edit" msgid="2776879395749004347">"सम्पादन गर्नुहोस्"</string>
+    <string name="crop_action" msgid="6933589718464132714">"क्रप गर्नुहोस्"</string>
+    <string name="trim_action" msgid="4736803320203951827">"काट्नुहोस्"</string>
+    <string name="set_as" msgid="5469055085024870081">"को रूपमा सेट गर्नुहोस्"</string>
+    <string name="video_err" msgid="1562566029875081552">"भिडियो चलाउन सकिएन।"</string>
+    <string name="title" msgid="8061744305671964703">"शीर्षक"</string>
+    <string name="description" msgid="8193138501982849808">"वर्णन"</string>
+    <string name="time" msgid="5248213506417024287">"समय"</string>
+    <string name="location" msgid="564326205780827668">"स्थान"</string>
+    <string name="path" msgid="5927003361865586353">"बाटो"</string>
+    <string name="width" msgid="7045750687833828758">"चौडाइ"</string>
+    <string name="height" msgid="5186001199353423689">"उचाइ"</string>
+    <string name="orientation" msgid="3883761294106680270">"अभिमुखिकरण"</string>
+    <string name="duration" msgid="5316211067383665008">"अवधि"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME प्रकार"</string>
+    <string name="file_size" msgid="6841070748357980676">"फाइल आकार"</string>
+    <string name="maker" msgid="698691509121545856">"निर्माता"</string>
+    <string name="model" msgid="8547493604023069452">"मोडेल"</string>
+    <string name="flash" msgid="995041910749174196">"फ्ल्यास"</string>
+    <string name="aperture" msgid="2453802098282814022">"अपार्चर"</string>
+    <string name="focal_length" msgid="8351221512187346229">"फोकल लेन्थ"</string>
+    <string name="white_balance" msgid="1600142743496129085">"स्वेत सन्तुलन"</string>
+    <string name="exposure_time" msgid="949787291620767754">"एक्सपोजर समय"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"मिलिमिटर"</string>
+    <string name="manual" msgid="2444400953521760140">"म्यानुएल"</string>
+    <string name="auto" msgid="2552649885114400474">"स्वतः"</string>
+    <string name="flash_on" msgid="6573457197393807642">"फ्ल्यास चलाइयो"</string>
+    <string name="flash_off" msgid="7889323512830926273">"कुनै फ्ल्यास छैन"</string>
+    <string name="unknown" msgid="564184550182858146">"अज्ञात"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"यो वस्तु स्थानिय रूपमा भन्डारण गरिएको छ र अफलाइन उपलब्ध छ।"</string>
+    <string name="please_wait" msgid="1416313324505140068">"कृपया प्रतीक्षा गर्नुहोस्"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"क्यामेरा त्रुटि"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"क्यामेरासँग जडान गर्न सकिएन।"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"सुरक्षा नीतिहरूका कारण क्यामरा निष्क्रिय गरिएको छ।"</string>
+    <string name="wait" msgid="765601745709933047">"कृपया प्रतीक्षा गर्नुहोस्..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"क्यामेराको उपयोग गर्नु अघि एउटा SD कार्ड भित्र राख्नुहोस्।"</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD कार्ड तयार गरिँदै..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD कार्ड प्रयोग गर्न सकेन।"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"समय ल्याप्स रेकर्डिङ"</string>
+    <string name="capturing" msgid="5255164204641920893">"क्याप्चर गरिँदै"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"क्यामेरा चयन गर्नुहोस्"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"पछाडि"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"अगाडि"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"स्थान सुरक्षित गर्नुहोस्"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"LOCATION"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"काउन्टडाउन टाईमर"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"काउन्टडाउनको क्रममा बिप"</string>
+    <string name="setting_off" msgid="6782191065550276632">"बन्द"</string>
+    <string name="setting_on" msgid="9086728135773197891">"खुला"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"भिडियोको गुणस्तर"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"समय ल्याप्स"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"क्यामरा सेटिङहरू"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"क्यामकोडर सेटिङहरू"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"चित्र आकार"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"ठूलो"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"मध्यम"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"सानो"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"फोकस मोड"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"स्वतः"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"अनन्तता"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"बृहत"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"AUTO"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"INFINITY"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MACRO"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"फ्ल्यास मोड"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"FLASH MODE"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"स्वतः"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"खुला"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"बन्द"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"FLASH AUTO"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"FLASH ON"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"FLASH OFF"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"स्वेत सन्तुलन"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"WHITE BALANCE"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"स्वतः"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"चमक"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"दिनको प्रकाश"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"फ्लोरेसेन्ट"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"बादलु"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AUTO"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"INCANDESCENT"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"DAYLIGHT"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLUORESCENT"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"CLOUDY"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"दृश्य मोड"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ON"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ OFF"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ON"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR OFF"</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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"पार्टी"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"NONE"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ACTION"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"NIGHT"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"SUNSET"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"PARTY"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"TIMER OFF"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"१ सेकेन्ड"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"३ सेकेन्ड"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"१० सेकेन्ड"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"१५ सेकेन्ड"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"दृश्य मोडमा चयनयोग्य हुँदैन।"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"एक्स्पोजर"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"EXPOSURE"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"FRONT CAMERA"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"BACK CAMERA"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ठिक छ"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"रद्द गर्नुहोस्"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"तपाईँको SD कार्डको ठाउँ सकिँदै छ। गुणस्तर सेटिङ परिवर्तन गर्नुहोस् अथवा केही तस्बिरहरू वा अन्य फाइलहरू मेट्नुहोस्।"</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"आकार सीमा पुग्यो।"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"अति छिटो"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"परिदृश्य तयार गरिँदै"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"परिदृश्य सुरक्षित गर्न सकेन।"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"परिदृश्य"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"परिदृश्य खिच्दै"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"अघिल्लो परिदृश्यको प्रतिक्षा गर्दै।"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"सुरक्षित गर्दै...."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"परिदृश्य प्रतिपादन"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"फोकस गर्न टच गर्नुहोस्।"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"प्रभावहरू"</string>
+    <string name="effect_none" msgid="3102797925086872636">"कुनै पनि होइन"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"निचोर्नुहोस्"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"ठूला आँखाहरु"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"ठूलो मुख"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"सानो मुख"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"ठूलो नाक"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"साना आँखाहरू"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"खाली ठाउँमा"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"सूर्यास्त"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"तपाईँको भिडियो"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"रेकर्डिङको बेला तस्बिर लिनको लागि टच गर्नुहोस्।"</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"भिडियो खिच्ने क्रम सुरु भएको छ।"</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"भिडियो खिच्न बन्द गरियो।"</string>
+    <string name="clear_effects" msgid="6192797848995967992">"स्पष्ट प्रभावहरू"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"SILLY FACES"</string>
+    <string name="effect_background" msgid="1358432220077975015">"BACKGROUND"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"सटर"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"रद्द गर्नुहोस्"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"मेनु बटन"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for accessibility_check_box (1084094675439953723) -->
+    <skip />
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"फोटामा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"भिडियोमा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"परिदृश्यमा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"फोटो स्फेयरमा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"उच्च गुणस्तरमा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Refocus मा स्विच गर्नुहोस्"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"समीक्षा रद्द गर्नुहोस्"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"समीक्षा गरियो"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"समीक्षा पुनः लिनुहोस्"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"विकल्पहरू"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"ढाँचा सूची बन्द भयो"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"ढाँचा सूची खुला भयो"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"फोटो लिइयो"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"फोटो लिइयो"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"भिडियो लिइयो"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"क्यामेरा खोल्नुहोस्"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s मा लिएको मिडिया"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s मा लिएको फोटो"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s मा लिएको भिडियो"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s मा लिएको परिदृश्य"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s मा लिएको फोटो क्षेत्र"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s मा लिएको लेन्स ब्लर"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"मिडिया प्रशोधन गर्दै"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"टगल ढाँचा सूची"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"ढाँचाः सूची"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"टगल फिल्मस्ट्रिप"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"फिल्मस्ट्रिप"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ON"</string>
+    <string name="capital_off" msgid="3020696135020167263">"OFF"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"भिडियो चलाउनुहोस्"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"बन्द"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"०.५ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"१ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"१.५ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"२ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"२.५ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"३ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"४ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"५ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"६ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"१० सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"१२ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"१५ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"२४ सेकेन्ड"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"०.५ मिनट"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"१ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"१.५ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"२ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"२.५ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"३ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"४ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"५ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"६ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"१० मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"१२ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"१५ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"२४ मिनेट"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"०.५ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"१ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"१.५ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"२ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"२.५ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"३ घण्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"४ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"५ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"६ घण्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"१० घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"१२ घण्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"१५ घन्टा"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"२४ घन्टा"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"सेकेण्ड"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"मिनेट"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"घण्टा"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"भयो"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"समय मध्यान्तर सेट गर्नुहोस्"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"समय ल्याप्स सुविधा बन्द छ। समय मध्यान्तर मिलाउन यसलाई खोल्नुहोस्।"</string>
+    <string name="set_duration" msgid="1638453882581604341">"सेकेन्डमा अवधि निर्धारित गर्नुहोस्"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"एउटा तस्बिर लिनका लागि काउन्ट गरिँदै"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"फोटा स्थानहरू याद गर्नुभयो?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"जहाँ लिइएको स्थानका साथ आफ्ना फोटा र भिडियोहरू ट्याग गर्नुहोस्। \n \n तपाईँले सुरक्षित गरेका तस्बिरहरूका साथै अरू अनुप्रयोगहरूले यी जानकारीहरू उपयोग गर्न सक्छन्।"</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"धन्यबाद, पर्दैन"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"हो"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"MORE OPTIONS"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"SETTINGS"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"सानो ग्रह सिर्जना गर्नुहोस्"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"सानो ग्रह सुरक्षित गर्दै ..."</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"जुम"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"घुमाउनुहोस्"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"तस्बिर सम्पादक"</string>
+    <string name="crop_save" msgid="2841974981340098579">"सुरक्षित गर्नुहोस्"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"तस्बिर लोड गर्न सकिएन!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"फिल्मस्ट्रिप दृश्य"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"वालपेपर सेट गर्दै"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"सेटिङहरू"</string>
+    <string name="mode_camera" msgid="279763925715250603">"क्यामेरा"</string>
+    <string name="mode_video" msgid="8633929034048169139">"भिडियो"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"फोटो क्षेत्र"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"समय ल्याप्स"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"चौडा कोणिय"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"पानोरामा"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"लेन्स ब्लर"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"क्यामेरा मोडमा स्विच गर्नुहोस्"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"भिडियो क्यामेरा स्विच गर्नुहोस्"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"फोटो क्षेत्र मोडमा स्विच गर्नुहोस्"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"परिदृश्य मोडमा स्विच गर्नुहोस्"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"लेन्स ब्लर मोडमा स्विच गर्नुहोस्"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"सेटिंग्सहरू खोल्नुहोस्"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"सेटिंग्सहरू बन्द गर्नुहोस्"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus बन्द"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus खुला"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR बन्द"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR खुला"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"फ्ल्यास बन्द"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"स्वचालित फ्ल्यास"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"फ्ल्यास खुला"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ फ्ल्यास बन्द"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ स्वचालित फ्ल्यास"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ फ्ल्यास खुल्ला"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"टर्च खुला"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"टर्च बन्द"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"पछाडिको क्यामेरा"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"अगाडिको क्यामेरा"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"बन्द ग्रिड लाइन"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ग्रिड लाइनमा"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"उल्टो गन्ने घडी बन्द छ"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"उल्टा गिनतीको घडी अवधि ३ सेकेन्ड सेट गरियो"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"उल्टो गिन्ती गर्ने घडीको अवधि १० सेकेन्ड सेट गरियो"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"थप विकल्पहरू"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"रद्द गर्नुहोस्"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"सम्पन्न भयो"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"पुनः लिनुहोस्"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"साझेदारी गर्नुहोस्"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"हेर्नुहोस्"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"सम्पादन गर्नुहोस्"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"मेट्नुहोस्"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"हाते एक्सपोजर क्षतिपुर्ती"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"एक्सपोजर क्षतिपुर्ती -२"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"एक्सपोजर क्षतिपुर्ती -१"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"एक्सपोजर क्षतिपुर्ती ०"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"एक्सपोजर क्षतिपुर्ती +१"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"एक्सपोजर क्षतिपुर्ती +२"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"बटन अब %s छ"</string>
+    <string name="setting_location" msgid="4459859689227893838">"स्थान"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"पछाडि क्यामेरा फोटो"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"पछाडि क्यामेरा भिडियो"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"अगाडि क्यामेरा फोटो"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"अगाडि क्यामेरा भिडियो"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"पूर्वनिर्धारित क्यामेरा"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"मद्दत र प्रतिक्रिया"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ प्रकृया गरिँदै…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"खुला स्रोत इजाजतपत्रहरू"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"सामान्य सेटिङहरू"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"रिजोल्युसन र गुणस्तर"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"बारेमा"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"संस्करण बनाउनुहोस्"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"निम्न"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"उच्च"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for setting_summary_x_megapixels (6533463462760866830) -->
+    <skip />
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s मेगापिक्सेल"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"पुनः केन्द्रित गर्न, यहाँ छुनुहोस्"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"उन्नत"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"मान्युअल खु्लापन"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"सेटिङहरूमा, रिजोल्युसन र गुणस्तर परिवर्तन गर्नुहोस्, वा उन्नत विशेषताहरुको प्रयास गर्नुहोस्।"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"फोटो आकार छान्नुहोस्"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"तपाईँले सेटिङहरूमा पछि परिवर्तन गर्न सक्नुहुन्छ।"</string>
+    <string name="share_to" msgid="5144911209144798122">"साझेदारी गर्नुहोस्"</string>
+    <string name="edit_with" msgid="615569327230783971">"संग सम्पादन गर्नुहोस्"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"NEXT"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ठीक छ, बुझे"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"पूर्ण सेन्सरर \n(४:३)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"क्रप गरिएको सेन्सर \n(१६:९)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"०"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"१"</string>
+</resources>
index 4c7475e..edbe5ec 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Raak hier aan voor opnieuw scherpstellen"</string>
     <string name="edit_with" msgid="615569327230783971">"Bewerken met"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"VOLGENDE"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"OK"</string>
-    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Volledige sensor \n(4:3)"</string>
-    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Bijgesneden sensor \n(16:9)"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Volledig \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Bijgesneden \n(16:9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
     <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
new file mode 100644 (file)
index 0000000..9f970ab
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"ਕੈਮਰਾ"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"ਕੈਮਕੋਰਡਰ"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"ਇਸਦੇ ਤੌਰ ਤੇ ਤਸਵੀਰ ਸੈਟ ਕਰੋ"</string>
+    <string name="delete" msgid="2714492172818940424">"ਮਿਟਾਓ"</string>
+    <string name="share" msgid="8581089487762243115">"ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"ਪਨੋਰਮਾ ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ਫੋਟੋ ਦੇ ਤੌਰ ਤੇ ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="deleted" msgid="2036165115527228127">"ਮਿਟਾਇਆ ਗਿਆ"</string>
+    <string name="undo" msgid="5110048345890050107">"ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"</string>
+    <string name="details" msgid="4404020741542549488">"ਵੇਰਵੇ"</string>
+    <string name="close" msgid="4826166926297479820">"ਬੰਦ ਕਰੋ"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"ਨਕਸ਼ੇ ਤੇ ਦਿਖਾਓ"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ਖੱਬੇ ਪਾਸੇ ਰੋਟੇਟ ਕਰੋ"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"ਸੱਜੇ ਪਾਸੇ ਰੋਟੇਟ ਕਰੋ"</string>
+    <string name="edit" msgid="2776879395749004347">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+    <string name="crop_action" msgid="6933589718464132714">"ਕੱਟੋ"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ਕੱਟੋ"</string>
+    <string name="set_as" msgid="5469055085024870081">"ਇਸਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"</string>
+    <string name="video_err" msgid="1562566029875081552">"ਵੀਡੀਓ ਪਲੇ ਨਹੀਂ ਕਰ ਸਕਦਾ।"</string>
+    <string name="title" msgid="8061744305671964703">"ਸਿਰਲੇਖ"</string>
+    <string name="description" msgid="8193138501982849808">"ਵੇਰਵਾ"</string>
+    <string name="time" msgid="5248213506417024287">"ਸਮਾਂ"</string>
+    <string name="location" msgid="564326205780827668">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+    <string name="path" msgid="5927003361865586353">"ਪਾਥ"</string>
+    <string name="width" msgid="7045750687833828758">"ਚੁੜਾਈ"</string>
+    <string name="height" msgid="5186001199353423689">"ਉਚਾਈ"</string>
+    <string name="orientation" msgid="3883761294106680270">"ਅਨੁਕੂਲਨ"</string>
+    <string name="duration" msgid="5316211067383665008">"ਮਿਆਦ"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME ਪ੍ਰਕਾਰ"</string>
+    <string name="file_size" msgid="6841070748357980676">"ਫਾਈਲ ਆਕਾਰ"</string>
+    <string name="maker" msgid="698691509121545856">"ਮੇਕਰ"</string>
+    <string name="model" msgid="8547493604023069452">"ਮਾਡਲ"</string>
+    <string name="flash" msgid="995041910749174196">"ਫਲੈਸ਼"</string>
+    <string name="aperture" msgid="2453802098282814022">"ਕੈਮਰੇ ਦੀ ਮੋਰੀ"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ਫੋਕਲ ਲੰਮਾਈ"</string>
+    <string name="white_balance" msgid="1600142743496129085">"ਸਫੈਦ ਸੰਤੁਲਨ"</string>
+    <string name="exposure_time" msgid="949787291620767754">"ਐਕਸਪੋਜ਼ਰ ਸਮਾਂ"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"ਮੈਨੁਅਲ"</string>
+    <string name="auto" msgid="2552649885114400474">"ਆਟੋ"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ਫਲੈਸ਼ ਫਾਇਰਡ"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ਕੋਈ ਫਲੈਸ਼ ਨਹੀਂ"</string>
+    <string name="unknown" msgid="564184550182858146">"ਅਗਿਆਤ"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"ਇਹ ਆਈਟਮ ਸਥਾਨਕ ਤੌਰ ਤੇ ਸਟੋਰ ਕੀਤੀ ਗਈ ਹੈ ਅਤੇ ਔਫਲਾਈਨ ਉਪਲਬਧ ਹੈ।"</string>
+    <string name="please_wait" msgid="1416313324505140068">"ਕਿਰਪਾ ਕਰਕੇ ਠਹਿਰੋ"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"ਕੈਮਰਾ ਅਸ਼ੁੱਧੀ"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"ਕੈਮਰੇ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਦਾ।"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"ਕੈਮਰਾ ਸੁਰੱਖਿਆ ਨੀਤੀਆਂ ਦੇ ਕਾਰਨ ਅਸਮਰੱਥ ਬਣਾਇਆ ਗਿਆ ਹੈ।"</string>
+    <string name="wait" msgid="765601745709933047">"ਕਿਰਪਾ ਕਰਕੇ ਠਹਿਰੋ..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"ਕੈਮਰਾ ਵਰਤਣ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ SD ਕਾਰਡ ਪਾਓ।"</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD ਕਾਰਡ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD ਕਾਰਡ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਿਆ।"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"ਟਾਈਮ ਲੈਪਸ ਰਿਕਾਰਡਿੰਗ"</string>
+    <string name="capturing" msgid="5255164204641920893">"ਕੈਪਚਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"ਕੈਮਰਾ ਚੁਣੋ"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"ਪਿੱਛੇ"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"ਫ੍ਰੰਟ"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"ਕਾਊਂਟਡਾਊਨ ਟਾਈਮਰ"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"ਕਾਊਂਟਡਾਊਨ ਦੌਰਾਨ ਬੀਪ"</string>
+    <string name="setting_off" msgid="6782191065550276632">"ਬੰਦ"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ਚਾਲੂ"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"ਵੀਡੀਓ ਕੁਆਲਿਟੀ"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"ਟਾਈਮ ਲੈਪਸ"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"ਕੈਮਰਾ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ਕੈਮਕੋਰਡਰ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"ਤਸਵੀਰ ਦਾ ਆਕਾਰ"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"ਵੱਡੇ"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"ਮੱਧਮ"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"ਛੋਟੇ"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"ਫੋਕਸ ਮੋਡ"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"ਆਟੋ"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"ਅਨੰਤਤਾ"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"ਮੈਕਰੋ"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"ਆਟੋ"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"ਅਨੰਤਤਾ"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"ਮੈਕਰੋ"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ਫਲੈਸ਼ ਮੋਡ"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ਫਲੈਸ਼ ਮੋਡ"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"ਆਟੋ"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ਚਾਲੂ"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"ਬੰਦ"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"ਫਲੈਸ਼ ਆਟੋ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ਫਲੈਸ਼ ਚਾਲੂ"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ਫਲੈਸ਼ ਬੰਦ"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"ਸਫੈਦ ਸੰਤੁਲਨ"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"ਸਫੈਦ ਸੰਤੁਲਨ"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"ਆਟੋ"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"ਚਮਕਦਾ"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"ਧੁੱਪ"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ਫਲੋਰਸੈਂਟ"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"ਧੁੰਦਲਾ"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"ਆਟੋ"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ਚਮਕਦਾ"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"ਧੁੱਪ"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ਫਲੋਰਸੈਂਟ"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"ਧੁੰਦਲਾ"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"ਦ੍ਰਿਸ਼ ਮੋਡ"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ਚਾਲੂ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ਬੰਦ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ਚਾਲੂ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR OFF"</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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"ਪਾਰਟੀ"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ਕੋਈ ਨਹੀਂ"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ਕਿਰਿਆ"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"ਰਾਤ"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"ਸ਼ਾਮ"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"ਪਾਰਟੀ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ਟਾਈਮਰ ਬੰਦ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 ਸਕਿੰਟ"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 ਸਕਿੰਟ"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 ਸਕਿੰਟ"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 ਸਕਿੰਟ"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"ਸੀਨ ਮੋਡ ਵਿੱਚ ਚੁਣਨਯੋਗ ਨਹੀਂ।"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"ਐਕਸਪੋਜ਼ਰ"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ਐਕਸਪੋਜ਼ਰ"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"ਫ੍ਰੰਟ ਕੈਮਰਾ"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"ਬੈਕ ਕੈਮਰਾ"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ਠੀਕ"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"ਰੱਦ ਕਰੋ"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"ਤੁਹਾਡਾ SD ਖਾਲੀ ਚੱਲ ਰਿਹਾ ਹੈ। ਕੁਆਲਿਟੀ ਸੈਟਿੰਗ ਬਦਲੋ ਜਾਂ ਕੁਝ ਚਿੱਤਰ ਜਾਂ ਹੋਰ ਫਾਈਲਾਂ ਮਿਟਾਓ।"</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"ਆਕਾਰ ਸੀਮਾ ਪੂਰੀ ਹੋਈ।"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"ਬਹੁਤ ਤੇਜ਼"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"ਪਨੋਰਮਾ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"ਪਨੋਰਮਾ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"ਪਨੋਰਮਾ"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"ਪਨੋਰਮਾ ਕੈਪਚਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"ਪਿਛਲਾ ਪਨੋਰਮਾ ਉਡੀਕ ਰਿਹਾ ਹੈ"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"ਪਨੋਰਮਾ ਰੈਂਡਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"ਫੋਕਸ ਕਰਨ ਲਈ ਛੋਹਵੋ।"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"ਇਫੈਕਟਸ"</string>
+    <string name="effect_none" msgid="3102797925086872636">"ਕੋਈ ਨਹੀਂ"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"ਸਕਵੀਜ਼"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"ਵੱਡੀਆਂ ਅੱਖਾਂ"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"ਵੱਡਾ ਮੂੰਹ"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"ਛੋਟਾ ਮੂੰਹ"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"ਵੱਡਾ ਨੱਕ"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"ਛੋਟੀਆਂ ਅੱਖਾਂ"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"ਸਪੇਸ ਵਿੱਚ"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"ਸ਼ਾਮ"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"ਤੁਹਾਡਾ ਵੀਡੀਓ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"ਰਿਕਾਰਡਿੰਗ ਵੇਲੇ ਫੋਟੋ ਲੈਣ ਲਈ ਛੋਹਵੋ।"</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"ਵੀਡੀਓ ਰਿਕਾਰਡਿੰਗ ਚਾਲੂ ਹੋਇਆ ਹੈ।"</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"ਵੀਡੀਓ ਰਿਕਾਰਡਿੰਗ ਰੁਕ ਗਈ ਹੈ।"</string>
+    <string name="clear_effects" msgid="6192797848995967992">"ਇਫੈਕਟਸ ਹਟਾਓ"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"ਸਿਲੀ ਚਿਹਰੇ"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ਪਿਛੋਕੜ"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"ਸ਼ਟਰ"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"ਰੱਦ ਕਰੋ"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"ਮੀਨੂ ਬਟਨ"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s ਚੈਕ ਬੌਕਸ"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ਫੋਟੋ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"ਵੀਡੀਓ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"ਪਨੋਰਮਾ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"ਫੋਟੋ ਸਫੇਅਰ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"ਉੱਚ ਕੁਆਲਿਟੀ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"ਰੀਫੋਕਸ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"ਸਮੀਖਿਆ ਰੱਦ ਕਰੋ"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"ਸਮੀਖਿਆ ਕੀਤੀ ਗਈ"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"ਸਮੀਖਿਆ ਰੀਟੇਕ"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"ਚੋਣਾਂ"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"ਮੋਡ ਸੂਚੀ ਬੰਦ ਕੀਤੀ"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"ਮੋਡ ਸੂਚੀ ਖੋਲ੍ਹੋ"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"ਕੈਪਚਰ ਲਿਆ ਗਿਆ"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ਫੋਟੋ ਲਈ ਗਈ"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"ਵੀਡੀਓ ਲਿਆ"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"ਕੈਮਰੇ ਲਈ ਅਨਲੌਕ ਕਰੋ"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"ਮੀਡੀਆ %s ਨੂੰ ਲਿਆ ਗਿਆ"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"ਫੋਟੋ %s ਨੂੰ ਲਈ ਗਈ"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"ਵੀਡੀਓ %s ਨੂੰ ਲਿਆ ਗਿਆ"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"ਪਨੋਰਮਾ %s ਨੂੰ ਲਿਆ ਗਿਆ"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"ਫੋਟੋ ਸਫੇਅਰ %s ਨੂੰ ਲਿਆ ਗਿਆ"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"ਲੈਂਸ ਬਲਰ %s ਨੂੰ ਲਿਆ ਗਿਆ"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"ਮੀਡੀਆ ਪ੍ਰੋਸੈਸਿੰਗ"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"ਮੋਡ ਸੂਚੀ ਟੌਗਲ ਕਰੋ"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"ਮੋਡ ਸੂਚੀ"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ਫਿਲਮਸਟ੍ਰਿਪ ਟੌਗਲ ਕਰੋ"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ਫਿਲਮਸਟ੍ਰਿਪ"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ਚਾਲੂ"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ਬੰਦ"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"ਵੀਡੀਓ ਪਲੇ ਕਰੋ"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ਬੰਦ"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 ਸਕਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 ਮਿੰਟ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 ਘੰਟਾ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 ਘੰਟਾ"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 ਘੰਟੇ"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 ਘੰਟੇ"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"ਸਕਿੰਟ"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"ਮਿੰਟ"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"ਘੰਟੇ"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"ਹੋ ਗਿਆ"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"ਸਮਾਂ ਅੰਤਰਾਲ ਸੈਟ ਕਰੋ"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"ਟਾਈਮ ਲੈਸਪ ਵਿਸ਼ੇਸ਼ਤਾ ਬੰਦ ਹੈ। ਇਸਨੂੰ ਸਮਾਂ ਅੰਤਰਾਲ ਸੈਟ ਕਰਨ ਲਈ ਚਾਲੂ ਕਰੋ।"</string>
+    <string name="set_duration" msgid="1638453882581604341">"ਮਿਆਦ ਨੂੰ ਸਕਿੰਟਾਂ ਵਿੱਚ ਸੈਟ ਕਰੋ"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ਇੱਕ ਫੋਟੋ ਲੈਣ ਲਈ ਕਾਊਂਟ ਡਾਊਨ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ਕੀ ਫੋਟੋ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਯਾਦ ਹਨ?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"ਆਪਣੀਆਂ ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ ਉਹਨਾਂ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਨਾਲ ਟੈਗ ਕਰੋ ਜਿੱਥੇ ਉਹ ਲਏ ਗਏ ਹਨ।\n\nਹੋਰ ਐਪਸ ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਚਿੱਤਰਾਂ ਨਾਲ ਇਸ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਸਕਦੇ ਹਨ।"</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ਹਾਂ"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"ਹੋਰ ਚੋਣਾਂ"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"ਛੋਟਾ ਗ੍ਰਹਿ ਬਣਾਓ"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"ਛੋਟਾ ਗ੍ਰਹਿ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"ਜ਼ੂਮ"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"ਰੋਟੇਟ ਕਰੋ"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ਫੋਟੋ ਸੰਪਾਦਕ"</string>
+    <string name="crop_save" msgid="2841974981340098579">"ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"ਚਿੱਤਰ ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਦਾ!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ਫਿਲਮਸਟ੍ਰਿਪ ਦ੍ਰਿਸ਼"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"ਵਾਲਪੇਪਰ ਸੈਟ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="mode_camera" msgid="279763925715250603">"ਕੈਮਰਾ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"ਵੀਡੀਓ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"ਫੋਟੋ ਸਫੇਅਰ"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"ਟਾਈਮ ਲੈਪਸ"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"ਵਾਈਡ ਐਂਗਲ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"ਪਨੋਰਮਾ"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ਲੈਂਸ ਬਲਰ"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"ਕੈਮਰਾ ਮੋਡ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"ਵੀਡੀਓ ਕੈਮਰੇ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"ਫੋਟੋ ਸਫੇਅਰ ਮੋਡ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"ਪਨੋਰਮਾ ਮੋਡ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ਲੈਂਸ ਬਲਰ ਮੋਡ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"ਸੈਟਿੰਗਾਂ ਬੰਦ ਕਰੋ"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR Plus ਬੰਦ"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus ਚਾਲੂ"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR ਬੰਦ"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ਚਾਲੂ"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ਫਲੈਸ਼ ਬੰਦ"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"ਫਲੈਸ਼ ਆਟੋ"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ਫਲੈਸ਼ ਚਾਲੂ"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ਫਲੈਸ਼ ਬੰਦ"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ ਫਲੈਸ਼ ਆਟੋ"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ਫਲੈਸ਼ ਚਾਲੂ"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ਟੌਰਚ ਚਾਲੂ"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ਟੌਰਚ ਬੰਦ"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"ਬੈਕ ਕੈਮਰਾ"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"ਫ੍ਰੰਟ ਕੈਮਰਾ"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ਗ੍ਰਿਡ ਲਾਈਨਾਂ ਬੰਦ"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ਗ੍ਰਿਡ ਲਾਈਨਾਂ ਚਾਲੂ"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"ਕਾਊਂਟਡਾਊਨ ਟਾਈਮਰ ਬੰਦ ਹੈ"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"ਕਾਊਂਟਡਾਊਨ ਟਾਈਮਰ ਮਿਆਦ 3 ਸਕਿੰਟਾਂ ਲਈ ਸੈਟ ਹੈ।"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"ਕਾਊਂਟਡਾਊਨ ਟਾਈਮਰ ਮਿਆਦ 10 ਸਕਿੰਟਾਂ ਲਈ ਸੈਟ ਹੈ।"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"ਹੋਰ ਚੋਣਾਂ"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"ਰੱਦ ਕਰੋ"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"ਹੋ ਗਿਆ"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"ਰੀਟੇਕ"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"ਦੇਖੋ"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"ਮਿਟਾਓ"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"ਮੈਨੁਅਲ ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"ਐਕਸਪੋਜ਼ਰ ਕੰਪਨਸੈਸ਼ਨ +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"ਬਟਨ ਹੁਣ %s ਹੈ"</string>
+    <string name="setting_location" msgid="4459859689227893838">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"ਬੈਕ ਕੈਮਰਾ ਫੋਟੋ"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"ਬੈਕ ਕੈਮਰਾ ਵੀਡੀਓ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"ਫ੍ਰੰਟ ਕੈਮਰਾ ਫੋਟੋ"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"ਫ੍ਰੰਟ ਕੈਮਰਾ ਵੀਡੀਓ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"ਡਿਫੌਲਟ ਕੈਮਰਾ"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"ਸਹਾਇਤਾ &amp; ਫੀਡਬੈਕ"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰ ਰਿਹਾ ਹੈ …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ਓਪਨ ਸ੍ਰੋਤ ਲਸੰਸ"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"ਸਧਾਰਨ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"ਰਿਜ਼ੋਲੂਸ਼ਨ &amp; ਕੁਆਲਿਟੀ"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"ਇਸਦੇ ਬਾਰੇ"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"ਵਰਜਨ ਬਣਾਓ"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"ਘੱਟ"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"ਉੱਚ"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"ਰੀਫੋਕਸ ਕਰਨ ਲਈ, ਇੱਥੇ ਛੋਹਵੋ"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"ਉੱਨਤ"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"ਮੈਨੁਅਲ ਐਕਸਪੋਜ਼ਰ"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"ਸੈਟਿੰਗਾਂ ਵਿੱਚ, ਰਿਜ਼ੋਲੂਸ਼ਨ ਅਤੇ ਕੁਆਲਿਟੀ ਬਦਲੋ ਜਾਂ ਐਡਵਾਂਸਡ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ਫੋਟੋ ਆਕਾਰ ਚੁਣੋ"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"ਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
+    <string name="share_to" msgid="5144911209144798122">"ਇਸ ਨਾਲ ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="edit_with" msgid="615569327230783971">"ਨਾਲ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"ਅਗਲਾ"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ਠੀਕ ਹੈ, ਇਹ ਮਿਲ ਗਿਆ"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"ਪੂਰਾ ਸੰਵੇਦਕ \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"ਕੱਟਿਆ ਗਿਆ ਸੰਵੇਦਕ \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 885167e..2d0e13c 100644 (file)
@@ -76,7 +76,7 @@
     <string name="pref_camera_id_title" msgid="4680648115225411185">"Wybierz aparat"</string>
     <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Tylny"</string>
     <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Przedni"</string>
-    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Zapisz lokalizacje"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Zapisuj lokalizacje"</string>
     <string name="pref_camera_location_label" msgid="8695441802378057719">"LOKALIZACJA"</string>
     <string name="pref_camera_timer_title" msgid="4728838281741571323">"Samowyzwalacz"</string>
     <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
     <string name="set_time_interval_help" msgid="64145154088021389">"Funkcja filmu poklatkowego jest wyłączona. Włącz ją, by ustawić odstęp czasu."</string>
     <string name="set_duration" msgid="1638453882581604341">"Ustaw czas w sekundach"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"Odliczam czas do zrobienia zdjęcia"</string>
-    <string name="remember_location_title" msgid="3045040613094030429">"Zapamiętywać lokalizacje zdjęć?"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Zapisywać lokalizacje zdjęć?"</string>
     <string name="remember_location_prompt" msgid="5104210757873140169">"Dodawaj do moich zdjęć i filmów tagi lokalizacji, w których zostały one zrobione lub nagrane.\n\nInne aplikacje mają dostęp do tych informacji oraz zapisanych zdjęć i filmów."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"Nie, dziękuję"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"Tak"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s MP"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Mpx"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Aby zmienić ostrość, dotknij tutaj"</string>
index 64a642c..28e0e72 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapíxeis"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapíxeis"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Para voltar a focar, toque aqui"</string>
     <string name="pref_category_advanced" msgid="5921085080077574872">"Avançadas"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Exposição manual"</string>
     <string name="settings_cling_text" msgid="5368054627268181292">"Em Definições, altere a resolução e a qualidade ou experimente as funcionalidades avançadas."</string>
-    <string name="photo_size_selection_title" msgid="2789753590719172645">"Escolher tamanho da fotografia"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Escolha o tamanho da fotografia"</string>
     <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Pode alterar esta opção mais tarde em Definições."</string>
     <string name="share_to" msgid="5144911209144798122">"Partilhar com"</string>
     <string name="edit_with" msgid="615569327230783971">"Editar com"</string>
index 03729f4..79b31e8 100644 (file)
     <string name="set_duration" msgid="1638453882581604341">"Definir duração em segundos"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"Contagem regressiva para tirar foto"</string>
     <string name="remember_location_title" msgid="3045040613094030429">"Memorizar locais de fotos?"</string>
-    <string name="remember_location_prompt" msgid="5104210757873140169">"Marque seus vídeos e fotos com os locais onde foram gerados.\n\nOutros aplicativos podem acessar essas informações juntamente com suas imagens salvas."</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Marque seus vídeos e fotos com os locais onde foram gerados.\n\nOutros apps podem acessar essas informações juntamente com suas imagens salvas."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"Não, obrigado"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"Sim"</string>
     <string name="camera_menu_more_label" msgid="7951917844735828365">"MAIS OPÇÕES"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s MP"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Toque aqui para mudar o foco"</string>
     <string name="edit_with" msgid="615569327230783971">"Editar com"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"PRÓXIMO"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"OK, ENTENDI"</string>
-    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Sensor full-frame \n(4:3)"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Sensor completo \n(4:3)"</string>
     <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Sensor com corte \n(16:9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
     <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
index 75b3d2b..4d65aed 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixeli"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixeli"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Atingeți aici pentru a refocaliza"</string>
index 566aceb..5cc0769 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"4K (UHD)"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s Мпикс."</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Мпикс."</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Чтобы сменить фокус, нажмите здесь"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
new file mode 100644 (file)
index 0000000..400ec52
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"කැමරාව"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"වීඩියෝ රෙකෝඩරය"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"ලෙස පින්තූරය සකසන්න"</string>
+    <string name="delete" msgid="2714492172818940424">"මකන්න"</string>
+    <string name="share" msgid="8581089487762243115">"බෙදාගන්න"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"පරිදර්ශනය බෙදා ගන්න"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ඡායාරූපය ලෙස බෙදා ගන්න"</string>
+    <string name="deleted" msgid="2036165115527228127">"මකාදමන ලදි"</string>
+    <string name="undo" msgid="5110048345890050107">"අස් කරන්න"</string>
+    <string name="details" msgid="4404020741542549488">"විස්තර"</string>
+    <string name="close" msgid="4826166926297479820">"වසන්න"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"සිතියම මත පෙන්වන්න"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"වමට කරකවන්න"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"දකුණට හරවන්න"</string>
+    <string name="edit" msgid="2776879395749004347">"සංස්කරණය කරන්න"</string>
+    <string name="crop_action" msgid="6933589718464132714">"කප්පාදු කිරීම"</string>
+    <string name="trim_action" msgid="4736803320203951827">"අහුකොන් කපන්න"</string>
+    <string name="set_as" msgid="5469055085024870081">"ලෙස සකසන්න"</string>
+    <string name="video_err" msgid="1562566029875081552">"වීඩියෝව ධාවනය කළ නොහැක."</string>
+    <string name="title" msgid="8061744305671964703">"මාතෘකාව"</string>
+    <string name="description" msgid="8193138501982849808">"විස්තරය"</string>
+    <string name="time" msgid="5248213506417024287">"වේලාව"</string>
+    <string name="location" msgid="564326205780827668">"ස්ථානය"</string>
+    <string name="path" msgid="5927003361865586353">"මග"</string>
+    <string name="width" msgid="7045750687833828758">"පළල"</string>
+    <string name="height" msgid="5186001199353423689">"උස"</string>
+    <string name="orientation" msgid="3883761294106680270">"දිශානතිය"</string>
+    <string name="duration" msgid="5316211067383665008">"කාල සීමාව"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME වර්ගය"</string>
+    <string name="file_size" msgid="6841070748357980676">"ගොනු ප්‍රමාණය"</string>
+    <string name="maker" msgid="698691509121545856">"නිමැවුම්කරු"</string>
+    <string name="model" msgid="8547493604023069452">"අනුකෘතිය"</string>
+    <string name="flash" msgid="995041910749174196">"සැණෙලිය"</string>
+    <string name="aperture" msgid="2453802098282814022">"විවරය"</string>
+    <string name="focal_length" msgid="8351221512187346229">"නාභි දුර"</string>
+    <string name="white_balance" msgid="1600142743496129085">"සුදු සමබරතාව"</string>
+    <string name="exposure_time" msgid="949787291620767754">"නිරාවරණ කාලය"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"මි.මී."</string>
+    <string name="manual" msgid="2444400953521760140">"අතින් කරන"</string>
+    <string name="auto" msgid="2552649885114400474">"ස්වයං"</string>
+    <string name="flash_on" msgid="6573457197393807642">"සැණෙලි පත්තු කරන ලදී"</string>
+    <string name="flash_off" msgid="7889323512830926273">"සැණෙලි නැත"</string>
+    <string name="unknown" msgid="564184550182858146">"නොදනී"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"මෙම අයිතමය ස්ථානිකව ආචිත කර ඇති අතර නොබැඳිව ලබා ගත හැක."</string>
+    <string name="please_wait" msgid="1416313324505140068">"කරුණාකර රැඳී සිටින්න"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"කැමරා දෝෂය"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"කැමරාව වෙත සම්බන්ධ කළ නොහැක."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"ආරක්ෂණ ප්‍රතිපත්ති නිසා කැමරාව අබල කර ඇත."</string>
+    <string name="wait" msgid="765601745709933047">"කරුණාකර රැඳී සිටින්න..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"කැමරාව භාවිතා කිරීමට පෙර SD කාඩ් පතක් ඇතුලු කරන්න."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD කාඩ් පත පිළියෙළ කෙරේ…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD කාඩ් පතට ප්‍රවේශ විය නොහැක."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"කාලය ඉකුත්වීමේ පටිගත කිරීම"</string>
+    <string name="capturing" msgid="5255164204641920893">"ග්‍රහණය කරමින්"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"කැමරාව තෝරන්න"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"ආපසු"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"ඉදිරිපස"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"ස්ථානය සුරකින්න"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"ස්ථානය"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"ආපස්සට ගණන් කිරීමේ කාල ගණකය"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"ආපස්සට ගණන් කිරීමේ බීප් නාදය"</string>
+    <string name="setting_off" msgid="6782191065550276632">"අක්‍රියයි"</string>
+    <string name="setting_on" msgid="9086728135773197891">"සක්‍රිය කරන්න"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"වීඩියෝ ගුණත්වය"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"කාලය ඉකුත්වීම"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"කැමරා සැකසීම්"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"කැම්කෝඩර සැකසීම්"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"පින්තූර ප්‍රමාණය"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"විශාල"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"මධ්‍යම"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"කුඩා"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"නාභිගත ප්‍රකාරය"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"ස්වයං"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"අනන්තය"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"මැක්‍රො"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"ස්වයංක්‍රීය"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"අනන්තය"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"මැක්‍රො"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"සැණෙළි ප්‍රකාරය"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"සැණෙළි ආකාරය"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"ස්වයං"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"සක්‍රිය කරන්න"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"අක්‍රියයි"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"සැණෙලි ස්වයං"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"සැණෙලිය සක්‍රියයි"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"සැණෙළිය අක්‍රියයි"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"සුදු සමබරතාව"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"සුදු සමබරතාවය"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"ස්වයං"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"තාපදීප්ත"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"දිවා ආලෝකය"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ප්‍රතිදීපන"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"වලාකුළු සහිත"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"ස්වයංක්‍රීය"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"තාපදීප්ත"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"දිවා ආලෝකය"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ප්‍රතිදීපන"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"වලාකුළු සහිත"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"සිදුවීම් ආකාරය"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ සක්‍රිය"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ අක්‍රිය"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR සක්‍රිය"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"සාදය"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"කිසිවක් නැත"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"ක්‍රියාව"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"රාත්‍රිය"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"හිරු බැසීම"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"සාදය"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"කාල ගණකය අක්‍රියයි"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"තත්පර 1"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"තත්පර.3"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"තත්පර 10"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"තත්පර 15"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"දර්ශන ආකාරය තුළ තෝරාගත හැකි නොවේ"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"නිරාවරණය"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"නිරාවරණය"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"ඉදිරිපස කැමරාව"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"පිටුපස කැමරාව"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"හරි"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"අවලංගු කරන්න"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"ඔබගේ SD කාඩ් පතේ ඉඩ අවසන් වෙමින් පවතී. ගුණත්ව සැකසීම් වෙනස් කරන්න හෝ සමහර පින්තුරය හෝ වෙනත් ගොනු මකන්න."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"ප්‍රමාණයේ සීමාව ලඟාවී ඇත."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"ඉතා වේගවත්"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"පරිදර්ශනය පිළියෙල වේ"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"පරිදර්ශනය සුරැකිය නොහැක."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"පරිදර්ශනය"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"පරිදර්ශනය ග්‍රහණය කෙරේ"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"පෙර පරිදර්ශනය සඳහා රැඳී සිටී"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"සුරැකේ...."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"පරිදර්ශනය ප්‍රවාචනය"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"නාභිගත කිරීමට ස්පර්ශ කරන්න"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"විලාස"</string>
+    <string name="effect_none" msgid="3102797925086872636">"කිසිවක් නැත"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"මිරිකන්න"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"ලොකු ඇස්"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"ලොකු කට"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"කුඩා කට"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"ලොකු නහය"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"කුඩා ඇස්"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"අවකාශයෙහි"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"ඉර බැසීම"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"ඔබගේ වීඩියෝව"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"පටිගත කිරීම අතරතුර ඡායාරූපයක් ගැනීමට ස්පර්ශ කරන්න."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"වීඩියෝව පටිගත කිරීම ඇරඹී ඇත."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"වීඩියෝව පටිගත කිරීම නැවතී ඇත."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"විලාස හිස් කරන්න"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"මෝඩ මුහුණු"</string>
+    <string name="effect_background" msgid="1358432220077975015">"පසුබිම"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"සංවාරකය"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"අවලංගු කරන්න"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"මෙනු බොත්තම"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"සලකුණු කොටු %1$s"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ඡායාරූපය වෙත මාරු වන්න"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"වීඩියෝව වෙත මාරු වන්න"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"පරිදර්ශනය වෙත මාරු වන්න"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"ෆොටෝ ස්පීයර් වෙත මාරු වෙන්න"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"උසස්  ගුණත්වයක් වෙත මාරු වෙන්න."</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"නැවත නාභිගත කිරීමට මාරුවෙන්න"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"අවලංගු කිරීම සමාලෝචනය කරන්න"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"සමාලෝචනය අවසන්"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"යළිගැනීම සමාලෝචනය කරන්න"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"විකල්ප"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"ආකාර ලැයිස්තුව වසා ඇත"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"ආකාර ලැයිස්තුව විවෘතයි"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"පින්තූරය ලබාගත්තා"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ඡායාරූපය ලබාගත්තා"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"වීඩියෝ ලබාගත්තා"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"කැමරාව වෙත අගුළු අරින්න"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"%s මත ලබාගත් මාධ්‍ය"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"%s මත ලබාගත් ඡායාරූපය"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"%s මත ලබාගත් වීඩියෝව"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"%s මත ලබාගත් පැනරෝමා"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s මත ලබාගත් ඡායාරූප ස්පියරය"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"%s මත ලබාගත් ලෙන්ස් බ්ලර්"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"මාධ්‍ය සකසමින් ඇත"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"ආකාර ලැයිස්තුව ටොගල් කරන්න"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"ආකාර ලැයිස්තුව"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"චිත්‍රපට තීරුව ටොගල් කරන්න"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"චිත්‍රපට තීරුව"</string>
+    <string name="capital_on" msgid="1118214824959797269">"සක්‍රීයයි"</string>
+    <string name="capital_off" msgid="3020696135020167263">"අක්‍රියයි"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"වීඩියෝව ධාවනය කරන්න"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"අක්‍රියයි"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"තත්පර 0.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"තත්පර 1"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"තත්පර 1.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"තත්පර 2"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"තත්පර 2.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"තත්පර 3"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"තත්පර 4"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"තත්පර 5"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"තත්පර 6"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"තත්පර 10"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"තත්පර 12"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"තත්පර 15"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"තත්පර 24"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"මිනිත්තු 0.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"මිනිත්තු 1"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"මිනිත්තු 1.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"මිනිත්තු 2"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"මිනිත්තු 2.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"මිනිත්තු 3"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"මිනිත්තු 4"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"මිනිත්තු 5"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"මිනිත්තු 6"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"මිනිත්තු 10"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"මිනිත්තු 12"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"මිනිත්තු 15"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"මිනිත්තු 24"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"පැය 0.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"පැය 1"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"පැය 1.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"පැය 2"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"පැය 2.5"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"පැය 3"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"පැය 4"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"පැය 5"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"පැය 6"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"පැය 10"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"පැය 12"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"පැය 15"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"පැය 24"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"තත්පර"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"මිනිත්තු"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"පැය"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"අවසන්"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"කාල අන්තරය පිහිටුවන්න"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"කාලය ඉකුත්වීමේ විශේෂාංගය අක්‍රියයි. කාල අන්තරය පිහිටුවීමට එය සක්‍රිය කරන්න."</string>
+    <string name="set_duration" msgid="1638453882581604341">"තත්පර වලින් කාල පරාස සකසන්න"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ඡායාරූපයක් ගැනීමට ආපස්සට ගණන් කෙරේ"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ඡායාරූප ස්ථාන මතක තියාගන්නද?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"ඔබගේ ඡායාරූප සහ වීඩියෝ ඒවා ගත් ස්ථානය සමගින් ටැග් කරන්න.\n\nවෙනත් යෙදුම් වලට ඔබගේ සුරැකි පින්තුර සමගින් මෙම තොරතුරු වෙත ප්‍රවේශ විය හැක."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"එපා ස්තූතියි"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ඔව්"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"තව විකල්ප"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"සැකසීම්"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Tiny Planet සාදන්න"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Tiny Planet සුරක්ෂිත කරමින්…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"විශාලනය කරන්න"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"කරකවන්න"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ඡායාරූප සංස්කාරක"</string>
+    <string name="crop_save" msgid="2841974981340098579">"සුරකින්න"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"පින්තුර පූරණය කිරීමට නොහැක!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Filmstrip දසුන"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"වෝල්පේපරය සැකසේ"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"සැකසීම්"</string>
+    <string name="mode_camera" msgid="279763925715250603">"කැමරාව"</string>
+    <string name="mode_video" msgid="8633929034048169139">"වීඩියෝව"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"ෆොටෝ ස්පීයර්"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"කාලය ඉකුත්වීම"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"පුළුල් කෝණ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"පැනරෝමා"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ලෙන්ස් බ්ලර්"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"කැමරා ආකාරයට මාරු වෙන්න"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"වීඩියෝ කැමරාවට මාරු වන්න"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"ෆොටෝ ස්පීයර් ආකාරයට මාරු වෙන්න"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"පරිදර්ශන ආකාරයට මාරු වෙන්න"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ලෙන්ස් බ්ලර් ආකාරයට මාරුවන්න"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"සැකසීම් විවෘත කරන්න"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"සැකසීම් වසන්න"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR ධන අක්‍රිය"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR ධන සක්‍රිය"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR අක්‍රිය"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR සක්‍රිය"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"සැණෙළිය අක්‍රියයි"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"සැණෙලි ස්වයං"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"සැණෙලිය සක්‍රියයි"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ සැණෙලිය අක්‍රියයි"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ සැණෙලිය ස්වයංක්‍රීය"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ සැණෙලිය සක්‍රියයි"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"පන්දම සක්‍රියයි"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"පන්දම අක්‍රියයි"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"පිටුපස කැමරාව"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"ඉදිරිපස කැමරාව"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"ජාල රේඛා අක්‍රියයි"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"ජාල රේඛා සක්‍රියයි"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"ආපස්සට ගණන් කිරීමේ කාල ගණකය අක්‍රිය කරන්න"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"ආපස්සට ගණන් කිරීමේ කාල ගණකයේ කාල සීමාව තත්පර 3 කට සකසන්න"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"ආපස්සට ගණන් කිරීමේ කාල ගණකයේ කාල සීමාව තත්පර 10 කට සකසන්න"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"තවත් විකල්ප"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"අවලංගු කරන්න"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"අවසන්"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"යළි ගැනීම"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"බෙදාගන්න"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"බලන්න"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"සංස්කරණය කරන්න"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"මකන්න"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"අතින් නිරාවරණ හානි පුර්ණය"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"නිරාවරණ හානි පුර්ණය -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"නිරාවරණ හානි පුර්ණය -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"නිරාවරණ හානි පුර්ණය 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"නිරාවරණ හානි පුර්ණය +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"නිරාවරණ හානි පුර්ණය +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"බොත්තම දැන් %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"ස්ථානය"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"පිටුපස කැමරාවේ පින්තූරය"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"පිටුපස කැමරාවේ වීඩියෝව"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"ඉදිරිපස කැමරාවේ පින්තූරය"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"ඉදිරිපස කැමරාවේ වීඩියෝව"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"සුපුරුදු කැමරාව"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"උදවු සහ ප්‍රතිපෝෂණ"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ සකසමින්…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"විවෘත මූල බලපත්‍ර"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"පොදු සැකසීම්"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"විභේදනය සහ තත්ත්වය"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"පිළිබඳ"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"තැනුම් අනුවාදය"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"අඩු"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"වැඩි"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"මෙගාපික්සල %1$s"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"නැවත නාභිගත කිරීම, මෙහි ස්පර්ශ කරන්න"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"උසස්"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"අතින් නිරාවරණය"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"සැකසීම් තුළ, විභේදනය සහ තත්ත්වය වෙනස් කරන්න, හෝ උසස් විශේෂාංග උත්සාහ කරන්න."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ඡායාරූපය ප්‍රමාණය තෝරන්න"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"ඔබට මෙය සැකසීම් තුළ වෙනස්කර ගැනීම පසුව කළ හැක."</string>
+    <string name="share_to" msgid="5144911209144798122">"වෙත බෙදාගන්න"</string>
+    <string name="edit_with" msgid="615569327230783971">"සමඟ සංස්කරණය කරන්න"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"මීළඟ"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"හරි, තේරුණා"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"සම්පුර්ණ සංවේදකය \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"කප්පාදු කළ සංවේදකය \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 7b970eb..dad17ab 100644 (file)
     <string name="setting_default_camera" msgid="6954076799301004779">"Predvolený fotoaparát"</string>
     <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Pomocník a spätná väzba"</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"Spracovanie HDR+…"</string>
-    <string name="open_source_licenses" msgid="2169711954264883060">"Otvorený zdroj – licencie"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Licencie open source"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"Všeobecné nastavenia"</string>
     <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Rozlíšenie a kvalita"</string>
     <string name="pref_category_about" msgid="1966255405679342337">"O aplikácii"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1 080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s MPx"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Mpx"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Klepnutím tu môžete obrázky znova zaostriť"</string>
     <string name="pref_category_advanced" msgid="5921085080077574872">"Rozšírené"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Ručná expozícia"</string>
-    <string name="settings_cling_text" msgid="5368054627268181292">"V sekcii Nastavenia zmeňte rozlíšenie a kvalitu alebo skúste použiť pokročilé funkcie."</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"V nastaveniach môžete zmeniť rozlíšenie a kvalitu alebo vyskúšať pokročilé funkcie."</string>
     <string name="photo_size_selection_title" msgid="2789753590719172645">"Výber veľkosti fotky"</string>
-    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Pomer strán môžete neskôr zmeniť v Nastaveniach."</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Svoju voľbu môžete neskôr zmeniť v nastaveniach."</string>
     <string name="share_to" msgid="5144911209144798122">"Zdieľať na stránkach"</string>
     <string name="edit_with" msgid="615569327230783971">"Upraviť pomocou"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"ĎALEJ"</string>
-    <string name="confirm_button_text" msgid="7389949384482206814">"OK, ROZUMIEM"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"OK, DOBRE"</string>
     <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Úplný obraz \n(4:3)"</string>
     <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Orezaný obraz \n(16:9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
index a33812e..0838989 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s slikovnih pik"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s mio. slikovnih pik"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Če želite uporabiti vnovično ostrenje, se dotaknite tukaj"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
new file mode 100644 (file)
index 0000000..95ba5d0
--- /dev/null
@@ -0,0 +1,370 @@
+<?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="1175086483881127797">"Kamera"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Videokamera"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Vendos fotografinë si"</string>
+    <string name="delete" msgid="2714492172818940424">"Fshi"</string>
+    <string name="share" msgid="8581089487762243115">"Shpërnda"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Shpërnda panoramën"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Shpërndaje si fotografi"</string>
+    <string name="deleted" msgid="2036165115527228127">"U fshi"</string>
+    <string name="undo" msgid="5110048345890050107">"ZHBËJ"</string>
+    <string name="details" msgid="4404020741542549488">"Detajet"</string>
+    <string name="close" msgid="4826166926297479820">"Mbyll"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Shfaq në hartë"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Rrotullo majtas"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"Rrotullo djathtas"</string>
+    <string name="edit" msgid="2776879395749004347">"Redakto"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Prit anët"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Rregullo"</string>
+    <string name="set_as" msgid="5469055085024870081">"Vendos si"</string>
+    <string name="video_err" msgid="1562566029875081552">"Videoja nuk mund të luhet."</string>
+    <string name="title" msgid="8061744305671964703">"Titulli"</string>
+    <string name="description" msgid="8193138501982849808">"Përshkrimi"</string>
+    <string name="time" msgid="5248213506417024287">"Ora"</string>
+    <string name="location" msgid="564326205780827668">"Vendndodhja"</string>
+    <string name="path" msgid="5927003361865586353">"Shtegu"</string>
+    <string name="width" msgid="7045750687833828758">"Gjerësia"</string>
+    <string name="height" msgid="5186001199353423689">"Lartësia"</string>
+    <string name="orientation" msgid="3883761294106680270">"Orientimi"</string>
+    <string name="duration" msgid="5316211067383665008">"Kohëzgjatja"</string>
+    <string name="mimetype" msgid="6415940055077963944">"Tipi MIME"</string>
+    <string name="file_size" msgid="6841070748357980676">"Skedari"</string>
+    <string name="maker" msgid="698691509121545856">"Krijuesi"</string>
+    <string name="model" msgid="8547493604023069452">"Modeli"</string>
+    <string name="flash" msgid="995041910749174196">"Blici"</string>
+    <string name="aperture" msgid="2453802098282814022">"Hapja e diafragmës"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Largësia e fokusimit"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Balancimi i bardhësisë"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Koha e ekspozimit"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Manuale"</string>
+    <string name="auto" msgid="2552649885114400474">"Automatike"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Blic i ndezur"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Pa blic"</string>
+    <string name="unknown" msgid="564184550182858146">"E panjohur"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Ky artikull është i ruajtur në nivel lokal dhe mund të përdoret jashtë linje."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Qëndro në pritje"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Gabim i kamerës"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Nuk mund të lidhet me kamerën."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Kamera është çaktivizuar për shkak të politikave të sigurisë."</string>
+    <string name="wait" msgid="765601745709933047">"Qëndro në pritje..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Fut një kartë SD para se të përdorësh kamerën."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"Po përgatit kartën SD…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"Nuk mund të hynte te karta SD."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Regjistrim me intervale"</string>
+    <string name="capturing" msgid="5255164204641920893">"Po regjistron"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Zgjidh kamerën"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"E pasme"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"E përparme"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Ruaj vendndodhjen"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"VENDNDODHJA"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Numërimi mbrapsht"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"\"Bip\" gjatë numërimit"</string>
+    <string name="setting_off" msgid="6782191065550276632">"Çaktivizuar"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Aktivizuar"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Cilësia e videos"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Regjistrim me intervale"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Cilësimet e kamerës"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Cilësimet e videokamerës"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Madhësia e fotografisë"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"E madhe"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"Mesatare"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"E vogël"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Modaliteti i fokusit"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Automatik"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Pafundësi"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Makro"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"Automatik"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"PAFUNDËSI"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MAKRO"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Modaliteti i blicit"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"MODALITETI I BLICIT"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Automatik"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Aktivizuar"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"Çaktivizuar"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"BLIC AUTOMATIK"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"BLIC I AKTIVIZUAR"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"BLIC I ÇAKTIVIZUAR"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Balancimi i bardhësisë"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"BALANCIMI I BARDHËSISË"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Automatike"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Inkandeshente"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Ndriçim i ditës"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Fluoreshente"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Vranësirë"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AUTOMATIKE"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"INKANDESHENTE"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"NDRIÇIM I DITËS"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"FLUORESHENTE"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"VRANËSIRË"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Modaliteti i skenës"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Automatik"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ËSHTË I AKTIVIZUAR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ËSHTË I ÇAKTIVIZUAR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR-JA ËSHTË E AKTIVIZUAR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR-JA ËSHTË E ÇAKTIVIZUAR"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Aksion"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Natë"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Perëndim dielli"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Festë"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ASNJË"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"AKSION"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"NATË"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"PERËNDIM DIELLI"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"FESTË"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"KOHËMATËSI ËSHTË I ÇAKTIVIZUAR"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SEKONDË"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SEKONDA"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SEKONDA"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SEKONDA"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Nuk mund të zgjidhet në modalitetin e skenës."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Ekspozimi"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"EKSPOZIMI"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"KAMERA E PËRPARME"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"KAMERA E PASME"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"Në rregull!"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Anulo"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"Hapësira e kartës tënde SD po mbaron. Ndrysho parametrin e cilësisë ose fshi disa imazhe apo skedarë të tjerë."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Kufiri i madhësisë u arrit."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Shumë e shpejtë"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Po përgatit panoramën"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Panorama nuk mund të ruhej."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Panorama"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Po regjistron panoramën"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Po pret për panoramën e mëparshme"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Po ruan..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Po përgatit panoramën për paraqitje"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Prek për ta fokusuar."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Efektet"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Asnjë"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Shtrydhe"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Sy të mëdhenj"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Gojë e madhe"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Gojë e vogël"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Hundë e madhe"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Sy të vegjël"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Në hapësirë"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Perëndimi"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Videoja jote"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Prek për ta shkrepur fotografi gjatë regjistrimit."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Regjistrimi i videos filloi."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Regjistrimi i videos ndaloi."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Pastro efektet"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"FYTYRA QESHARAKE"</string>
+    <string name="effect_background" msgid="1358432220077975015">"SFONDI"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Obturatori"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Anulo"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Butoni i menysë"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"Kutia e kontrollit %1$s"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Kalo te fotografia"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Kalo te videoja"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Kalo te panorama"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Kalo te fotosfera"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Kalo te cilësia e lartë"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Kalo te ri-fokusimi"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Rishiko dhe anulo"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Rishikimi u krye"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Rishiko dhe shkrep/filmo përsëri"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Opsionet"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Lista e modaliteteve është e mbyllur"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Lista e modaliteteve është e hapur"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Regjistrimi u realizua!"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Fotografia u realizua"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Videoja u realizua"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Shkyçe te kamera"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Skedari \"media\" u realizua në %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Fotografia u realizua në %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Videoja u realizua në %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Panorama u realizua në %s"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for photosphere_date_content_description (4183741743409007876) -->
+    <skip />
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Efekti i fokusit u realizua në %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Skedari \"media\" po përpunohet"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Aktivizo listën e modaliteteve"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Lista e modaliteteve"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Aktivizo shiritin e filmit"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Shiriti i filmit"</string>
+    <string name="capital_on" msgid="1118214824959797269">"Aktivizuar"</string>
+    <string name="capital_off" msgid="3020696135020167263">"Çaktivizuar"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Luaj videon"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"Çaktivizuar"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0,5 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 sekondë"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1,5 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2,5 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 sekonda"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0,5 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 minutë"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1,5 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2,5 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 minuta"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0,5 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1,5 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2,5 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 orë"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 orë"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"sekonda"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"minuta"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"orë"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"U krye!"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Cakto intervalin e kohës"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Funksioni i intervalit është i çaktivizuar. Aktivizoje për të caktuar intervalin e kohës."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Cakto kohëzgjatjen në sekonda"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Po numëron mbrapsht për të nxjerrë fotografi"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Të ruhen vendndodhjet e fotografive?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Etiketoji fotografitë dhe videot e tua me vendndodhjet ku janë realizuar.\n\nAplikacionet e tjera mund të qasen në këto informacione së bashku me imazhet e tua të ruajtura."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Jo, faleminderit!"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Po"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"OPSIONE TË TJERA"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"CILËSIMET"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Krijo planetin e vogël"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Po ruan planetin e vogël…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Zmadho"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Rrotullo"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Redaktori i fotografisë"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Ruaj"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Imazhi nuk mund të ngarkohet!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Pamja e shiritit të filmit"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Po cakton imazhin e sfondit"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Cilësimet"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Kamera"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Video"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Fotosfera"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Regjistrim me intervale"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Kënd i gjerë"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Panorama"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Efekti i fokusit"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Kalo te \"Modaliteti i kamerës\""</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Kalo te \"Videokamera\""</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Kalo te \"Modaliteti i fotosferës\""</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Kalo te \"Modaliteti i panoramës\""</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Kalo te \"Modaliteti i efektit të fokusit\""</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Hap \"Cilësimet\""</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Mbyll \"Cilësimet\""</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"\"HDR Plus\" është i çaktivizuar"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"\"HDR Plus\" është i aktivizuar"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR-ja është e çaktivizuar"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR është e aktivizuar"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Blic i çaktivizuar"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Blic automatik"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Blic i aktivizuar"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"Blici \"HDR+\" është i çaktivizuar"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"Blici \"HDR+\" është automatik"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"Blici \"HDR+\" është i aktivizuar"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Elektriku i dorës është i aktivizuar"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Elektriku i dorës është i çaktivizuar"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Kamera e pasme"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Kamera e përparme"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Rrjetëzimi është i çaktivizuar"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Rrjetëzimi është i aktivizuar"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Kohëmatësi i numërimit mbrapsht është i çaktivizuar"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Kohëzgjatja e numërimit mbrapsht është caktuar 3 sekonda"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Kohëzgjatja e numërimit mbrapsht është caktuar 10 sekonda"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Opsione të tjera..."</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Anulo"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"U krye!"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Realizo përsëri"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Shpërnda"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Shiko"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"Redakto"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"Fshi"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Kompensimi i ekspozimit është manual"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Kompensimi i ekspozimit -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Kompensimi i ekspozimit -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Kompensimi i ekspozimit 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Kompensimi i ekspozimit +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Kompensimi i ekspozimit +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Butoni tani është %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Vendndodhja"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Fotografi me kamerën e pasme"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Video me kamerën e pasme"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Fotografi me kamerën e përparme"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Video me kamerën e përparme"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Kamera e paracaktuar"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Ndihmë dhe komente"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"Po përpunon \"HDR+\"…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Licenca me burim të hapur"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Cilësimet e përgjithshme"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Rezolucioni dhe cilësia"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Informacion"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Versioni i ndërtimit"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"E ulët"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"E lartë"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480 pikëza"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 pikëza"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 pikëza"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapikëza"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapikëza"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Për ta ri-fokusuar, prek këtu"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Të përparuara"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Ekspozim manual"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Te \"Cilësimet\", ndrysho rezolucionin dhe cilësinë ose provo funksionet e përparuara."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Zgjidh madhësinë e fotografisë"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Këtë mund ta ndryshosh më vonë te \"Cilësimet\""</string>
+    <string name="share_to" msgid="5144911209144798122">"Shpërnda në"</string>
+    <string name="edit_with" msgid="615569327230783971">"Redakto me"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"PËRPARA"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"E kuptova!"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Ndjesori i plotë \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Ndjesori i prerë \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 97e8e17..d1b3b57 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720 пиксела"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080 пиксела"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s мегапиксела"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s мегапиксела"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Да бисте променили фокус, додирните овде"</string>
index 890a337..1c1a3ba 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixlar"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Tryck här om du vill ändra fokus"</string>
index fff6ee7..5621ba0 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD p720"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD p1080"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD K4"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"Megapikseli %1$s"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"Megapikseli (%1$d:%2$d) %3$s"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Ili ulenge tena, gusa hapa"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
new file mode 100644 (file)
index 0000000..f0f0fe5
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"கேமரா"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"கேம்கார்டர்"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"இதுவாகப் படத்தை அமை"</string>
+    <string name="delete" msgid="2714492172818940424">"நீக்கு"</string>
+    <string name="share" msgid="8581089487762243115">"பகிர்"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"பனோரமாவைப் பகிர்"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"படமாகப் பகிர்"</string>
+    <string name="deleted" msgid="2036165115527228127">"நீக்கப்பட்டது"</string>
+    <string name="undo" msgid="5110048345890050107">"செயல்தவிர்"</string>
+    <string name="details" msgid="4404020741542549488">"விவரங்கள்"</string>
+    <string name="close" msgid="4826166926297479820">"மூடு"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"வரைபடத்தில் காட்டு"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"இடதுபுறமாகச் சுழற்று"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"வலதுபுறமாகச் சுழற்று"</string>
+    <string name="edit" msgid="2776879395749004347">"திருத்து"</string>
+    <string name="crop_action" msgid="6933589718464132714">"செதுக்கு"</string>
+    <string name="trim_action" msgid="4736803320203951827">"ட்ரிம்"</string>
+    <string name="set_as" msgid="5469055085024870081">"இவ்வாறாக அமை"</string>
+    <string name="video_err" msgid="1562566029875081552">"வீடியோவை இயக்க முடியவில்லை."</string>
+    <string name="title" msgid="8061744305671964703">"தலைப்பு"</string>
+    <string name="description" msgid="8193138501982849808">"விளக்கம்"</string>
+    <string name="time" msgid="5248213506417024287">"நேரம்"</string>
+    <string name="location" msgid="564326205780827668">"இருப்பிடம்"</string>
+    <string name="path" msgid="5927003361865586353">"பாதை"</string>
+    <string name="width" msgid="7045750687833828758">"அகலம்"</string>
+    <string name="height" msgid="5186001199353423689">"உயரம்"</string>
+    <string name="orientation" msgid="3883761294106680270">"திசையமைப்பு"</string>
+    <string name="duration" msgid="5316211067383665008">"கால அளவு"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME வகை"</string>
+    <string name="file_size" msgid="6841070748357980676">"கோப்பு அளவு"</string>
+    <string name="maker" msgid="698691509121545856">"உருவாக்குநர்"</string>
+    <string name="model" msgid="8547493604023069452">"மாடல்"</string>
+    <string name="flash" msgid="995041910749174196">"ஃப்ளாஷ்"</string>
+    <string name="aperture" msgid="2453802098282814022">"ஒளிபுகும் துவாரம்"</string>
+    <string name="focal_length" msgid="8351221512187346229">"குவியத்தூரம்"</string>
+    <string name="white_balance" msgid="1600142743496129085">"வெண்மை சமநிலை"</string>
+    <string name="exposure_time" msgid="949787291620767754">"எக்ஸ்போஷருக்கான நேரம்"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"மி.மீ"</string>
+    <string name="manual" msgid="2444400953521760140">"கைமுறை"</string>
+    <string name="auto" msgid="2552649885114400474">"தானியங்கு"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ஃப்ளாஷ் முடக்கப்பட்டது"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ஃப்ளாஷ் இல்லை"</string>
+    <string name="unknown" msgid="564184550182858146">"அறியப்படாதது"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"உருப்படி அகத்தில் சேமிக்கப்பட்டு ஆஃப்லைனில் கிடைக்கும்."</string>
+    <string name="please_wait" msgid="1416313324505140068">"காத்திருக்கவும்"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"கேமரா பிழை"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"கேமராவுடன் இணைக்க முடியவில்லை."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"பாதுகாப்பு கொள்கைகள் காரணமாக கேமரா முடக்கப்பட்டுள்ளது."</string>
+    <string name="wait" msgid="765601745709933047">"காத்திருக்கவும்…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"கேமராவைப் பயன்படுத்துவதற்கு முன், SD கார்டைச் செருகவும்."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD கார்டைத் தயார் செய்கிறது..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD கார்டை அணுக முடியவில்லை."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"இடைவெளிக்கான நேரம் பதிவாகிறது"</string>
+    <string name="capturing" msgid="5255164204641920893">"படமெடுக்கிறது"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"கேமராவைத் தேர்வுசெய்க"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"பின்பக்கம்"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"முன்பக்க கேமரா"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"இருப்பிடத்தைச் சேமி"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"இருப்பிடம்"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"நேரக் கணிப்பான்"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"நேரக் கணிப்பான்போது பீப்"</string>
+    <string name="setting_off" msgid="6782191065550276632">"முடக்கத்தில்"</string>
+    <string name="setting_on" msgid="9086728135773197891">"இயக்கத்தில்"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"வீடியோ தரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"இடைவெளிக்கான நேரம்"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"கேமரா அமைப்பு"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"கேம்கார்டர் அமைப்பு"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"பட அளவு"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"பெரியது"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"நடுத்தரம்"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"சிறியது"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"மையக் குவிய முறை"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"தானியங்கு"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"முடிவற்ற தன்மை"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"மேக்ரோ"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"தானியங்கு"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"முடிவுறாதது"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"மேக்ரோ"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ஃப்ளாஷ் பயன்முறை"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ஃப்ளாஷ் பயன்முறை"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"தானியங்கு"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"இயக்கு"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"முடக்கு"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"ஃப்ளாஷ் தானியங்கு"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ஃபிளாஷ் இயக்கத்தில்"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ஃப்ளாஷை முடக்கு"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"வெண்மை சமநிலை"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"வெண்மை சமநிலை"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"தானியங்கு"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"வெண்சுடர் ஒளி"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"பகல்நேர ஒளி"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ஒளிர்வு"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"மேகமூட்டம்"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"தானியங்கு"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"வெண் சுடர் ஒளி"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"பகல்நேர ஒளி"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ஒளிர்வு"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"மேகமூட்டம்"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"காட்சிப் பயன்முறை"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ஐ இயக்கு"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ஐ முடக்கு"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ஐ இயக்கு"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"பார்ட்டி"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ஏதுமில்லை"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"அசைவு"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"இரவு பயன்முறை"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"சூரிய அஸ்தமம்"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"பார்ட்டி"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"டைமர் முடக்கப்பட்டது"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 வினாடி"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 வினாடிகள்"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 வினாடிகள்"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 வினாடி"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"காட்சி பயன்முறையில், தேர்ந்தெடுக்க முடியாது."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"வெளிப்பாடு"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"வெளிப்பாடு"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"முன்பக்க கேமரா"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"பின்பக்க கேமரா"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"சரி"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"ரத்துசெய்"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD கார்டில் இடம் இல்லை. தர அமைப்புகளை மாற்றவும் அல்லது சில படங்களையோ, பிற கோப்புகளையோ நீக்கவும்."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"அளவிற்கான வரம்பை அடைந்துவிட்டீர்கள்."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"மிகவும் விரைவானது"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"பனோரமாவை உருவாக்குகிறது"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"பனோரமாவைச் சேமிக்க முடியவில்லை."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"பனோரமா"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"பனோரமாவில் படமெடுக்கிறது"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"முந்தைய பனோரமாவிற்காகக் காத்திருக்கிறது"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"சேமிக்கிறது..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"பனோரமாவைப் பயன்படுத்துகிறது"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"குவியத்திற்குத் தொடவும்."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"விளைவுகள்"</string>
+    <string name="effect_none" msgid="3102797925086872636">"ஏதுமில்லை"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"நெருக்கு"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"பெரிய கண்கள்"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"பெரிய வாய்"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"சிறிய வாய்"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"பெரிய மூக்கு"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"சிறிய கண்கள்"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"விண்வெளியில்"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"சூரிய அஸ்தமம்"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"உங்கள் வீடியோ"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"பதிவுசெய்யும்போது படத்தை எடுக்க தொடவும்."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"வீடியோ பதிவு தொடங்கியது."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"வீடியோ பதிவு நிறுத்தப்பட்டது."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"விளைவுகளை அழி"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"வேடிக்கையான முக விளைவுகள்"</string>
+    <string name="effect_background" msgid="1358432220077975015">"பின்புலம்"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"ஷட்டர்"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"ரத்துசெய்"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"மெனு பொத்தான்"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s செக் பாக்ஸ்"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"படத்திற்கு மாறு"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"வீடியோவிற்கு மாறு"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"பனோரமாவிற்கு மாறு"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 டிகிரி பனோரமாவுக்கு மாறு"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"உயர்தரத்திற்கு மாறு"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"மறுகுவியத்திற்கு மாறு"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"மதிப்பாய்வை ரத்துசெய்"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"மதிப்பாய்வு முடிந்தது"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"மதிப்பாய்வை மீண்டும் எடு"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"விருப்பங்கள்"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"பயன்முறைப் பட்டியல் மூடப்பட்டது"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"பயன்முறைப் பட்டியல் திறக்கப்பட்டது"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"படமெடுக்கப்பட்டது"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"படமெடுக்கப்பட்டது"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"வீடியோ எடுக்கப்பட்டது"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"கேமராவிற்குத் திறக்கவும்"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"மீடியா எடுக்கப்பட்டது - %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"படம் எடுக்கப்பட்டது - %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"வீடியோ எடுக்கப்பட்டது - %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"பனோரமா எடுக்கப்பட்டது - %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"360 டிகிரி பனோரமா எடுக்கப்பட்டது - %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"லென்ஸ் மங்கல்தன்மை எடுக்கப்பட்டது - %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"மீடியா செயலாக்கத்தில்"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"பயன்முறைப் பட்டியலை நிலைமாற்று"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"பயன்முறைப் பட்டியல்"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"படத்துண்டை நிலைமாற்று"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"படத்துண்டு"</string>
+    <string name="capital_on" msgid="1118214824959797269">"இயக்கு"</string>
+    <string name="capital_off" msgid="3020696135020167263">"முடக்கு"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"வீடியோவை இயக்கு"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"முடக்கத்தில்"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 வினாடி"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 வினாடிகள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 நிமிடம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 நிமிடங்கள்"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 மணிநேரம்"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 மணிநேரம்"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"வினாடிகள்"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"நிமிடங்கள்"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"மணிநேரம்"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"முடிந்தது"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"நேர இடைவெளியை அமை"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"இடைவெளிக்கான நேர அம்சம் முடக்கப்பட்டது. நேர இடைவெளியை அமைக்க அதை இயக்கவும்."</string>
+    <string name="set_duration" msgid="1638453882581604341">"வினாடியில் கால அளவை அமை"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"படத்தை எடுப்பதற்கான நேரக் கணிப்பான்"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"பட இருப்பிடங்களை நினைவில் வைக்கவா?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"உங்கள் படங்கள், வீடியோக்கள் எடுக்கப்பட்ட இடங்களைக் குறியிடவும்.\n\nபிற பயன்பாடுகள், சேமிக்கப்பட்ட படங்களுடனான இந்தத் தகவலை அணுகலாம்."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"நன்றி, வேண்டாம்"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ஆம்"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"மேலும் விருப்பங்கள்"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"அமைப்பு"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"சிறிய கிரகத்தை உருவாக்கு"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"சிறிய கிரகத்தைச் சேமிக்கிறது …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"அளவை மாற்று"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"சுழற்று"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ஃபோட்டோ எடிட்டர்"</string>
+    <string name="crop_save" msgid="2841974981340098579">"சேமி"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"படத்தை ஏற்ற முடியவில்லை!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"படத்துண்டு காட்சி"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"வால்பேப்பரை அமைக்கிறது"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"அமைப்பு"</string>
+    <string name="mode_camera" msgid="279763925715250603">"கேமரா"</string>
+    <string name="mode_video" msgid="8633929034048169139">"வீடியோ"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 டிகிரி பனோரமா"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"இடைவெளிக்கான நேரம்"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"அகலக் கோணம்"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"பனோரமா"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"லென்ஸ் மங்கல்தன்மை"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"கேமரா பயன்முறைக்கு மாறு"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"வீடியோ கேமரா பயன்முறைக்கு மாறு"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 டிகிரி பனோரமா பயன்முறைக்கு மாறு"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"பனோரமா பயன்முறைக்கு மாறு."</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"லென்ஸ் மங்கல்தன்மை பயன்முறைக்கு மாறு"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"அமைப்புகளைத் திற"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"அமைப்புகளை மூடு"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR ப்ளஸை முடக்கு"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR ப்ளஸ் இயக்கப்பட்டது"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR ஐ முடக்கு"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR இயக்கப்பட்டது"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ஃப்ளாஷை முடக்கு"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"ஃப்ளாஷ் தானியங்கு"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ஃப்ளாஷ் இயக்கப்பட்டது"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ஃபிளாஷை முடக்கு"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ தன்னியக்க ஃபிளாஷ்"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ஃபிளாஷை இயக்கு"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ஒளிகாட்டி இயக்கப்பட்டது"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ஒளிகாட்டி முடக்கப்பட்டது"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"பின்பக்க கேமரா"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"முன்பக்க கேமரா"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"கட்டக் கோடுகளை முடக்கு"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"கட்டக் கோடுகளை இயக்கு"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"நேரக் கணிப்பான் முடக்கப்பட்டது"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"நேரக் கணிப்பான் கால அளவு 3 வினாடிகளுக்கு அமைக்கப்பட்டது"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"நேரக் கணிப்பான் கால அளவு 10 வினாடிகளுக்கு அமைக்கப்பட்டது"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"மேலும் விருப்பங்கள்"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"ரத்துசெய்"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"முடிந்தது"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"மீண்டும் எடு"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"பகிர்"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"வியூ"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"திருத்து"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"நீக்கு"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"கைமுறையாக எக்ஸ்போஷரைச் சரிசெய்தல்"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"எக்ஸ்போஷரைச் சரிசெய்தல் -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"எக்ஸ்போஷரைச் சரிசெய்தல் -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"எக்ஸ்போஷரைச் சரிசெய்தல் 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"எக்ஸ்போஷரைச் சரிசெய்தல் +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"எக்ஸ்போஷரைச் சரிசெய்தல் +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"பொத்தான் இப்போது %s இல் உள்ளது"</string>
+    <string name="setting_location" msgid="4459859689227893838">"இருப்பிடம்"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"பின்புற கேமரா படம்"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"பின்புற கேமரா வீடியோ"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"முன்புற கேமரா படம்"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"முன்புற கேமரா வீடியோ"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"இயல்பு கேமரா"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"உதவி &amp; கருத்து"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ ஐத் தயார் செய்கிறது …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"பொது அமைப்பு"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"தெளிவுத்திறன் &amp; தரம்"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"அறிமுகம்"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"நடப்புப் பதிப்பு"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"குறைவு"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"அதிகம்"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s மெகாபிக்சல்கள்"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s மெகாபிக்சல்கள்"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"மறுகவனம் செலுத்த, இங்கு தொடவும்"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"மேம்பட்டவை"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"பயனராக வெளிக்காட்டுதல்"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"அமைப்புகளில், தெளிவுத்திறனையும் தரத்தையும் மாற்றவும் அல்லது மேம்பட்ட அம்சங்களை முயற்சிக்கவும்."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"பட அளவைத் தேர்வுசெய்க"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"இதைப் பின்பு அமைப்புகளில் மாற்றலாம்."</string>
+    <string name="share_to" msgid="5144911209144798122">"இவற்றுடன் பகிர்"</string>
+    <string name="edit_with" msgid="615569327230783971">"இதன் மூலம் திருத்து"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"அடுத்து"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"சரி, புரிந்தது"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"முழு சென்சார் \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"செதுக்கிய சென்சார் \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
new file mode 100644 (file)
index 0000000..2dedd5a
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"కెమెరా"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"క్యామ్‌కార్డర్"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"చిత్రాన్ని ఇలా సెట్ చేయండి"</string>
+    <string name="delete" msgid="2714492172818940424">"తొలగించు"</string>
+    <string name="share" msgid="8581089487762243115">"భాగస్వామ్యం చేయండి"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"విశాల దృశ్యాన్ని భాగస్వామ్యం చేయండి"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"ఫోటోగా భాగస్వామ్యం చేయండి"</string>
+    <string name="deleted" msgid="2036165115527228127">"తొలగించబడింది"</string>
+    <string name="undo" msgid="5110048345890050107">"చర్య రద్దు చేయి"</string>
+    <string name="details" msgid="4404020741542549488">"వివరాలు"</string>
+    <string name="close" msgid="4826166926297479820">"మూసివేయి"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"మ్యాప్‌లో చూపు"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"ఎడమవైపుకి తిప్పు"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"కుడివైపుకి తిప్పు"</string>
+    <string name="edit" msgid="2776879395749004347">"సవరించు"</string>
+    <string name="crop_action" msgid="6933589718464132714">"కత్తిరించు"</string>
+    <string name="trim_action" msgid="4736803320203951827">"కుదించు"</string>
+    <string name="set_as" msgid="5469055085024870081">"ఇలా సెట్ చేయండి"</string>
+    <string name="video_err" msgid="1562566029875081552">"వీడియోను ప్లే చేయడం సాధ్యపడదు."</string>
+    <string name="title" msgid="8061744305671964703">"శీర్షిక"</string>
+    <string name="description" msgid="8193138501982849808">"వివరణ"</string>
+    <string name="time" msgid="5248213506417024287">"సమయం"</string>
+    <string name="location" msgid="564326205780827668">"స్థానం"</string>
+    <string name="path" msgid="5927003361865586353">"పథం"</string>
+    <string name="width" msgid="7045750687833828758">"వెడల్పు"</string>
+    <string name="height" msgid="5186001199353423689">"ఎత్తు"</string>
+    <string name="orientation" msgid="3883761294106680270">"దృగ్విన్యాసం"</string>
+    <string name="duration" msgid="5316211067383665008">"వ్యవధి"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME రకం"</string>
+    <string name="file_size" msgid="6841070748357980676">"ఫైల్ పరిమాణం"</string>
+    <string name="maker" msgid="698691509121545856">"రూపకర్త"</string>
+    <string name="model" msgid="8547493604023069452">"మోడల్"</string>
+    <string name="flash" msgid="995041910749174196">"ఫ్లాష్"</string>
+    <string name="aperture" msgid="2453802098282814022">"ఎపర్చర్"</string>
+    <string name="focal_length" msgid="8351221512187346229">"కేంద్రాంతరము"</string>
+    <string name="white_balance" msgid="1600142743496129085">"తెలుపు సమతుల్యత"</string>
+    <string name="exposure_time" msgid="949787291620767754">"ఎక్స్‌పోజర్ సమయం"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"మి.మీ."</string>
+    <string name="manual" msgid="2444400953521760140">"మాన్యువల్"</string>
+    <string name="auto" msgid="2552649885114400474">"స్వయంచాలకం"</string>
+    <string name="flash_on" msgid="6573457197393807642">"ఫ్లాష్ ప్రారంభించబడింది"</string>
+    <string name="flash_off" msgid="7889323512830926273">"ఫ్లాష్ లేదు"</string>
+    <string name="unknown" msgid="564184550182858146">"తెలియదు"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"ఈ అంశం స్థానికంగా నిల్వ చేయబడింది మరియు ఆఫ్‌లైన్‌లో అందుబాటులో ఉంది."</string>
+    <string name="please_wait" msgid="1416313324505140068">"దయచేసి వేచి ఉండండి"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"కెమెరా లోపం"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"కెమెరాకు కనెక్ట్ చేయడం సాధ్యపడదు."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"భద్రతా విధానాల కారణంగా కెమెరా నిలిపివేయబడింది."</string>
+    <string name="wait" msgid="765601745709933047">"దయచేసి వేచి ఉండండి..."</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"కెమెరాను ఉపయోగించడానికి ముందు SD కార్డును చొప్పించండి."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD కార్డు‌ను సన్నద్ధం చేస్తోంది..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD కార్డును ప్రాప్యత చేయడం సాధ్యపడలేదు."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"గడిచిన సమయం రికార్డింగ్"</string>
+    <string name="capturing" msgid="5255164204641920893">"క్యాప్చర్ చేస్తోంది"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"కెమెరాను ఎంచుకోండి"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"వెనుక వైపు ఉండేది"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"ముందువైపు"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"సేవ్ అయ్యే స్థానం"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"స్థానం"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"కౌంట్‍డౌన్ టైమర్"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"కౌంట్‌డౌన్ సమయంలో బీప్ ధ్వని చేయి"</string>
+    <string name="setting_off" msgid="6782191065550276632">"ఆఫ్‌లో ఉంది"</string>
+    <string name="setting_on" msgid="9086728135773197891">"ఆన్‌లో ఉంది"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"వీడియో నాణ్యత"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"సమయం గడిచేది"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"కెమెరా సెట్టింగ్‌లు"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"క్యామ్‌కార్డర్ సెట్టింగ్‌లు"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"చిత్రం పరిమాణం"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"పెద్దది"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"మధ్యస్థం"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"చిన్నది"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"కేంద్రీకరణ మోడ్"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"స్వయంచాలకం"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"అనంతం"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"మ్యాక్రో"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"స్వయంచాలకం"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"అనంతం"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"మ్యాక్రో"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"ఫ్లాష్ మోడ్"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"ఫ్లాష్ మోడ్"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"స్వయంచాలకం"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"ఆన్‌లో ఉంది"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"ఆఫ్‌లో ఉంది"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"ఫ్లాష్ స్వయంచాలకంలో ఉంది"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"ఫ్లాష్ ఆన్‌లో ఉంది"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"ఫ్లాష్ ఆఫ్‌లో ఉంది"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"తెలుపు సమతుల్యత"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"తెలుపు సమతుల్యత"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"స్వయంచాలకం"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"ప్రజ్వలనం"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"పగటి కాంతి"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"ప్రతిదీప్తం"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"మేఘావృతంగా"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"స్వయంచాలకం"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"ప్రజ్వలనం"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"పగటి కాంతి"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"ప్రతిదీప్తం"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"మేఘావృతంగా"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"దృశ్యం మోడ్"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ ఆన్‌లో ఉంది"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ ఆఫ్‌లో ఉంది"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR ఆన్‌లో ఉంది"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"పార్టీ"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"ఏదీ లేదు"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"చర్య"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"రాత్రి"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"సూర్యాస్తమయం"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"పార్టీ"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"టైమర్ ఆఫ్‌లో ఉంది"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 సెకను"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 సెకన్లు"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 సెకన్లు"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 సెకన్లు"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"సన్నివేశం మోడ్‌లో ఎంచుకోవడం సాధ్యపడదు."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"ఎక్స్‌పోజర్"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ఎక్స్‌పోజర్"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"ముందువైపు ఉండే కెమెరా"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"వెనుకభాగంలో ఉండే కెమెరా"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"సరే"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"రద్దు చెేయి"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"మీ SD కార్డు నిల్వ దాదాపు నిండింది. నాణ్యత సెట్టింగ్‌ను మార్చండి లేదంటే కొన్ని చిత్రాలు లేదా ఇతర ఫైల్‌లను తొలగించండి."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"పరిమాణ పరిమితి చేరుకున్నారు."</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"అత్యంత వేగవంతం"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"విశాల దృశ్యాన్ని సన్నద్ధం చేస్తోంది"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"విశాల దృశ్యాన్ని సేవ్ చేయడం సాధ్యపడలేదు."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"విశాల దృశ్యం"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"విశాల దృశ్యాన్ని క్యాప్చర్ చేస్తోంది"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"మునుపటి విశాల దృశ్యం కోసం వేచి ఉంది"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"సేవ్ చేస్తోంది..."</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"విశాల దృశ్యాన్ని రెండెర్ చేస్తోంది"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"కేంద్రీకరించడానికి తాకండి."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"ప్రభావాలు"</string>
+    <string name="effect_none" msgid="3102797925086872636">"ఏదీ వద్దు"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"బుగ్గలు నొక్కి ఉంచడం"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"పెద్ద కళ్లు"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"పెద్ద నోరు"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"చిన్న నోరు"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"పెద్ద ముక్కు"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"చిన్న కళ్లు"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"అంతరిక్షంలో"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"సూర్యాస్తమయం"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"మీ వీడియో"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"రికార్డ్ చేస్తున్నప్పుడు ఫోటో తీయడానికి తాకండి."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"వీడియో రికార్డింగ్ ప్రారంభించబడింది."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"వీడియో రికార్డింగ్ ఆపివేయబడింది."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"ప్రభావాలను క్లియర్ చేయి"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"చిలిపి ముఖాలు"</string>
+    <string name="effect_background" msgid="1358432220077975015">"నేపథ్యం"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"షటర్ వేయి"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"రద్దు చేయి"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"మెను బటన్"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s తనిఖీ పెట్టె"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"ఫోటోకు మార్చు"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"వీడియోకు మార్చు"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"విశాల దృశ్యానికి మార్చు"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"360 డిగ్రీ పనోరమాకు మార్చు"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"అధిక నాణ్యతకు మార్చు"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"పునఃకేంద్రీకరణకు మార్చు"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"సమీక్ష రద్దు చేయి"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"సమీక్ష పూర్తయింది"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"సమీక్షను మళ్లీ తీసుకోవడం"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"ఎంపికలు"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"మోడ్ జాబితా మూసివేయబడింది"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"మోడ్ జాబితా తెరవబడింది"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"క్యాప్చర్ తీయబడింది"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"ఫోటో తీయబడింది"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"వీడియో తీయబడింది"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"కెమెరాను అన్‌లాక్ చేయి"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"మీడియా %sన తీయబడింది"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"ఫోటో %sన తీయబడింది"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"వీడియో %sన తీయబడింది"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"విశాల దృశ్యం %sన తీయబడింది"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"360 డిగ్రీ పనోరమా %sన తీయబడింది"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"లెన్స్ అస్పష్టత %sన తీయబడింది"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"మీడియాను ప్రాసెస్ చేస్తోంది"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"మోడ్ జాబితాను టోగుల్ చేయి"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"మోడ్ జాబితా"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"ఫిల్మ్‌స్ట్రిప్‌ను టోగుల్ చేయి"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"ఫిల్మ్‌స్ట్రిప్"</string>
+    <string name="capital_on" msgid="1118214824959797269">"ఆన్‌లో ఉంది"</string>
+    <string name="capital_off" msgid="3020696135020167263">"ఆఫ్‌లో ఉంది"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"వీడియోను ప్లే చేయి"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"ఆఫ్‌లో ఉంది"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 సెకను"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 సెకన్లు"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 నిమిషం"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 నిమిషాలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 గంట"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 గంట"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 గంటలు"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 గంటలు"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"సెకన్లు"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"నిమిషాలు"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"గంటలు"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"పూర్తయింది"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"సమయ విరామాన్ని సెట్ చేయండి"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"గడిచిన సమయం లక్షణం ఆఫ్‌లో ఉంది. సమయ విరామాన్ని సెట్ చేయడానికి దాన్ని ప్రారంభించండి."</string>
+    <string name="set_duration" msgid="1638453882581604341">"వ్యవధిని సెకన్లలో సెట్ చేయండి"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ఫోటో తీయడానికి కౌంట్ డౌన్ చేస్తోంది"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"ఫోటో స్థానాలను గుర్తుంచుకోవాలా?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"మీ ఫోటోలు మరియు వీడియోలను, అవి తీయబడిన స్థానాలతో పాటు ట్యాగ్ చేయండి.\n\nఇతర అనువర్తనాలు మీరు సేవ్ చేసిన చిత్రాలతో పాటు ఈ సమాచారాన్ని ప్రాప్యత చేయవచ్చు."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"వద్దు ధన్యవాదాలు"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"అవును"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"మరిన్ని ఎంపికలు"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"సెట్టింగ్‌లు"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"అతిచిన్న ప్లానెట్‌ను సృష్టించు"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"అతిచిన్న ప్లానెట్‌ను సేవ్ చేస్తోంది …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"జూమ్ చేయి"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"తిప్పు"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"ఫోటో ఎడిటర్"</string>
+    <string name="crop_save" msgid="2841974981340098579">"సేవ్ చేయి"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"చిత్రాన్ని లోడ్ చేయడం సాధ్యపడదు!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"ఫిల్మ్‌స్ట్రిప్ వీక్షణ"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"వాల్‌పేపర్‌ను సెట్ చేస్తోంది"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"సెట్టింగ్‌లు"</string>
+    <string name="mode_camera" msgid="279763925715250603">"కెమెరా"</string>
+    <string name="mode_video" msgid="8633929034048169139">"వీడియో"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"360 డిగ్రీ పనోరమా"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"సమయం గడిచేది"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"విశాల కోణం"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"విశాల దృశ్యం"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"ఫోకస్ ఎఫెక్ట్"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"కెమెరా మోడ్‌కు మార్చు"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"వీడియో కెమెరాకు మార్చు"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"360 డిగ్రీ పనోరమా మోడ్‌కు మార్చు"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"విశాల దృశ్యం మోడ్‌కు మార్చు"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"ఫోకస్ ఎఫెక్ట్ మోడ్‌కు మార్చు"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"సెట్టింగ్‌లను తెరవండి"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"సెట్టింగ్‌లను మూసివేయండి"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR ప్లస్ ఆఫ్‌లో ఉంది"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR ప్లస్ ఆన్‌లో ఉంది"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR ఆఫ్‌లో ఉంది"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR ఆన్‌లో ఉంది"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"ఫ్లాష్ ఆఫ్‌లో ఉంది"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"ఫ్లాష్ స్వయంచాలకంలో ఉంది"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"ఫ్లాష్ ఆన్‌లో ఉంది"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ ఫ్లాష్ ఆఫ్‌లో ఉంది"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ ఫ్లాష్ స్వయంచాలకంలో ఉంది"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ ఫ్లాష్ ఆన్‌లో ఉంది"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"టార్చ్ ఆన్‌లో ఉంది"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"టార్చ్ ఆఫ్‌లో ఉంది"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"వెనుక వైపు ఉండే కెమెరా"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"ముందువైపు కెమెరా"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"గ్రిడ్ గీతలు ఆఫ్‌లో ఉన్నాయి"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"గ్రిడ్ గీతలు ఆన్‌లో ఉన్నాయి"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"కౌంట్‍డౌన్ టైమర్ ఆఫ్‌లో ఉంది"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"కౌంట్‍డౌన్ టైమర్ వ్యవధి 3 సెకన్లకు సెట్ చేయబడింది"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"కౌంట్‍డౌన్ టైమర్ వ్యవధి 10 సెకన్లకు సెట్ చేయబడింది"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"మరిన్ని ఎంపికలు"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"రద్దు చేయి"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"పూర్తయింది"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"మళ్లీ తీయి"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"భాగస్వామ్యం చేయండి"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"వీక్షించండి"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"సవరించు"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"తొలగించు"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"మాన్యువల్ ఎక్స్‌పోజర్ పరిహారం"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"ఎక్స్‌పోజర్ పరిహారం -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"ఎక్స్‌పోజర్ పరిహారం -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"ఎక్స్‌పోజర్ పరిహారం 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"ఎక్స్‌పోజర్ పరిహారం +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"ఎక్స్‌పోజర్ పరిహారం +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"ఇప్పుడు బటన్ %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"స్థానం"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"వెనుక కెమెరా ఫోటో"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"వెనుక కెమెరా వీడియో"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"ముందు కెమెరా ఫోటో"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"ముందు కెమెరా వీడియో"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"డిఫాల్ట్ కెమెరా"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"సహాయం &amp; అభిప్రాయం"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ని ప్రాసెస్ చేస్తోంది …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"సాధారణ సెట్టింగ్‌లు"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"రిజల్యూషన్ &amp; నాణ్యత"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"పరిచయం"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"బిల్డ్ సంస్కరణ"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"తక్కువ"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"అధికం"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s మెగాపిక్సెల్‌లు"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s మెగాపిక్సెల్‌లు"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"మళ్లీ దృష్టి సారించడానికి, ఇక్కడ తాకండి"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"అధునాతనం"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"మాన్యువల్ బహిర్గతం"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"సెట్టింగ్‌ల్లో, రిజల్యూషన్ మరియు నాణ్యతను మార్చండి లేదా అధునాతన లక్షణాలను ప్రయత్నించండి."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"ఫోటో పరిమాణం ఎంచుకోండి"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"మీరు దీన్ని సెట్టింగ్‌ల్లో తర్వాత మార్చవచ్చు."</string>
+    <string name="share_to" msgid="5144911209144798122">"దీనికి భాగస్వామ్యం చేయండి"</string>
+    <string name="edit_with" msgid="615569327230783971">"దీనితో సవరించండి"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"తదుపరి"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"సరే, అర్థమైంది"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"పూర్తి సెన్సార్ \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"కత్తిరించిన సెన్సార్ \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 54190b0..c15c1c9 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s เมกะพิกเซล"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s เมกะพิกเซล"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"แตะที่นี่ เพื่อปรับโฟกัส"</string>
index 0302e73..c5c329b 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixels"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixels"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Upang mag-refocus, pumindot dito"</string>
index c70982e..fdea8a0 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapiksel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Yeniden odaklamak için buraya dokunun"</string>
index 0ea1d6b..83b3bde 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s Мпікс."</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s Мпікс"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Щоб змінити фокус, торкніться тут"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
new file mode 100644 (file)
index 0000000..c1e6df5
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"کیمرہ"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"کیم کورڈر"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"تصویر سیٹ کریں بطور"</string>
+    <string name="delete" msgid="2714492172818940424">"حذف کریں"</string>
+    <string name="share" msgid="8581089487762243115">"اشتراک کریں"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"پینوراما کا اشتراک کریں"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"بطور تصویر اشتراک کریں"</string>
+    <string name="deleted" msgid="2036165115527228127">"حذف کردہ"</string>
+    <string name="undo" msgid="5110048345890050107">"کالعدم کریں"</string>
+    <string name="details" msgid="4404020741542549488">"تفصیلات"</string>
+    <string name="close" msgid="4826166926297479820">"بند کریں"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"نقشہ پر دکھائیں"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"بائیں گھمائیں"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"دائیں گھمائیں"</string>
+    <string name="edit" msgid="2776879395749004347">"ترمیم کریں"</string>
+    <string name="crop_action" msgid="6933589718464132714">"تراشیں"</string>
+    <string name="trim_action" msgid="4736803320203951827">"تراشیں"</string>
+    <string name="set_as" msgid="5469055085024870081">"سیٹ کریں بطور"</string>
+    <string name="video_err" msgid="1562566029875081552">"ویڈیو نہیں چلائی جا سکتی ہے۔"</string>
+    <string name="title" msgid="8061744305671964703">"عنوان"</string>
+    <string name="description" msgid="8193138501982849808">"تفصیل"</string>
+    <string name="time" msgid="5248213506417024287">"وقت"</string>
+    <string name="location" msgid="564326205780827668">"مقام"</string>
+    <string name="path" msgid="5927003361865586353">"پاتھ"</string>
+    <string name="width" msgid="7045750687833828758">"چوڑائی"</string>
+    <string name="height" msgid="5186001199353423689">"اونچائی"</string>
+    <string name="orientation" msgid="3883761294106680270">"سمت بندی"</string>
+    <string name="duration" msgid="5316211067383665008">"دورانیہ"</string>
+    <string name="mimetype" msgid="6415940055077963944">"‏MIME کی قسم"</string>
+    <string name="file_size" msgid="6841070748357980676">"فائل سائز"</string>
+    <string name="maker" msgid="698691509121545856">"بنانے والا"</string>
+    <string name="model" msgid="8547493604023069452">"ماڈل"</string>
+    <string name="flash" msgid="995041910749174196">"فلیش"</string>
+    <string name="aperture" msgid="2453802098282814022">"اپرچر"</string>
+    <string name="focal_length" msgid="8351221512187346229">"ماسکہ کی طوالت"</string>
+    <string name="white_balance" msgid="1600142743496129085">"وہائٹ بیلنس"</string>
+    <string name="exposure_time" msgid="949787291620767754">"ایکسپوژر کا وقت"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"مینوئل"</string>
+    <string name="auto" msgid="2552649885114400474">"خودکار"</string>
+    <string name="flash_on" msgid="6573457197393807642">"فلیش آن کیا گیا"</string>
+    <string name="flash_off" msgid="7889323512830926273">"فلیش نہیں ہے"</string>
+    <string name="unknown" msgid="564184550182858146">"نامعلوم"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"یہ آئٹم مقامی طور پر اسٹور ہے اور آف لائن دستیاب ہے۔"</string>
+    <string name="please_wait" msgid="1416313324505140068">"براہ کرم انتظار کریں"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"کیمرہ کی خرابی"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"کیمرہ سے موبوط نہیں ہو سکتا ہے۔"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"سیکیورٹی کی پالیسیوں کی وجہ سے کیمرہ غیر فعال کر دیا گیا ہے۔"</string>
+    <string name="wait" msgid="765601745709933047">"براہ کرم انتظار کریں…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"‏کیمرہ استعمال کرنے سے پہلے ایک SD کارڈ داخل کریں۔"</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"‏SD کارڈ تیار ہو رہا ہے…"</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"‏SD کارڈ تک رسائی حاصل نہیں کر سکا۔"</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"ٹائم لیپس کی ریکارڈنگ"</string>
+    <string name="capturing" msgid="5255164204641920893">"کیپچر کی جا رہی ہے"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"کیمرہ منتخب کریں"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"واپس جائیں"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"فرنٹ"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"مقام محفوظ کریں"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"مقام"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"الٹی گنتی کا ٹائمر"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"الٹی گنتی کے دوران بیپ"</string>
+    <string name="setting_off" msgid="6782191065550276632">"آف"</string>
+    <string name="setting_on" msgid="9086728135773197891">"آن"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"ویڈیو کا معیار"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"ٹائم لیپس"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"کیمرہ کی ترتیبات"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"کیم کوڈر کی ترتیبات"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"تصویر کا سائز"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"بڑا"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"متوسط"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"چھوٹا"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"فوکس کی وضع"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"خودکار"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"انفینٹی"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"میکرو"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"خودکار"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"انفینٹی"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"میکرو"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"فلیش وضع"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"فلیش وضع"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"خودکار"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"آن"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"آف"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"فلیش آٹو"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"فلیش آن ہے"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"فلیش آف"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"وہائٹ بیلنس"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"وہائٹ بیلنس"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"خودکار"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"تیز چمک"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"دن کی روشنی"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"فلوریسنٹ"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"ابر آلود"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"خودکار"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"تیز چمک"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"دن کی روشنی"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"فلوریسنٹ"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"ابر آلود"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"منظر وضع"</string>
+    <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">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"‏HDR+‎ آن ہے"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"‏HDR+‎ آف ہے"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"‏HDR آن ہے"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"‏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>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"پارٹی"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"کوئی نہیں"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"کارروائی"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"رات"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"غروب"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"پارٹی"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"ٹائمر آف"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 سیکنڈ"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 سیکنڈ"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 سیکنڈ"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 سیکنڈ"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"منظر وضع میں قابل انتخاب نہیں ہے۔"</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"ایکسپوژر"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"ایکسپوژر"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"فرنٹ کیمرہ"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"بیک کیمرہ"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"ٹھیک ہے"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"منسوخ کریں"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"‏آپ کے SD کارڈ کی جگہ ختم ہو رہی ہے۔ معیار کی ترتیب تبدیل کریں یا کچھ تصاویر یا دیگر فائلیں حذف کریں۔"</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"سائز کی حد تک پہنچ گئی۔"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"بہت تیز"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"پینوراما تیار ہو رہا ہے"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"پینوراما محفوظ نہیں ہو سکا۔"</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"پینوراما"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"پینوراما کیپچر ہو رہا ہے"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"گزشتہ پینوراما کیلئے انتظار کر رہا ہے"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"محفوظ ہو رہا ہے…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"پینوراما رینڈر کیا جا رہا ہے"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"فوکس کرنے کیلئے ٹچ کریں۔"</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"اثرات"</string>
+    <string name="effect_none" msgid="3102797925086872636">"کوئی نہیں"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"دبائیں"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"بڑی آنکھیں"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"بڑا منھ"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"چھوٹا منہ"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"بڑی ناک"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"چھوٹی آنکھیں"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"جگہ میں"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"غروب"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"آپ کی ویڈیو"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"ریکارڈنگ کرتے ہوئے تصویر لینے کیلئے ٹچ کریں۔"</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"ویڈیو ریکارڈنگ شروع ہو گئی ہے۔"</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"ویڈیو ریکارڈنگ بند ہو گئی ہے۔"</string>
+    <string name="clear_effects" msgid="6192797848995967992">"اثرات ہٹائیں"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"نادان چہرے"</string>
+    <string name="effect_background" msgid="1358432220077975015">"پس منظر"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"شٹر"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"منسوخ کریں"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"مینو بٹن"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"‏%1$s چیک باکس"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"تصویر پر سوئچ کریں"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"ویڈیو پر سوئچ کریں"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"پینوراما پر سوئچ کریں"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"‏Photo Sphere پر سوئچ کریں"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"اعلی معیار پر سوئچ کریں"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"دوبارہ فوکس وضع میں سوئچ کریں"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"منسوخ کیے جانے والے کا جائزہ لیں"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"جائزہ مکمل ہو گیا"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"دوبارہ لینے پر غور کریں"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"اختیارات"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"وضع کی فہرست بند ہے"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"وض‏ع کی فہرست کھلی ہے"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"کیپچر لیا گیا"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"تصویر لی گئی"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"ویڈیو بنایا گیا"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"کیمرہ کیلئے غیر مقفل کریں"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"‏میڈیا لیے جانے کی تاریخ و وقت ‎%s‎"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"‏تصویر لیے جانے کی تاریخ و وقت ‎%s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"‏ویڈیو بنائے جانے کی تاریخ و وقت ‎%s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"‏پینوراما لیے جانے کی تاریخ و وقت ‎%s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"‏Photo Sphere لیے جانے کی تاریخ و وقت ‎%s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"‏لینز بلر لیے جانے کی تاریخ و وقت ‎%s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"میڈیا کارروائی کر رہا ہے"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"وضع کی فہرست ٹوگل کریں"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"وضع کی فہرست"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"فلم پٹی ٹوگل کریں"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"فلم پٹی"</string>
+    <string name="capital_on" msgid="1118214824959797269">"آن"</string>
+    <string name="capital_off" msgid="3020696135020167263">"آف"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"ویڈیو چلائیں"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"آف"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 سیکنڈ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 سیکنڈ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 سیکنڈ"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 سیکنڈ"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 سیکنڈ"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 سیکنڈز"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 منٹ"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 گھنٹہ"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 گھنٹہ"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 گھنٹے"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 گھنٹے"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"سیکنڈز"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"منٹ"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"گھنٹے"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"ہوگیا"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"وقت کا وقفہ سیٹ کریں"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"ٹائم لیپس خصوصیت آف ہے۔ وقت کا وقفہ سیٹ کرنے کیلئے اسے آن کریں۔"</string>
+    <string name="set_duration" msgid="1638453882581604341">"سیکنڈ میں دورانیہ سیٹ کریں"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"ایک تصویر لینے کیلئے الٹی گنتی گن رہا ہے"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"تصویر کے مقامات یاد رکھیں؟"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"اپنی تصاویر اور ویڈیوز کو ان مقامات کے ساتھ ٹیگ کریں، جہاں انہیں لیا گیا تھا۔\n\nدیگر ایپس آپ کی محفوظ کردہ تصاویر کے ساتھ اس معلومات تک رسائی حاصل کر سکتی ہیں۔"</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"نہیں، شکریہ"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"ہاں"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"مزید اختیارات"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"ترتیبات"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"چھوٹا سیارہ بنائیں"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"چھوٹا سیارہ محفوظ ہو رہا ہے…"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"زوم کریں"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"گھمائیں"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"تصویری ایڈیٹر"</string>
+    <string name="crop_save" msgid="2841974981340098579">"محفوظ کریں"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"تصویر لوڈ نہیں ہو سکتی ہے!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"فلم اسٹرپ کا منظر"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"وال پیپر سیٹ ہو رہا ہے"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"ترتیبات"</string>
+    <string name="mode_camera" msgid="279763925715250603">"کیمرہ"</string>
+    <string name="mode_video" msgid="8633929034048169139">"ویڈیو"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"ٹائم لیپس"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"وسیع زاویہ"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"پینوراما"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"لینز بلر"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"کیمرہ وضع پر سوئچ کریں"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"ویڈیو کیمرہ پر سوئچ کریں"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"‏Photo Sphere وضع پر سوئچ کریں"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"پینوراما وضع پر سوئچ کریں"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"لینز بلر وضع پر سوئچ کریں"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"ترتیبات کھولیں"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"ترتیبات بند کریں"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"‏HDR پلس آف ہے"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"‏HDR پلس آن ہے"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"‏HDR آف ہے"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"‏HDR آن ہے"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"فلیش آف"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"فلیش آٹو"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"فلیش آن ہے"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"‏‎HDR+‎ فلیش آف"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"‏‎HDR+‎ فلیش آٹو"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"‏‎HDR+‎ فلیش آن"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"ٹارچ آن ہے"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"ٹارچ آف ہے"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"بیک کیمرہ"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"فرنٹ کیمرہ"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"گرڈ لکیریں آف ہیں"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"گرڈ لکیریں آن ہیں"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"الٹی گنتی کا ٹائمر آف ہے"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"الٹی گنتی کے ٹائمر کا دورانیہ 3 سیکنڈ پر سیٹ کیا گیا ہے"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"الٹی گنتی کے ٹائمر کا دورانیہ 10 سیکنڈ پر سیٹ کیا گیا ہے"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"مزید اختیارات"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"منسوخ کریں"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"ہوگیا"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"دوبارہ لیں"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"اشتراک کریں"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"دیکھیں"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"ترمیم کریں"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"حذف کریں"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"مینوئل ایکسپوژر کمپنسیشن"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"‏ایکسپوژر کمپنسیشن ‎-2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"‏ایکسپوژر کمپنسیشن ‎-1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"ایکسپوژر کمپنسیشن 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"‏ایکسپوژر کمپنسیشن ‎+1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"‏ایکسپوژر کمپنسیشن ‎+2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"‏بٹن اب ‎%s ہے"</string>
+    <string name="setting_location" msgid="4459859689227893838">"مقام"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"بیک کیمرہ کی تصویر"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"بیک کیمرہ کا ویڈیو"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"فرنٹ کیمرہ کی تصویر"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"فرنٹ کیمرہ کا ویڈیو"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"ڈیفالٹ کیمرہ"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"مدد اور تاثرات"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"‏HDR+‎ پر عمل ہو رہا ہے…"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"اوپن سورس لائسنسز"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"عام ترتیبات"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"ریزولیوشن اور معیار"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"تفصیل"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"بلڈ ورژن"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"کم"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"اعلی"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"‏%1$s میگا پکسلز"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"‏‎(%1$d:%2$d) %3$s میگا پکسلز"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"دوبارہ فوکس کرنے کیلئے یہاں ٹچ کریں"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"جدید ترین"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"مینوئل ایکسپوژر"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"ترتیبات میں، ریزولیوشن اور معیار تبدیل کریں یا جدید خصوصیات آزمائیں۔"</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"تصویر کا سائز منتخب کریں"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"آپ بعد میں ترتیبات میں اسے تبدیل کر سکتے ہیں۔"</string>
+    <string name="share_to" msgid="5144911209144798122">"اس پر اشتراک کریں"</string>
+    <string name="edit_with" msgid="615569327230783971">"ترمیم کریں مع"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"اگلا"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"ٹھیک ہے، سمجھ آ گئی"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"مکمل سینسر \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"تراشیدہ سینسر \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
new file mode 100644 (file)
index 0000000..f9e5a0e
--- /dev/null
@@ -0,0 +1,368 @@
+<?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="1175086483881127797">"Kamera"</string>
+    <string name="video_camera_label" msgid="1723708322021743770">"Videokamera"</string>
+    <string name="details_ms" msgid="6618163484662724641">"%1$02d:%2$02d"</string>
+    <string name="details_hms" msgid="4842276230698703554">"%1$d:%2$02d:%3$02d"</string>
+    <string name="set_image" msgid="3969690281401045698">"Rasmni saqlash"</string>
+    <string name="delete" msgid="2714492172818940424">"O‘chirish"</string>
+    <string name="share" msgid="8581089487762243115">"Ulashish"</string>
+    <string name="share_panorama" msgid="3558466186935359444">"Panoramani ulashish"</string>
+    <string name="share_as_photo" msgid="4831213580709167218">"Rasm sifatida ulashish"</string>
+    <string name="deleted" msgid="2036165115527228127">"O‘chirildi"</string>
+    <string name="undo" msgid="5110048345890050107">"BEKOR QILISH"</string>
+    <string name="details" msgid="4404020741542549488">"Tafsilotlar"</string>
+    <string name="close" msgid="4826166926297479820">"Yopish"</string>
+    <string name="show_on_map" msgid="8542853913632649160">"Xaritada ko‘rsatish"</string>
+    <string name="rotate_left" msgid="2618440058490662604">"Chapga burish"</string>
+    <string name="rotate_right" msgid="4896096424267838355">"O‘ngga burish"</string>
+    <string name="edit" msgid="2776879395749004347">"O‘zgartirish"</string>
+    <string name="crop_action" msgid="6933589718464132714">"Qirqish"</string>
+    <string name="trim_action" msgid="4736803320203951827">"Tartiblash"</string>
+    <string name="set_as" msgid="5469055085024870081">"O‘rnatish"</string>
+    <string name="video_err" msgid="1562566029875081552">"Videoni namoyish qilib bo‘lmadi"</string>
+    <string name="title" msgid="8061744305671964703">"Sarlavha"</string>
+    <string name="description" msgid="8193138501982849808">"Ta’rifi"</string>
+    <string name="time" msgid="5248213506417024287">"Vaqt"</string>
+    <string name="location" msgid="564326205780827668">"Joylashuv"</string>
+    <string name="path" msgid="5927003361865586353">"Yo‘l"</string>
+    <string name="width" msgid="7045750687833828758">"Eniga"</string>
+    <string name="height" msgid="5186001199353423689">"Bo‘yiga"</string>
+    <string name="orientation" msgid="3883761294106680270">"Joylashuv"</string>
+    <string name="duration" msgid="5316211067383665008">"Davomiyligi"</string>
+    <string name="mimetype" msgid="6415940055077963944">"MIME turi"</string>
+    <string name="file_size" msgid="6841070748357980676">"Fayl hajmi"</string>
+    <string name="maker" msgid="698691509121545856">"Yasovchi"</string>
+    <string name="model" msgid="8547493604023069452">"Model"</string>
+    <string name="flash" msgid="995041910749174196">"Chaqnoq"</string>
+    <string name="aperture" msgid="2453802098282814022">"Apertura"</string>
+    <string name="focal_length" msgid="8351221512187346229">"Fokus masofasi"</string>
+    <string name="white_balance" msgid="1600142743496129085">"Oq rang muvozanati"</string>
+    <string name="exposure_time" msgid="949787291620767754">"Ekspoz-ya vaqti"</string>
+    <string name="iso" msgid="8578773821062054902">"ISO"</string>
+    <string name="unit_mm" msgid="5210344300697638286">"mm"</string>
+    <string name="manual" msgid="2444400953521760140">"Qo‘lbola"</string>
+    <string name="auto" msgid="2552649885114400474">"Avto"</string>
+    <string name="flash_on" msgid="6573457197393807642">"Chaqnoq yoqildi"</string>
+    <string name="flash_off" msgid="7889323512830926273">"Chaqnoqsiz"</string>
+    <string name="unknown" msgid="564184550182858146">"Noma’lum"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"Ushbu element qurilmangizga saqlangan va internetsiz ishlayveradi."</string>
+    <string name="please_wait" msgid="1416313324505140068">"Kutib turing"</string>
+    <string name="camera_error_title" msgid="6200558085072670067">"Kamerada xatolik"</string>
+    <string name="cannot_connect_camera" msgid="4311259792784598381">"Kameraga ulanib bo‘lmadi."</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"Xavfsizlik siyosati shartlariga asoslanib, Kamerangiz o\'chirib qo‘yildi."</string>
+    <string name="wait" msgid="765601745709933047">"Kutib turing…"</string>
+    <string name="no_storage" product="default" msgid="5922012950780548098">"Kamerani yoqishdan avval SD kartani joylashtiring."</string>
+    <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD karta tayyorlanmoqda..."</string>
+    <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD kartani o‘qishda xatolik yuz berdi."</string>
+    <string name="time_lapse_title" msgid="3267978566401228497">"Vaqt oralig‘ini yozib olish"</string>
+    <string name="capturing" msgid="5255164204641920893">"Suratga olinmoqda"</string>
+    <string name="pref_camera_id_title" msgid="4680648115225411185">"Kamera tanlash"</string>
+    <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"Orqaga"</string>
+    <string name="pref_camera_id_entry_front" msgid="6233067010315787044">"Oldingi"</string>
+    <string name="pref_camera_save_location_title" msgid="2344235620113384017">"Joylashuvni saqlash"</string>
+    <string name="pref_camera_location_label" msgid="8695441802378057719">"JOYLASHUV"</string>
+    <string name="pref_camera_timer_title" msgid="4728838281741571323">"Ortga sanash taymeri"</string>
+    <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Ortga sanash jarayonida signal berish"</string>
+    <string name="setting_off" msgid="6782191065550276632">"O‘chiq"</string>
+    <string name="setting_on" msgid="9086728135773197891">"Yoniq"</string>
+    <string name="pref_video_quality_title" msgid="5887153490982738588">"Video sifati"</string>
+    <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Vaqt oralig‘i"</string>
+    <string name="pref_camera_settings_category" msgid="4274141528139077830">"Kamera sozlamari"</string>
+    <string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokamera sozlamalari"</string>
+    <string name="pref_camera_picturesize_title" msgid="686045304547541815">"Rasm hajmi"</string>
+    <string name="pref_camera_picturesize_entry_large" msgid="9014447075089601575">"Katta"</string>
+    <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"O‘rtacha"</string>
+    <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"Kichik"</string>
+    <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"Fokus rejimi"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"Avto"</string>
+    <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"Abadiylik"</string>
+    <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"Makro"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"AVTO"</string>
+    <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"CHEKSIZLIK"</string>
+    <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"MAKRO"</string>
+    <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"Chaqnoq rejimi"</string>
+    <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"CHAQNOQ REJIMI"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"Avto"</string>
+    <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"Yoqilgan"</string>
+    <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"O‘chirilgan"</string>
+    <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"AVTO CHAQNOQ"</string>
+    <string name="pref_camera_flashmode_label_on" msgid="373595517770024934">"CHAQNOQ YONIQ"</string>
+    <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"CHAQNOQ O‘CHIQ"</string>
+    <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"Oq rang muvozanati"</string>
+    <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"OQ RANG MUVOZANATI"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"Avto"</string>
+    <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"Qizdirilgan"</string>
+    <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"Kunduzi"</string>
+    <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"Yaltiroq"</string>
+    <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"Bulutli"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"AVTO"</string>
+    <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"QIZDIRILGAN"</string>
+    <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"KUNDUZI"</string>
+    <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"YALTIROQ"</string>
+    <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"BULUTLI"</string>
+    <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"Sahna rejimi"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"Avto"</string>
+    <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
+    <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ YONIQ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"HDR+ O‘CHIQ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"HDR YONIQ"</string>
+    <string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"HDR O‘CHIQ"</string>
+    <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"Harakat"</string>
+    <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"Tunda"</string>
+    <string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"Quyosh botishi"</string>
+    <string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"Bazm kechasi"</string>
+    <string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"HECH QAYSI"</string>
+    <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"HARAKAT"</string>
+    <string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"TUN"</string>
+    <string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"QUYOSH BOTISHI"</string>
+    <string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"BAZM KECHASI"</string>
+    <string name="pref_camera_countdown_label_off" msgid="3986433580620011481">"TAYMER O‘CHIQ"</string>
+    <string name="pref_camera_countdown_label_one" msgid="7647972711796868848">"1 SONIYA"</string>
+    <string name="pref_camera_countdown_label_three" msgid="3154170918067103541">"3 SONIYA"</string>
+    <string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10 SONIYA"</string>
+    <string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15 SONIYA"</string>
+    <string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"Sahna rejimida tanlab bo‘lmaydi."</string>
+    <string name="pref_exposure_title" msgid="7525751789152582800">"Tasvirni tutib turish"</string>
+    <string name="pref_exposure_label" msgid="2604738602400261218">"EKSPOZITSIYA"</string>
+    <!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
+    <skip />
+    <!-- no translation found for pref_camera_hdr_plus_default (4827897029274554907) -->
+    <skip />
+    <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
+    <string name="pref_camera_id_label_back" msgid="1645608049757733858">"OLD KAMERA"</string>
+    <string name="pref_camera_id_label_front" msgid="349308803062874842">"ORQA KAMERA"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"OK"</string>
+    <string name="dialog_cancel" msgid="692365061128351656">"Bekor qilish"</string>
+    <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD kartangizda bo‘sh joy tugamoqda. Sozlamalarni o‘zgartiring yoki ba’zi rasm va boshqa fayllarni o‘chiring."</string>
+    <string name="video_reach_size_limit" msgid="9196836111505731836">"Hajm chelovigacha yetib keldi"</string>
+    <string name="pano_too_fast_prompt" msgid="2503148095578052177">"Juda tez"</string>
+    <string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"Panorama tayyorlanmoqda"</string>
+    <string name="pano_dialog_panorama_failed" msgid="6772546547048693619">"Panorama saqlanmadi."</string>
+    <string name="pano_dialog_title" msgid="6662642763395425145">"Panorama"</string>
+    <string name="pano_capture_indication" msgid="4002128831255023954">"Panorama suratga olinmoqda"</string>
+    <string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"Avvalgi panorama kutilmoqda"</string>
+    <string name="pano_review_saving_indication_str" msgid="4691771283450663293">"Saqlanmoqda…"</string>
+    <string name="pano_review_rendering" msgid="2743087719999377155">"Panorama renderlanmoqda"</string>
+    <string name="tap_to_focus" msgid="3519718196270593468">"Fokuslantirish uchun bosing."</string>
+    <string name="pref_video_effect_title" msgid="594570613431209010">"Effektlar"</string>
+    <string name="effect_none" msgid="3102797925086872636">"Hech qaysi"</string>
+    <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"Bujmaytirish"</string>
+    <string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"Katta ko‘zlar"</string>
+    <string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"Katta og‘iz"</string>
+    <string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"Kichik og‘iz"</string>
+    <string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"Katta burun"</string>
+    <string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"Kichik ko‘zlar"</string>
+    <string name="effect_backdropper_space" msgid="9133825395915767627">"Fazoda"</string>
+    <string name="effect_backdropper_sunset" msgid="7354053769863638757">"Quyosh botishi"</string>
+    <string name="effect_backdropper_gallery" msgid="2333888391153564920">"Videongiz"</string>
+    <string name="video_snapshot_hint" msgid="2707403607250082339">"Video yozib olinayotganda bosib suratga oling."</string>
+    <string name="video_recording_started" msgid="3374878415050991030">"Video yozib olish ishga tushirildi."</string>
+    <string name="video_recording_stopped" msgid="4658626532857624974">"Video yozib olish to‘xtatildi."</string>
+    <string name="clear_effects" msgid="6192797848995967992">"Effektlarni tozalash"</string>
+    <string name="effect_silly_faces" msgid="7952713419757286453">"AXMOQONA YUZLAR"</string>
+    <string name="effect_background" msgid="1358432220077975015">"ORQA FON"</string>
+    <string name="accessibility_shutter_button" msgid="6040483605347230438">"Suratga olish"</string>
+    <string name="accessibility_cancel_button" msgid="5679989494636116448">"Bekor qilish"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"Menyu tugmasi"</string>
+    <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s belgilanish"</string>
+    <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"Rasmga o‘tish"</string>
+    <string name="accessibility_switch_to_video" msgid="8174781871592793967">"Videoga o‘tish"</string>
+    <string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"Panorama rejimiga o‘tish"</string>
+    <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"Panoramaga o‘tish"</string>
+    <string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"Yuqori sifatli rejimga o‘tish"</string>
+    <string name="accessibility_switch_to_refocus" msgid="6796169367953860106">"Qayta fokuslashga o‘tish"</string>
+    <string name="accessibility_review_cancel" msgid="5462850829869569629">"Ko‘rib chiqishni bekor qilish"</string>
+    <string name="accessibility_review_ok" msgid="3486465319880320270">"Ko‘rib chiqish bajarildi"</string>
+    <string name="accessibility_review_retake" msgid="2547112860787022130">"Qayta ko‘rishda qayta suratga olish"</string>
+    <string name="accessibility_mode_options" msgid="6376831760155403217">"Sozlamalar"</string>
+    <string name="accessibility_mode_list_hidden" msgid="3743267380450401866">"Rejimlar ro‘yxati yopiq"</string>
+    <string name="accessibility_mode_list_shown" msgid="5284322142734069179">"Rejimlar ro‘yxati ochiq"</string>
+    <string name="media_accessibility_peek" msgid="234540330161031946">"Surat olindi"</string>
+    <string name="photo_accessibility_peek" msgid="5934133371001677250">"Rasm olindi"</string>
+    <string name="video_accessibility_peek" msgid="7845916149291383132">"Video olindi"</string>
+    <string name="accessibility_unlock_to_camera" msgid="1251880974313179442">"Kamerani ishga tushirish"</string>
+    <string name="media_date_content_description" msgid="2155634843596817141">"Tasvirga olingan sana: %s"</string>
+    <string name="photo_date_content_description" msgid="5705865897898465619">"Rasm olingan sana: %s"</string>
+    <string name="video_date_content_description" msgid="2151884014634284456">"Video tasvirga olingan sana: %s"</string>
+    <string name="panorama_date_content_description" msgid="990703578639006144">"Panorama olingan sana: %s"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"Sharsimon rasm olingan sana: %s"</string>
+    <string name="refocus_date_content_description" msgid="5630960320424345547">"Fokuslangan rasm olingan sana: %s"</string>
+    <string name="media_processing_content_description" msgid="8138587719107183754">"Fayl qayta ishlanmoqda…"</string>
+    <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"Suratga olish rejimlarini ko‘rsatish yoki yashirish"</string>
+    <string name="btn_mode_list_toggle" msgid="3986242443098400164">"Rejimlar ro‘yxati"</string>
+    <string name="accessibility_filmstrip_toggle" msgid="6966978483643396442">"Lentani ko‘rsatish yoki yashirish"</string>
+    <string name="btn_filmstrip_toggle" msgid="3666693972882351490">"Lenta"</string>
+    <string name="capital_on" msgid="1118214824959797269">"YONIQ"</string>
+    <string name="capital_off" msgid="3020696135020167263">"O‘CHIQ"</string>
+    <string name="video_control_play" msgid="6895236811408921715">"Videoni ijro etish"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3909611941842585497">"O‘chirilgan"</string>
+    <string name="pref_video_time_lapse_frame_interval_500" msgid="1425296755074319221">"0.5 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_1000" msgid="9126255690984179200">"1 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_1500" msgid="5793250074165436905">"1.5 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_2000" msgid="1821755013078449188">"2 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_2500" msgid="8027471301321122045">"2.5 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_3000" msgid="1411114492405867872">"3 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_4000" msgid="1197483421014140132">"4 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_5000" msgid="7211885329755347592">"5 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_6000" msgid="6665825017557898190">"6 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_10000" msgid="1126841483618922521">"10 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_12000" msgid="8769265988037327085">"12 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_15000" msgid="1452711342185926617">"15 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_24000" msgid="2505505645705111419">"24 soniya"</string>
+    <string name="pref_video_time_lapse_frame_interval_30000" msgid="3965378176246680626">"0.5 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_60000" msgid="1878467100201983878">"1 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_90000" msgid="496651530019049822">"1.5 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_120000" msgid="126293364329503816">"2 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_150000" msgid="3469164780802564276">"2.5 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_180000" msgid="6840421790710639463">"3 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_240000" msgid="1682865866425206481">"4 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_300000" msgid="6068734332915957652">"5 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_360000" msgid="4692565393277579688">"6 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_600000" msgid="7109530398883649472">"10 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_720000" msgid="259321148909130247">"12 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_900000" msgid="6814816608134052996">"15 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_1440000" msgid="5691479246748705053">"24 daqiqa"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="8331728629455012478">"0.5 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_3600000" msgid="4829442147263610121">"1 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_5400000" msgid="7011488725038113884">"1.5 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="7399563587870916008">"2 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="1545856778907835970">"2.5 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="4064231412857457518">"3 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="5174457951350690217">"4 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="5091441456160949740">"5 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="6924571987775154098">"6 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="6959912631566981301">"10 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="6426833030111269499">"12 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="6688725497680331090">"15 soat"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="5510320806095156153">"24 soat"</string>
+    <string name="time_lapse_seconds" msgid="7319683099532506270">"soniya"</string>
+    <string name="time_lapse_minutes" msgid="5325447383033224679">"daqiqa"</string>
+    <string name="time_lapse_hours" msgid="5294001144133261436">"soat"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Tayyor"</string>
+    <string name="set_time_interval" msgid="2531393962847535331">"Vaqt oralig‘ini o‘rnatish"</string>
+    <string name="set_time_interval_help" msgid="64145154088021389">"Vaqt oralig‘i imkoniyati o‘chiq. Yoqish uchun oraliq vaqtini belgilang."</string>
+    <string name="set_duration" msgid="1638453882581604341">"Davomiylikni soniyalarda belgilang"</string>
+    <string name="count_down_title_text" msgid="7586031110595513050">"Rasm suratga olish uchun ortga sanalmoqda"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"Rasm manzillari saqlab qolinsinmi?"</string>
+    <string name="remember_location_prompt" msgid="5104210757873140169">"Rasmlar va videolaringizning olingan joylarini teglar bilan belgilang.\n\nBoshqa ilovalar ushbu ma’lumotlarni ko‘rib chiqish imkoniyatiga ega bo‘ladi."</string>
+    <string name="remember_location_no" msgid="4412802756840226925">"Yo‘q, kerak emas"</string>
+    <string name="remember_location_yes" msgid="4339424460683531388">"Ha"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"QO‘SHIMCHA MOSLAMALAR"</string>
+    <string name="camera_menu_settings_label" msgid="3862756725328016822">"Sozlamalar"</string>
+    <string name="create_tiny_planet" msgid="5186918191372107343">"Kichik sayyora yaratish"</string>
+    <string name="saving_tiny_planet" msgid="8828265180177375494">"Kichik sayyora saqlanmoqda …"</string>
+    <string name="tiny_planet_zoom" msgid="2985522360577158474">"Kattalashtirish"</string>
+    <string name="tiny_planet_rotate" msgid="5445336705705350004">"Burish"</string>
+    <string name="photo_editor" msgid="1521994560971367225">"Rasm tahrirchisi"</string>
+    <string name="crop_save" msgid="2841974981340098579">"Saqlash"</string>
+    <string name="cannot_load_image" msgid="4100136187076585580">"Rasmni yuklashda xatolik!"</string>
+    <string name="switch_photo_filmstrip" msgid="1448511001008888767">"Diafilm ko‘rinishi"</string>
+    <string name="setting_wallpaper" msgid="2397759659347872725">"Orqa fonga o‘rnatilmoqda"</string>
+    <string name="mode_settings" msgid="2021937261522670921">"Sozlamalar"</string>
+    <string name="mode_camera" msgid="279763925715250603">"Kamera"</string>
+    <string name="mode_video" msgid="8633929034048169139">"Video"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Panorama"</string>
+    <string name="mode_timelapse" msgid="1517168724627815453">"Sekinlashtirish vaqti"</string>
+    <string name="mode_wideangle" msgid="1099640345041696830">"Keng burchakli"</string>
+    <string name="mode_panorama" msgid="6882648621305828861">"Panorama"</string>
+    <string name="mode_refocus" msgid="172192967119469061">"Xiralashtirish effekti"</string>
+    <string name="mode_camera_desc" msgid="3670807361165657278">"Kamera rejimini o‘zgartirish"</string>
+    <string name="mode_video_desc" msgid="4058407412929464689">"Video kamerani yoqish/o‘chirish"</string>
+    <string name="mode_photosphere_desc" msgid="2403816283825579161">"Panorama rejimiga o‘tish"</string>
+    <string name="mode_panorama_desc" msgid="6023020404237519590">"Panorama rejimiga o‘tish"</string>
+    <string name="mode_refocus_desc" msgid="6171183297515508465">"Tasvirni xiralashtirib rasmga olish"</string>
+    <string name="settings_open_desc" msgid="6914471293841793766">"Sozlamalarni ochish"</string>
+    <string name="settings_close_desc" msgid="3095831199632813127">"Sozlamalarni yopish"</string>
+    <string name="hdr_plus_off_desc" msgid="5301287296717144319">"HDR plus o‘chiq"</string>
+    <string name="hdr_plus_on_desc" msgid="8204780034508139909">"HDR Plus yoniq"</string>
+    <string name="hdr_off_desc" msgid="7921924739852874675">"HDR o‘chiq"</string>
+    <string name="hdr_on_desc" msgid="4591284110249047558">"HDR yoniq"</string>
+    <string name="flash_off_desc" msgid="7151559466286106797">"Chaqnoq o‘chiq"</string>
+    <string name="flash_auto_desc" msgid="3009043125539675717">"Avto chaqnoq"</string>
+    <string name="flash_on_desc" msgid="930372145324854699">"Chaqnoq yoniq"</string>
+    <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ chaqnoq o‘chirilgan"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ avto-chaqnoq"</string>
+    <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ chaqnoq yoqilgan"</string>
+    <string name="torch_on_desc" msgid="3069836196559213365">"Chiroq yoniq"</string>
+    <string name="torch_off_desc" msgid="8304675202998742618">"Chiroq o‘chiq"</string>
+    <string name="camera_id_back_desc" msgid="3566327490758890635">"Orqa kamera"</string>
+    <string name="camera_id_front_desc" msgid="7497517948130254220">"Old kamera"</string>
+    <string name="grid_lines_off_desc" msgid="2022385817190451353">"Katakchalarda ko‘rish o‘chiq"</string>
+    <string name="grid_lines_on_desc" msgid="4601540461914364817">"Katakchalarda ko‘rish yoniq"</string>
+    <string name="countdown_timer_off" msgid="1663008439564495948">"Ortga qarab sanovchi taymer o‘chirilgan"</string>
+    <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"Ortga qarab sanovchi taymer 3 soniyaga o‘rnatildi"</string>
+    <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"Ortga qarab sanovchi taymer 10 soniyaga o‘rnatildi"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"Ko‘proq sozlamalar"</string>
+    <string name="cancel_button_description" msgid="3801167024006905033">"Bekor qilish"</string>
+    <string name="done_button_description" msgid="1334963435441544592">"Tayyor"</string>
+    <string name="retake_button_description" msgid="4234613030674787714">"Qaytadan olish"</string>
+    <string name="share_button_description" msgid="5108508790540832053">"Ulashish"</string>
+    <string name="view_button_description" msgid="4985768837891362075">"Ko‘rinish"</string>
+    <string name="edit_button_description" msgid="98550816724901925">"O‘zgartirish"</string>
+    <string name="delete_button_description" msgid="2251065309677200911">"O‘chirish"</string>
+    <string name="manual_exposure_compensation_desc" msgid="5595219532556566042">"Qo‘lda ekspokorreksiya qilish"</string>
+    <string name="exposure_compensation_desc_n2" msgid="8957966533506294324">"Ekspokorreksiya -2"</string>
+    <string name="exposure_compensation_desc_n1" msgid="3035027224866688267">"Ekspokorreksiya -1"</string>
+    <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"Ekspokorreksiya 0"</string>
+    <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"Ekspokorreksiya +1"</string>
+    <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"Ekspokorreksiya +2"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"Joriy tugma - %s"</string>
+    <string name="setting_location" msgid="4459859689227893838">"Joylashuv"</string>
+    <string name="setting_back_camera_photo" msgid="256738900473265017">"Asosiy kamera: rasm"</string>
+    <string name="setting_back_camera_video" msgid="5220819479408164689">"Asosiy kamera: video"</string>
+    <string name="setting_front_camera_photo" msgid="4131886734622868637">"Old kamera: rasm"</string>
+    <string name="setting_front_camera_video" msgid="2178799452805359752">"Old kamera: video"</string>
+    <string name="setting_default_camera" msgid="6954076799301004779">"Standart kamera"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Yordam va fikr-mulohaza"</string>
+    <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ bajarilmoqda …"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Ochiq kodli DT litsenziyalari"</string>
+    <string name="pref_category_general" msgid="6737748849700581019">"Umumiy sozlamalar"</string>
+    <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Sig‘im va sifat"</string>
+    <string name="pref_category_about" msgid="1966255405679342337">"Ilova haqida"</string>
+    <string name="pref_title_build_version" msgid="481489988124832651">"Ishlab chiqilgan versiyasi"</string>
+    <string name="pref_video_quality_entry_low" msgid="737962621299050603">"Past"</string>
+    <string name="pref_video_quality_entry_high" msgid="1613578418842803393">"Baland"</string>
+    <string name="pref_video_quality_entry_qcif" msgid="1717816794399266216">"QCIF"</string>
+    <string name="pref_video_quality_entry_cif" msgid="645414019445016434">"CIF"</string>
+    <string name="pref_video_quality_entry_480p" msgid="5880250731066854583">"SD 480p"</string>
+    <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
+    <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
+    <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
+    <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapiksel"</string>
+    <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapiksel"</string>
+    <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Qayta fokuslash uchun bu yerga bosing"</string>
+    <string name="pref_category_advanced" msgid="5921085080077574872">"Qo‘shimcha"</string>
+    <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"Qo‘lda ekspozitsiya"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"Sozlamalardan rasm sig‘imi va sifatini o‘zgartiring yoki qo‘shimcha funksiyalarni sinab ko‘ring."</string>
+    <string name="photo_size_selection_title" msgid="2789753590719172645">"Rasm o‘lchamini tanlash"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"Buni keyinroq sozlamalardan o‘zgartirishingiz mumkin."</string>
+    <string name="share_to" msgid="5144911209144798122">"Ulashish"</string>
+    <string name="edit_with" msgid="615569327230783971">"Tahrirlash…"</string>
+    <string name="startup_dialog_button_next" msgid="1011831256978228993">"KEYINGI"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"OK, TUSHUNARLI"</string>
+    <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"To‘liq kadr \n(4:3)"</string>
+    <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Kadrlarga ajratish \n(16:9)"</string>
+    <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
+    <string name="pref_boolean_true" msgid="4131945223998878009">"1"</string>
+</resources>
index 6bfcc9e..dd385ae 100644 (file)
         <item name="android:backgroundStacked">@null</item>
     </style>
 
-    <style name="Theme.CameraSettings" parent="@android:style/Theme.Material">
-       <item name="android:windowFullscreen">true</item>
+    <style name="Theme.CameraSettings" parent="@android:style/Theme.Material.Light.DarkActionBar">
+        <item name="android:windowFullscreen">true</item>
+        <item name="android:colorPrimary">@color/main_color_global</item>
+    </style>
+
+    <style name="FilmstripBottomControlButton">
+        <item name="android:layout_width">@dimen/filmstrip_bottom_control_button_size</item>
+        <item name="android:layout_height">@dimen/filmstrip_bottom_control_button_size</item>
+        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
+        <item name="android:scaleType">centerInside</item>
+        <item name="android:layout_gravity">center_vertical</item>
     </style>
 </resources>
index e33aa24..9e0706d 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s megapixel"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s megapixel"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Để lấy nét lại, chạm vào đây"</string>
index 18c5e8f..9277cf3 100644 (file)
@@ -66,7 +66,7 @@
     <string name="please_wait" msgid="1416313324505140068">"请稍候"</string>
     <string name="camera_error_title" msgid="6200558085072670067">"相机发生错误"</string>
     <string name="cannot_connect_camera" msgid="4311259792784598381">"无法连接到相机。"</string>
-    <string name="camera_disabled" msgid="6963443549010040595">"由于安全政策的限制,相机已被禁用。"</string>
+    <string name="camera_disabled" msgid="6963443549010040595">"由于安全规范的限制,相机已被禁用。"</string>
     <string name="wait" msgid="765601745709933047">"请稍候…"</string>
     <string name="no_storage" product="default" msgid="5922012950780548098">"使用相机前请先插入SD卡。"</string>
     <string name="preparing_sd" product="default" msgid="7435693655017362767">"正在准备SD卡…"</string>
     <string name="set_time_interval_help" msgid="64145154088021389">"延时拍摄功能已关闭,要设置时间间隔,请先开启该功能。"</string>
     <string name="set_duration" msgid="1638453882581604341">"设置倒数时间(秒)"</string>
     <string name="count_down_title_text" msgid="7586031110595513050">"拍照倒计时中"</string>
-    <string name="remember_location_title" msgid="3045040613094030429">"是否记住照片拍摄地点?"</string>
+    <string name="remember_location_title" msgid="3045040613094030429">"要记住照片拍摄地点吗?"</string>
     <string name="remember_location_prompt" msgid="5104210757873140169">"为您的照片和视频标明拍摄地点。\n\n其他应用在查看您拍摄的照片时将可以使用这些信息。"</string>
     <string name="remember_location_no" msgid="4412802756840226925">"不用了"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"好"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"高清720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"高清1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$sM像素"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s百万像素"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"要重新聚焦,请触摸此处"</string>
     <string name="pref_category_advanced" msgid="5921085080077574872">"高级"</string>
     <string name="pref_camera_exposure_compensation" msgid="4143245817259719147">"手动曝光"</string>
-    <string name="settings_cling_text" msgid="5368054627268181292">"在“设置”中,您可以更改分辨率和画质,也可以尝试使用高级功能。"</string>
+    <string name="settings_cling_text" msgid="5368054627268181292">"在“设置”中,您可以更改分辨率和画质,并尝试开启高级功能。"</string>
     <string name="photo_size_selection_title" msgid="2789753590719172645">"选择照片尺寸"</string>
-    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"以后,您可以在“设置”中更改此设置。"</string>
+    <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"以后,您可以在“设置”中更改照片尺寸。"</string>
     <string name="share_to" msgid="5144911209144798122">"分享到"</string>
     <string name="edit_with" msgid="615569327230783971">"编辑方式"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"下一页"</string>
index 12716ee..1da94e6 100644 (file)
     <string name="mode_settings" msgid="2021937261522670921">"設定"</string>
     <string name="mode_camera" msgid="279763925715250603">"相機"</string>
     <string name="mode_video" msgid="8633929034048169139">"影片"</string>
-    <string name="mode_photosphere" msgid="5082338476237291833">"拍攝 Photo Sphere 全景相片"</string>
+    <string name="mode_photosphere" msgid="5082338476237291833">"Photo Sphere"</string>
     <string name="mode_timelapse" msgid="1517168724627815453">"延時攝影"</string>
     <string name="mode_wideangle" msgid="1099640345041696830">"廣角"</string>
     <string name="mode_panorama" msgid="6882648621305828861">"全景相片"</string>
     <string name="setting_front_camera_photo" msgid="4131886734622868637">"前置鏡頭相片"</string>
     <string name="setting_front_camera_video" msgid="2178799452805359752">"前置鏡頭影片"</string>
     <string name="setting_default_camera" msgid="6954076799301004779">"預設相機"</string>
-    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"說明意見反映"</string>
+    <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"說明意見反映"</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"正在處理 HDR+ …"</string>
     <string name="open_source_licenses" msgid="2169711954264883060">"開放原始碼授權"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"一般設定"</string>
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"高清畫質 (720p)"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"高清畫質 (1080p)"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K 解析度"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s 百萬像素"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s 百萬像素"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"如要重新對焦,請輕觸這裡"</string>
     <string name="settings_cling_text" msgid="5368054627268181292">"您可以在 [設定] 中變更解像度和畫質,或嘗試使用進階功能。"</string>
     <string name="photo_size_selection_title" msgid="2789753590719172645">"選擇相片尺寸"</string>
     <string name="photo_aspect_ratio_selection_content" msgid="6668224437962196229">"您可以稍後在 [設定] 中變更這項設定。"</string>
-    <string name="share_to" msgid="5144911209144798122">"å\9c¨ä»¥ä¸\8bé\81¸æ\93\87å\99¨å\88\86享ï¼\9a"</string>
+    <string name="share_to" msgid="5144911209144798122">"分享:"</string>
     <string name="edit_with" msgid="615569327230783971">"使用以下選擇器編輯:"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"下一頁"</string>
     <string name="confirm_button_text" msgid="7389949384482206814">"好,我明白了"</string>
index 494e1a1..92b3327 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"HD 高畫質 (720p)"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"HD 高畫質 (1080p)"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$sM 像素"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$sM 像素"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"如要重新對焦,請輕觸這裡"</string>
index 3403abf..3659f7e 100644 (file)
     <string name="pref_video_quality_entry_720p" msgid="4076146428148167262">"I-HD 720p"</string>
     <string name="pref_video_quality_entry_1080p" msgid="4539958891524211120">"I-HD 1080p"</string>
     <string name="pref_video_quality_entry_qvga" msgid="342600517453781430">"I-QVGA"</string>
+    <string name="pref_video_quality_entry_2160p" msgid="4522927631413184505">"UHD 4K"</string>
     <string name="setting_summary_x_megapixels" msgid="6533463462760866830">"%1$s amamega phikiseli"</string>
     <string name="setting_summary_aspect_ratio_and_megapixels" msgid="5828440902461064821">"(%1$d:%2$d) %3$s amamegaphikiseli"</string>
     <string name="cling_text_for_refocus_editor_button" msgid="4785017397116829802">"Ukuze ubheke kabusha, thinta lapha"</string>
index a8cda78..37a5c7e 100644 (file)
         <item>@drawable/ic_camera_blanket</item>
         <item>@drawable/ic_video_blanket</item>
         <item>@drawable/ic_refocus_blanket</item>
-        <item>@drawable/ic_photo_sphere_blanket</item>
+        <item>@drawable/ic_photosphere_blanket</item>
         <item>@drawable/ic_pano_blanket</item>
         <item>@drawable/ic_camera_blanket</item>
         <item>@drawable/ic_camera_blanket</item>
         <item>@drawable/ic_camera_normal</item>
         <item>@drawable/ic_video_normal</item>
         <item>@drawable/ic_refocus_normal</item>
-        <item>@drawable/ic_photo_sphere_normal</item>
+        <item>@drawable/ic_photosphere_normal</item>
         <item>@drawable/ic_panorama_normal</item>
         <item>@drawable/ic_camera_normal</item>
     </array>
 
     <array name="camera_mode_shutter_icon">
-        <item>@drawable/ic_camera</item>
-        <item>@drawable/ic_video</item>
-        <item>@drawable/ic_refocus</item>
+        <item>@drawable/ic_capture_camera</item>
+        <item>@drawable/ic_capture_video</item>
+        <item>@drawable/ic_capture_refocus</item>
         <item>@null</item>
-        <item>@drawable/ic_panorama</item>
-        <item>@drawable/ic_camera</item>
+        <item>@drawable/ic_capture_panorama</item>
+        <item>@drawable/ic_capture_camera</item>
     </array>
 
     <!-- These must correspond in order to the entries in CameraProfile. -->
index bcb30de..464842a 100644 (file)
@@ -15,5 +15,4 @@
 -->
 <resources>
     <bool name="show_action_bar_title">false</bool>
-    <bool name="is_os_version_l">false</bool>
 </resources>
\ No newline at end of file
index a8ee96b..2eee2ac 100644 (file)
     <color name="holo_blue_light">#ff33b5e5</color>
     <color name="bright_foreground_disabled_holo_dark">#ff4c4c4c</color>
     <color name="bright_foreground_holo_dark">#fff3f3f3</color>
-    <color name="face_detect_start">#80ffffff</color>
-    <color name="face_detect_success">#8050d060</color>
-    <color name="face_detect_fail">#80d05060</color>
+    <color name="face_detect_start">#ffffff00</color>
+    <color name="focus_debug">#90ffffff</color>
+    <color name="focus_debug_text">#b0ffffff</color>
+    <color name="focus_debug_success">#9000ff00</color>
+    <color name="focus_debug_fail">#90ff0000</color>
     <color name="gray">#FFAAAAAA</color>
 
     <!-- Camera mode switcher -->
     <color name="mode_list_settings_icon_background">#26000000</color>
     <color name="mode_list_settings_icon_pressed_background">#99000000</color>
 
-    <color name="camera_mode_color">#2979ff</color>
-    <color name="video_mode_color">#dd2c00</color>
-    <color name="refocus_mode_color">#00c853</color>
-    <color name="photosphere_mode_color">#aa00ff</color>
-    <color name="panorama_mode_color">#ffbc00</color>
+    <color name="camera_mode_color">#4285f4</color>
+    <color name="video_mode_color">#db4437</color>
+    <color name="refocus_mode_color">#0f9d58</color>
+    <color name="photosphere_mode_color">#ab47bc</color>
+    <color name="panorama_mode_color">#ff9e00</color>
     <color name="mode_cover_default_color">#191919</color>
+    <color name="main_color_global">#00acc1</color>
 
     <color name="bottombar_unpressed">#191919</color>
     <color name="bottombar_pressed">#262626</color>
 
     <color name="grid_line">#33FFFFFF</color>
     <color name="focus_outer_ring_color">#4CFFFFFF</color>
-    <color name="fullscreen_dialog_background_color">#F5F5F5</color>
+    <color name="fullscreen_dialog_background_color">@color/main_color_global</color>
     <color name="dialog_button_color">#FF76A7F9</color>
-    <color name="dialog_text_color">#6D6D6D</color>
+    <color name="dialog_text_color">@android:color/black</color>
 
     <color name="settings_cling_color">#2962FF</color>
 
     <color name="mode_icon_hover_highlight">#2DFFFFFF</color>
+    
+    <color name="blue_button_text_color">#00838F</color>
 </resources>
index 31e8550..2dd796c 100644 (file)
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="hint_y_offset">64dp</dimen>
     <dimen name="pano_mosaic_surface_height">240dp</dimen>
     <dimen name="pano_review_button_width">70dp</dimen>
     <dimen name="pano_review_button_height">45dp</dimen>
@@ -92,7 +91,8 @@
     <dimen name="focus_outer_stroke">3dp</dimen>
     <dimen name="focus_inner_stroke">2dp</dimen>
     <dimen name="switcher_size">72dp</dimen>
-    <dimen name="face_circle_stroke">2dip</dimen>
+    <dimen name="face_circle_stroke">1dip</dimen>
+    <dimen name="focus_debug_stroke">1dip</dimen>
     <dimen name="shutter_offset">-22dp</dimen>
     <dimen name="size_thumbnail">200dip</dimen>
     <dimen name="size_preview">400dip</dimen>
     <dimen name="camera_controls_padding_start">36dp</dimen>
     <dimen name="camera_controls_padding_end">36dp</dimen>
 
-    <dimen name="mode_transition_view_icon_size">144dp</dimen>
+    <dimen name="mode_transition_view_icon_size">64dp</dimen>
     <dimen name="flash_circle_size_after_shrink">36dp</dimen>
 
     <dimen name="mode_options_height">72dp</dimen>
index fd6baea..7c0f7ca 100644 (file)
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+<resources>
     <!-- Camera resources below -->
     <style name="Theme.ProxyLauncher" parent="@android:Theme.Translucent.NoTitleBar">
     </style>
       <item name="android:layout_margin">6dp</item>
       <item name="android:background">@null</item>
     </style>
-    <style name="Theme.CameraSettings" parent="@android:style/Theme.Holo">
+    <style name="Theme.CameraSettings" parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="android:windowFullscreen">true</item>
+       <item name="android:actionBarStyle">@style/Settings.ActionBar</item>
     </style>
+    <style name="Settings.ActionBar" parent="android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
+        <item name="android:background">@color/main_color_global</item>
+    </style>
+
     <style name="start_up_dialog_content">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">match_parent</item>
     </style>
+    <style name="fullscreen_dialog_title">
+        <item name="android:textSize">24sp</item>
+        <item name="android:fontFamily">sans-serif-regular</item>
+        <item name="android:textColor">@color/dialog_text_color</item>
+    </style>
     <style name="BlueButton">
         <item name="android:layout_width">144dp</item>
         <item name="android:layout_height">48dp</item>
         <item name="android:background">@drawable/button_cling</item>
-        <item name="android:fontFamily">sans-serif-regular</item>
-        <item name="android:textColor">@android:color/white</item>
         <item name="android:textSize">14sp</item>
+        <item name="android:fontFamily">sans-serif-medium</item>
+        <item name="android:textColor">@color/blue_button_text_color</item>
         <item name="android:padding">12dp</item>
     </style>
 </resources>
diff --git a/res_p/drawable-hdpi/ic_camera_blanket.png b/res_p/drawable-hdpi/ic_camera_blanket.png
deleted file mode 100644 (file)
index 29d9556..0000000
Binary files a/res_p/drawable-hdpi/ic_camera_blanket.png and /dev/null differ
diff --git a/res_p/drawable-hdpi/ic_camera_normal.png b/res_p/drawable-hdpi/ic_camera_normal.png
deleted file mode 100644 (file)
index ecafe13..0000000
Binary files a/res_p/drawable-hdpi/ic_camera_normal.png and /dev/null differ
index eecd5cb..3a9fc7b 100644 (file)
Binary files a/res_p/drawable-hdpi/ic_pano_blanket.png and b/res_p/drawable-hdpi/ic_pano_blanket.png differ
diff --git a/res_p/drawable-hdpi/ic_panorama_disabled.png b/res_p/drawable-hdpi/ic_panorama_disabled.png
new file mode 100644 (file)
index 0000000..59e6048
Binary files /dev/null and b/res_p/drawable-hdpi/ic_panorama_disabled.png differ
diff --git a/res_p/drawable-hdpi/ic_photo_sphere_blanket.png b/res_p/drawable-hdpi/ic_photo_sphere_blanket.png
deleted file mode 100644 (file)
index c667cc6..0000000
Binary files a/res_p/drawable-hdpi/ic_photo_sphere_blanket.png and /dev/null differ
diff --git a/res_p/drawable-hdpi/ic_photosphere_blanket.png b/res_p/drawable-hdpi/ic_photosphere_blanket.png
new file mode 100644 (file)
index 0000000..8912ca0
Binary files /dev/null and b/res_p/drawable-hdpi/ic_photosphere_blanket.png differ
diff --git a/res_p/drawable-hdpi/ic_photosphere_normal.png b/res_p/drawable-hdpi/ic_photosphere_normal.png
new file mode 100644 (file)
index 0000000..64cff42
Binary files /dev/null and b/res_p/drawable-hdpi/ic_photosphere_normal.png differ
index b260afe..81a2707 100644 (file)
Binary files a/res_p/drawable-hdpi/ic_refocus_blanket.png and b/res_p/drawable-hdpi/ic_refocus_blanket.png differ
diff --git a/res_p/drawable-hdpi/ic_refocus_disabled.png b/res_p/drawable-hdpi/ic_refocus_disabled.png
new file mode 100644 (file)
index 0000000..59268ad
Binary files /dev/null and b/res_p/drawable-hdpi/ic_refocus_disabled.png differ
diff --git a/res_p/drawable-hdpi/ic_video_blanket.png b/res_p/drawable-hdpi/ic_video_blanket.png
deleted file mode 100644 (file)
index 7c6ad3e..0000000
Binary files a/res_p/drawable-hdpi/ic_video_blanket.png and /dev/null differ
diff --git a/res_p/drawable-hdpi/ic_video_disabled.png b/res_p/drawable-hdpi/ic_video_disabled.png
deleted file mode 100644 (file)
index 093fb8c..0000000
Binary files a/res_p/drawable-hdpi/ic_video_disabled.png and /dev/null differ
diff --git a/res_p/drawable-hdpi/ic_video_normal.png b/res_p/drawable-hdpi/ic_video_normal.png
deleted file mode 100644 (file)
index 90d9adf..0000000
Binary files a/res_p/drawable-hdpi/ic_video_normal.png and /dev/null differ
diff --git a/res_p/drawable-mdpi/ic_camera_blanket.png b/res_p/drawable-mdpi/ic_camera_blanket.png
deleted file mode 100644 (file)
index bcf041f..0000000
Binary files a/res_p/drawable-mdpi/ic_camera_blanket.png and /dev/null differ
diff --git a/res_p/drawable-mdpi/ic_camera_normal.png b/res_p/drawable-mdpi/ic_camera_normal.png
deleted file mode 100644 (file)
index c6034c9..0000000
Binary files a/res_p/drawable-mdpi/ic_camera_normal.png and /dev/null differ
index 42c0c37..b48b1a3 100644 (file)
Binary files a/res_p/drawable-mdpi/ic_pano_blanket.png and b/res_p/drawable-mdpi/ic_pano_blanket.png differ
diff --git a/res_p/drawable-mdpi/ic_panorama_disabled.png b/res_p/drawable-mdpi/ic_panorama_disabled.png
new file mode 100644 (file)
index 0000000..ea318a3
Binary files /dev/null and b/res_p/drawable-mdpi/ic_panorama_disabled.png differ
diff --git a/res_p/drawable-mdpi/ic_photo_sphere_blanket.png b/res_p/drawable-mdpi/ic_photo_sphere_blanket.png
deleted file mode 100644 (file)
index 1db0e49..0000000
Binary files a/res_p/drawable-mdpi/ic_photo_sphere_blanket.png and /dev/null differ
diff --git a/res_p/drawable-mdpi/ic_photosphere_blanket.png b/res_p/drawable-mdpi/ic_photosphere_blanket.png
new file mode 100644 (file)
index 0000000..19fba8d
Binary files /dev/null and b/res_p/drawable-mdpi/ic_photosphere_blanket.png differ
diff --git a/res_p/drawable-mdpi/ic_photosphere_normal.png b/res_p/drawable-mdpi/ic_photosphere_normal.png
new file mode 100644 (file)
index 0000000..9278222
Binary files /dev/null and b/res_p/drawable-mdpi/ic_photosphere_normal.png differ
index 8cfaa2c..303f081 100644 (file)
Binary files a/res_p/drawable-mdpi/ic_refocus_blanket.png and b/res_p/drawable-mdpi/ic_refocus_blanket.png differ
diff --git a/res_p/drawable-mdpi/ic_refocus_disabled.png b/res_p/drawable-mdpi/ic_refocus_disabled.png
new file mode 100644 (file)
index 0000000..11feacf
Binary files /dev/null and b/res_p/drawable-mdpi/ic_refocus_disabled.png differ
diff --git a/res_p/drawable-mdpi/ic_video_blanket.png b/res_p/drawable-mdpi/ic_video_blanket.png
deleted file mode 100644 (file)
index 0b331b7..0000000
Binary files a/res_p/drawable-mdpi/ic_video_blanket.png and /dev/null differ
diff --git a/res_p/drawable-mdpi/ic_video_disabled.png b/res_p/drawable-mdpi/ic_video_disabled.png
deleted file mode 100644 (file)
index 5efcf0b..0000000
Binary files a/res_p/drawable-mdpi/ic_video_disabled.png and /dev/null differ
diff --git a/res_p/drawable-mdpi/ic_video_normal.png b/res_p/drawable-mdpi/ic_video_normal.png
deleted file mode 100644 (file)
index c8a2dd1..0000000
Binary files a/res_p/drawable-mdpi/ic_video_normal.png and /dev/null differ
diff --git a/res_p/drawable-xhdpi/ic_camera_blanket.png b/res_p/drawable-xhdpi/ic_camera_blanket.png
deleted file mode 100644 (file)
index 043d9d0..0000000
Binary files a/res_p/drawable-xhdpi/ic_camera_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xhdpi/ic_camera_normal.png b/res_p/drawable-xhdpi/ic_camera_normal.png
deleted file mode 100644 (file)
index db7ad43..0000000
Binary files a/res_p/drawable-xhdpi/ic_camera_normal.png and /dev/null differ
index 9f313e2..f69d872 100644 (file)
Binary files a/res_p/drawable-xhdpi/ic_pano_blanket.png and b/res_p/drawable-xhdpi/ic_pano_blanket.png differ
diff --git a/res_p/drawable-xhdpi/ic_panorama_disabled.png b/res_p/drawable-xhdpi/ic_panorama_disabled.png
new file mode 100644 (file)
index 0000000..f3a9340
Binary files /dev/null and b/res_p/drawable-xhdpi/ic_panorama_disabled.png differ
diff --git a/res_p/drawable-xhdpi/ic_photo_sphere_blanket.png b/res_p/drawable-xhdpi/ic_photo_sphere_blanket.png
deleted file mode 100644 (file)
index e7306d3..0000000
Binary files a/res_p/drawable-xhdpi/ic_photo_sphere_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xhdpi/ic_photosphere_blanket.png b/res_p/drawable-xhdpi/ic_photosphere_blanket.png
new file mode 100644 (file)
index 0000000..07a9798
Binary files /dev/null and b/res_p/drawable-xhdpi/ic_photosphere_blanket.png differ
diff --git a/res_p/drawable-xhdpi/ic_photosphere_normal.png b/res_p/drawable-xhdpi/ic_photosphere_normal.png
new file mode 100644 (file)
index 0000000..63f7839
Binary files /dev/null and b/res_p/drawable-xhdpi/ic_photosphere_normal.png differ
index 156c8f4..db7ffd7 100644 (file)
Binary files a/res_p/drawable-xhdpi/ic_refocus_blanket.png and b/res_p/drawable-xhdpi/ic_refocus_blanket.png differ
diff --git a/res_p/drawable-xhdpi/ic_refocus_disabled.png b/res_p/drawable-xhdpi/ic_refocus_disabled.png
new file mode 100644 (file)
index 0000000..20410c4
Binary files /dev/null and b/res_p/drawable-xhdpi/ic_refocus_disabled.png differ
diff --git a/res_p/drawable-xhdpi/ic_video_blanket.png b/res_p/drawable-xhdpi/ic_video_blanket.png
deleted file mode 100644 (file)
index 28c313c..0000000
Binary files a/res_p/drawable-xhdpi/ic_video_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xhdpi/ic_video_disabled.png b/res_p/drawable-xhdpi/ic_video_disabled.png
deleted file mode 100644 (file)
index 70fe0fc..0000000
Binary files a/res_p/drawable-xhdpi/ic_video_disabled.png and /dev/null differ
diff --git a/res_p/drawable-xhdpi/ic_video_normal.png b/res_p/drawable-xhdpi/ic_video_normal.png
deleted file mode 100644 (file)
index c6e561c..0000000
Binary files a/res_p/drawable-xhdpi/ic_video_normal.png and /dev/null differ
diff --git a/res_p/drawable-xxhdpi/ic_camera_blanket.png b/res_p/drawable-xxhdpi/ic_camera_blanket.png
deleted file mode 100644 (file)
index 4b6d857..0000000
Binary files a/res_p/drawable-xxhdpi/ic_camera_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xxhdpi/ic_camera_normal.png b/res_p/drawable-xxhdpi/ic_camera_normal.png
deleted file mode 100644 (file)
index 125d395..0000000
Binary files a/res_p/drawable-xxhdpi/ic_camera_normal.png and /dev/null differ
index ff33adc..f0f1a26 100644 (file)
Binary files a/res_p/drawable-xxhdpi/ic_pano_blanket.png and b/res_p/drawable-xxhdpi/ic_pano_blanket.png differ
diff --git a/res_p/drawable-xxhdpi/ic_panorama_disabled.png b/res_p/drawable-xxhdpi/ic_panorama_disabled.png
new file mode 100644 (file)
index 0000000..09d7a7a
Binary files /dev/null and b/res_p/drawable-xxhdpi/ic_panorama_disabled.png differ
diff --git a/res_p/drawable-xxhdpi/ic_photo_sphere_blanket.png b/res_p/drawable-xxhdpi/ic_photo_sphere_blanket.png
deleted file mode 100644 (file)
index 54d0360..0000000
Binary files a/res_p/drawable-xxhdpi/ic_photo_sphere_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xxhdpi/ic_photosphere_blanket.png b/res_p/drawable-xxhdpi/ic_photosphere_blanket.png
new file mode 100644 (file)
index 0000000..4d710f7
Binary files /dev/null and b/res_p/drawable-xxhdpi/ic_photosphere_blanket.png differ
diff --git a/res_p/drawable-xxhdpi/ic_photosphere_normal.png b/res_p/drawable-xxhdpi/ic_photosphere_normal.png
new file mode 100644 (file)
index 0000000..2c88641
Binary files /dev/null and b/res_p/drawable-xxhdpi/ic_photosphere_normal.png differ
index b4c4239..5261068 100644 (file)
Binary files a/res_p/drawable-xxhdpi/ic_refocus_blanket.png and b/res_p/drawable-xxhdpi/ic_refocus_blanket.png differ
diff --git a/res_p/drawable-xxhdpi/ic_refocus_disabled.png b/res_p/drawable-xxhdpi/ic_refocus_disabled.png
new file mode 100644 (file)
index 0000000..369c10a
Binary files /dev/null and b/res_p/drawable-xxhdpi/ic_refocus_disabled.png differ
diff --git a/res_p/drawable-xxhdpi/ic_video_blanket.png b/res_p/drawable-xxhdpi/ic_video_blanket.png
deleted file mode 100644 (file)
index ce2badd..0000000
Binary files a/res_p/drawable-xxhdpi/ic_video_blanket.png and /dev/null differ
diff --git a/res_p/drawable-xxhdpi/ic_video_disabled.png b/res_p/drawable-xxhdpi/ic_video_disabled.png
deleted file mode 100644 (file)
index f157632..0000000
Binary files a/res_p/drawable-xxhdpi/ic_video_disabled.png and /dev/null differ
diff --git a/res_p/drawable-xxhdpi/ic_video_normal.png b/res_p/drawable-xxhdpi/ic_video_normal.png
deleted file mode 100644 (file)
index e9fd11b..0000000
Binary files a/res_p/drawable-xxhdpi/ic_video_normal.png and /dev/null differ
similarity index 69%
rename from res/values-v21/bool.xml
rename to res_p/values/strings.xml
index c1778ea..67a05b6 100644 (file)
@@ -13,6 +13,8 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <bool name="is_os_version_l">true</bool>
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Name of the Gallery app, for which we have an ActionBar button in Filmstrip. Should be kep in sync with the name of AOSP Gallery app [CHAR LIMIT=40]-->
+    <string name="gallery_app_name">Gallery</string>
 </resources>
\ No newline at end of file
diff --git a/sounds/shutter.wav b/sounds/shutter.wav
new file mode 100644 (file)
index 0000000..dfb26af
Binary files /dev/null and b/sounds/shutter.wav differ
diff --git a/sounds/staged_shot_complete.wav b/sounds/staged_shot_complete.wav
new file mode 100644 (file)
index 0000000..da6f2ef
Binary files /dev/null and b/sounds/staged_shot_complete.wav differ
diff --git a/sounds/timer_final_second.wav b/sounds/timer_final_second.wav
new file mode 100644 (file)
index 0000000..350929a
Binary files /dev/null and b/sounds/timer_final_second.wav differ
diff --git a/sounds/timer_increment.wav b/sounds/timer_increment.wav
new file mode 100644 (file)
index 0000000..af92298
Binary files /dev/null and b/sounds/timer_increment.wav differ
index 4e46058..60a1ab0 100644 (file)
@@ -75,6 +75,7 @@ public class CameraPerformanceTracker {
                 sInstance.mAppResumeTime = currentTime;
                 break;
             case FIRST_PREVIEW_FRAME:
+                Log.d(TAG, "First preview frame received");
                 if (sInstance.mFirstPreviewFrameLatencyColdStart == UNSET) {
                     // Cold start.
                     sInstance.mFirstPreviewFrameLatencyColdStart =
index b7fa08f..3250c01 100644 (file)
@@ -417,6 +417,19 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
      */
     public void disableButton(int buttonId) {
         MultiToggleImageButton button = getButtonOrError(buttonId);
+
+        // HDR and HDR+ buttons share the same button object,
+        // but change actual image icons at runtime.
+        // This extra check is to ensure the correct icons are used
+        // in the case of the HDR[+] button being disabled at startup,
+        // e.g. app startup with front-facing camera.
+        // b/18104680
+        if (buttonId == BUTTON_HDR_PLUS) {
+            initializeHdrPlusButtonIcons(button, R.array.pref_camera_hdr_plus_icons);
+        } else if (buttonId == BUTTON_HDR) {
+            initializeHdrButtonIcons(button, R.array.pref_camera_hdr_icons);
+        }
+
         if (button.isEnabled()) {
             button.setEnabled(false);
             if (mListener != null) {
@@ -709,10 +722,7 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
     private void initializeHdrPlusButton(MultiToggleImageButton button,
             final ButtonCallback cb, int resIdImages) {
 
-        if (resIdImages > 0) {
-            button.overrideImageIds(resIdImages);
-        }
-        button.overrideContentDescriptions(R.array.hdr_plus_descriptions);
+        initializeHdrPlusButtonIcons(button, resIdImages);
 
         int index = mSettingsManager.getIndexOfCurrentValue(SettingsManager.SCOPE_GLOBAL,
                                                             Keys.KEY_CAMERA_HDR_PLUS);
@@ -730,16 +740,20 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
         });
     }
 
+    private void initializeHdrPlusButtonIcons(MultiToggleImageButton button, int resIdImages) {
+        if (resIdImages > 0) {
+            button.overrideImageIds(resIdImages);
+        }
+        button.overrideContentDescriptions(R.array.hdr_plus_descriptions);
+    }
+
     /**
      * Initialize an hdr button.
      */
     private void initializeHdrButton(MultiToggleImageButton button,
             final ButtonCallback cb, int resIdImages) {
 
-        if (resIdImages > 0) {
-            button.overrideImageIds(resIdImages);
-        }
-        button.overrideContentDescriptions(R.array.hdr_descriptions);
+        initializeHdrButtonIcons(button, resIdImages);
 
         int index = mSettingsManager.getIndexOfCurrentValue(SettingsManager.SCOPE_GLOBAL,
                                                             Keys.KEY_CAMERA_HDR);
@@ -757,6 +771,13 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
         });
     }
 
+    private void initializeHdrButtonIcons(MultiToggleImageButton button, int resIdImages) {
+        if (resIdImages > 0) {
+            button.overrideImageIds(resIdImages);
+        }
+        button.overrideContentDescriptions(R.array.hdr_descriptions);
+    }
+
     /**
      * Initialize a countdown timer button.
      */
index a711e63..314840f 100644 (file)
@@ -20,7 +20,6 @@ package com.android.camera;
 import android.animation.Animator;
 import android.annotation.TargetApi;
 import android.app.ActionBar;
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ActivityNotFoundException;
@@ -30,7 +29,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -38,6 +36,7 @@ import android.graphics.Matrix;
 import android.graphics.Point;
 import android.graphics.RectF;
 import android.graphics.SurfaceTexture;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.nfc.NfcAdapter;
@@ -104,6 +103,7 @@ import com.android.camera.hardware.HardwareSpec;
 import com.android.camera.hardware.HardwareSpecImpl;
 import com.android.camera.module.ModuleController;
 import com.android.camera.module.ModulesInfo;
+import com.android.camera.one.OneCameraException;
 import com.android.camera.one.OneCameraManager;
 import com.android.camera.session.CaptureSession;
 import com.android.camera.session.CaptureSessionManager;
@@ -123,19 +123,20 @@ import com.android.camera.ui.PreviewStatusListener;
 import com.android.camera.util.ApiHelper;
 import com.android.camera.util.Callback;
 import com.android.camera.util.CameraUtil;
-import com.android.camera.util.FeedbackHelper;
 import com.android.camera.util.GalleryHelper;
 import com.android.camera.util.GcamHelper;
 import com.android.camera.util.GoogleHelpHelper;
 import com.android.camera.util.IntentHelper;
 import com.android.camera.util.PhotoSphereHelper.PanoramaViewHelper;
-import com.android.camera.util.ReleaseDialogHelper;
+import com.android.camera.util.QuickActivity;
+import com.android.camera.util.ReleaseHelper;
 import com.android.camera.util.UsageStatistics;
 import com.android.camera.widget.FilmstripView;
 import com.android.camera.widget.Preloader;
 import com.android.camera2.R;
 import com.android.ex.camera2.portability.CameraAgent;
 import com.android.ex.camera2.portability.CameraAgentFactory;
+import com.android.ex.camera2.portability.CameraExceptionHandler;
 import com.android.ex.camera2.portability.CameraSettings;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.GlideBuilder;
@@ -155,9 +156,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-public class CameraActivity extends Activity
+public class CameraActivity extends QuickActivity
         implements AppController, CameraAgent.CameraOpenCallback,
-        ActionBar.OnMenuVisibilityListener, ShareActionProvider.OnShareTargetSelectedListener,
+        ShareActionProvider.OnShareTargetSelectedListener,
         OrientationManager.OnOrientationChangeListener {
 
     private static final Log.Tag TAG = new Log.Tag("CameraActivity");
@@ -176,14 +177,6 @@ public class CameraActivity extends Activity
     public static final String MODULE_SCOPE_PREFIX = "_preferences_module_";
     public static final String CAMERA_SCOPE_PREFIX = "_preferences_camera_";
 
-    /**
-     * Request code from an activity we started that indicated that we do not
-     * want to reset the view to the preview in onResume.
-     */
-    public static final int REQ_CODE_DONT_SWITCH_TO_PREVIEW = 142;
-
-    public static final int REQ_CODE_GCAM_DEBUG_POSTCAPTURE = 999;
-
     private static final int MSG_CLEAR_SCREEN_ON_FLAG = 2;
     private static final long SCREEN_DELAY_MS = 2 * 60 * 1000; // 2 mins.
     private static final int MAX_PEEK_BITMAP_PIXELS = 1600000; // 1.6 * 4 MBs.
@@ -194,6 +187,13 @@ public class CameraActivity extends Activity
     private Context mAppContext;
 
     /**
+     * Camera fatal error handling:
+     * 1) Present error dialog to guide users to exit the app.
+     * 2) If users hit home button, onPause should just call finish() to exit the app.
+     */
+    private boolean mCameraFatalError = false;
+
+    /**
      * Whether onResume should reset the view to the preview.
      */
     private boolean mResetToPreviewOnResume = true;
@@ -203,6 +203,7 @@ public class CameraActivity extends Activity
      */
     private LocalDataAdapter mDataAdapter;
 
+    private OneCameraManager mCameraManager;
     private SettingsManager mSettingsManager;
     private ModeListView mModeListView;
     private boolean mModeListVisible = false;
@@ -246,18 +247,19 @@ public class CameraActivity extends Activity
     private PeekAnimationHandler mPeekAnimationHandler;
     private HandlerThread mPeekAnimationThread;
 
-    private FeedbackHelper mFeedbackHelper;
-
     private Intent mGalleryIntent;
     private long mOnCreateTime;
 
     private Menu mActionBarMenu;
     private Preloader<Integer, AsyncTask> mPreloader;
 
+    /** Can be used to play custom sounds. */
+    private SoundPlayer mSoundPlayer;
+
     private static final int LIGHTS_OUT_DELAY_MS = 4000;
     private final int BASE_SYS_UI_VISIBILITY =
-        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
     private final Runnable mLightsOutRunnable = new Runnable() {
         @Override
         public void run() {
@@ -278,8 +280,11 @@ public class CameraActivity extends Activity
         return mModuleManager;
     }
 
-    // close activity when screen turns off
-    private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
+    /**
+     * Close activity when secure app passes lock screen or screen turns
+     * off.
+     */
+    private final BroadcastReceiver mShutdownReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             finish();
@@ -378,8 +383,8 @@ public class CameraActivity extends Activity
                             fileAgeFromDataID(currentDataId));
                     // If applicable, show release information before this item
                     // is shared.
-                    if (ReleaseDialogHelper.shouldShowReleaseInfoDialogOnShare(data)) {
-                        ReleaseDialogHelper.showReleaseInfoDialog(CameraActivity.this,
+                    if (ReleaseHelper.shouldShowReleaseInfoDialogOnShare(data)) {
+                        ReleaseHelper.showReleaseInfoDialog(CameraActivity.this,
                                 new Callback<Void>() {
                                     @Override
                                     public void onCallback(Void result) {
@@ -472,7 +477,13 @@ public class CameraActivity extends Activity
 
     @Override
     public void onCameraOpened(CameraAgent.CameraProxy camera) {
+        Log.v(TAG, "onCameraOpened");
         if (mPaused) {
+            // We've paused, but just asynchronously opened the camera. Close it
+            // because we should be releasing the camera when paused to allow
+            // other apps to access it.
+            Log.v(TAG, "received onCameraOpened but activity is paused, closing Camera");
+            mCameraController.closeCamera(false);
             return;
         }
         /**
@@ -505,7 +516,10 @@ public class CameraActivity extends Activity
         if (mCurrentModule != null) {
             resetExposureCompensationToDefault(camera);
             mCurrentModule.onCameraAvailable(camera);
+        } else {
+            Log.v(TAG, "mCurrentModule null, not invoking onCameraAvailable");
         }
+        Log.v(TAG, "invoking onChangeCamera");
         mCameraAppUI.onChangeCamera();
     }
 
@@ -518,8 +532,9 @@ public class CameraActivity extends Activity
 
     @Override
     public void onCameraDisabled(int cameraId) {
-        UsageStatistics.instance().cameraFailure(eventprotos.CameraFailure.FailureReason.SECURITY,
-                null);
+        UsageStatistics.instance().cameraFailure(
+                eventprotos.CameraFailure.FailureReason.SECURITY, null,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera disabled: " + cameraId);
         CameraUtil.showErrorAndFinish(this, R.string.camera_disabled);
     }
@@ -527,7 +542,8 @@ public class CameraActivity extends Activity
     @Override
     public void onDeviceOpenFailure(int cameraId, String info) {
         UsageStatistics.instance().cameraFailure(
-                eventprotos.CameraFailure.FailureReason.OPEN_FAILURE, info);
+                eventprotos.CameraFailure.FailureReason.OPEN_FAILURE, info,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera open failure: " + info);
         CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
     }
@@ -541,7 +557,8 @@ public class CameraActivity extends Activity
     @Override
     public void onReconnectionFailure(CameraAgent mgr, String info) {
         UsageStatistics.instance().cameraFailure(
-                eventprotos.CameraFailure.FailureReason.RECONNECT_FAILURE, null);
+                eventprotos.CameraFailure.FailureReason.RECONNECT_FAILURE, null,
+                UsageStatistics.NONE, UsageStatistics.NONE);
         Log.w(TAG, "Camera reconnection failure:" + info);
         CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
     }
@@ -603,6 +620,7 @@ public class CameraActivity extends Activity
                 @Override
                 public void onSwipeOutBegin() {
                     mActionBar.hide();
+                    mCameraAppUI.hideBottomControls();
                     mFilmstripCoversPreview = false;
                     updatePreviewVisibility();
                 }
@@ -787,8 +805,10 @@ public class CameraActivity extends Activity
         if (visible != mActionBar.isShowing()) {
             if (visible) {
                 mActionBar.show();
+                mCameraAppUI.showBottomControls();
             } else {
                 mActionBar.hide();
+                mCameraAppUI.hideBottomControls();
             }
         }
         mFilmstripCoversPreview = visible;
@@ -842,12 +862,6 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    public void onMenuVisibilityChanged(boolean isVisible) {
-        // TODO: Remove this or bring back the original implementation: cancel
-        // auto-hide actionbar.
-    }
-
-    @Override
     public boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent) {
         int currentDataId = mFilmstripController.getCurrentId();
         if (currentDataId < 0) {
@@ -970,7 +984,11 @@ public class CameraActivity extends Activity
 
     @Override
     public void launchActivityByIntent(Intent intent) {
-        startActivityForResult(intent, REQ_CODE_DONT_SWITCH_TO_PREVIEW);
+        // Starting from L, we prefer not to start edit activity within camera's task.
+        mResetToPreviewOnResume = false;
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+
+        startActivity(intent);
     }
 
     @Override
@@ -996,8 +1014,7 @@ public class CameraActivity extends Activity
             // some automated scenarios, just return it as a valid separate scope
             // this could cause user issues, so log a stack trace noting the call path
             // which resulted in this scenario.
-            Log.w(TAG, "getting camera scope with no open camera, using id: " + currentCameraId,
-                    new Exception());
+            Log.w(TAG, "getting camera scope with no open camera, using id: " + currentCameraId);
         }
         return CAMERA_SCOPE_PREFIX + Integer.toString(currentCameraId);
     }
@@ -1100,8 +1117,13 @@ public class CameraActivity extends Activity
     }
 
     @Override
+    public void startPreCaptureAnimation(boolean shortFlash) {
+        mCameraAppUI.startPreCaptureAnimation(shortFlash);
+    }
+
+    @Override
     public void startPreCaptureAnimation() {
-        mCameraAppUI.startPreCaptureAnimation();
+        mCameraAppUI.startPreCaptureAnimation(false);
     }
 
     @Override
@@ -1245,7 +1267,7 @@ public class CameraActivity extends Activity
 
     @Override
     public OneCameraManager getCameraManager() {
-        return OneCameraManager.get(this);
+        return mCameraManager;
     }
 
     private void removeData(int dataID) {
@@ -1268,9 +1290,6 @@ public class CameraActivity extends Activity
         // Handle presses on the action bar items
         switch (item.getItemId()) {
             case android.R.id.home:
-                if (mFilmstripVisible && startGallery()) {
-                    return true;
-                }
                 onBackPressed();
                 return true;
             case R.id.action_details:
@@ -1295,28 +1314,77 @@ public class CameraActivity extends Activity
         }
     }
 
-    private final CameraAgent.CameraExceptionCallback mCameraDefaultExceptionCallback
-        = new CameraAgent.CameraExceptionCallback() {
+    /**
+     * Note: Make sure this callback is unregistered properly when the activity
+     * is destroyed since we're otherwise leaking the Activity reference.
+     */
+    private final CameraExceptionHandler.CameraExceptionCallback mCameraExceptionCallback
+        = new CameraExceptionHandler.CameraExceptionCallback() {
+                @Override
+                public void onCameraError(int errorCode) {
+                    // Not a fatal error. only do Log.e().
+                    Log.e(TAG, "Camera error callback. error=" + errorCode);
+                }
                 @Override
-                public void onCameraException(RuntimeException e) {
-                    Log.e(TAG, "Camera Exception", e);
-                    CameraUtil.showErrorAndFinish(CameraActivity.this,
-                            R.string.cannot_connect_camera);
+                public void onCameraException(
+                        RuntimeException ex, String commandHistory, int action, int state) {
+                    Log.e(TAG, "Camera Exception", ex);
+                    UsageStatistics.instance().cameraFailure(
+                            eventprotos.CameraFailure.FailureReason.API_RUNTIME_EXCEPTION,
+                            commandHistory, action, state);
+                    onFatalError();
+                }
+                @Override
+                public void onDispatchThreadException(RuntimeException ex) {
+                    Log.e(TAG, "DispatchThread Exception", ex);
+                    UsageStatistics.instance().cameraFailure(
+                            eventprotos.CameraFailure.FailureReason.API_TIMEOUT,
+                            null, UsageStatistics.NONE, UsageStatistics.NONE);
+                    onFatalError();
+                }
+                private void onFatalError() {
+                    if (mCameraFatalError) {
+                        return;
+                    }
+                    mCameraFatalError = true;
+
+                    // If the activity receives exception during onPause, just exit the app.
+                    if (mPaused && !isFinishing()) {
+                        Log.e(TAG, "Fatal error during onPause, call Activity.finish()");
+                        finish();
+                    } else {
+                        CameraUtil.showErrorAndFinish(CameraActivity.this,
+                                R.string.cannot_connect_camera);
+                    }
                 }
             };
 
     @Override
-    public void onCreate(Bundle state) {
+    public void onNewIntentTasks(Intent intent) {
+        onModeSelected(getModeIndex());
+    }
+
+    @Override
+    public void onCreateTasks(Bundle state) {
         CameraPerformanceTracker.onEvent(CameraPerformanceTracker.ACTIVITY_START);
-        super.onCreate(state);
+        mAppContext = getApplication().getBaseContext();
+
         if (!Glide.isSetup()) {
-            Glide.setup(new GlideBuilder(this)
-                .setResizeService(new FifoPriorityThreadPoolExecutor(1)));
-            Glide.get(this).setMemoryCategory(MemoryCategory.HIGH);
+            Glide.setup(new GlideBuilder(getAndroidContext())
+                .setResizeService(new FifoPriorityThreadPoolExecutor(2)));
+            Glide.get(getAndroidContext()).setMemoryCategory(MemoryCategory.HIGH);
         }
 
         mOnCreateTime = System.currentTimeMillis();
-        mAppContext = getApplicationContext();
+        mSoundPlayer = new SoundPlayer(mAppContext);
+
+        try {
+            mCameraManager = OneCameraManager.get(this);
+        } catch (OneCameraException e) {
+            Log.d(TAG, "Creating camera manager failed.", e);
+            CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
+            return;
+        }
 
         // TODO: Try to move all the resources allocation to happen as soon as
         // possible so we can call module.init() at the earliest time.
@@ -1331,14 +1399,23 @@ public class CameraActivity extends Activity
 
         getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
         setContentView(R.layout.activity_main);
+
         mActionBar = getActionBar();
-        mActionBar.addOnMenuVisibilityListener(this);
+        // set actionbar background to 100% or 50% transparent
+        if (ApiHelper.isLOrHigher()) {
+            mActionBar.setBackgroundDrawable(new ColorDrawable(0x00000000));
+        } else {
+            mActionBar.setBackgroundDrawable(new ColorDrawable(0x80000000));
+        }
+
         mMainHandler = new MainHandler(this, getMainLooper());
         mCameraController = new CameraController(mAppContext, this, mMainHandler,
-                CameraAgentFactory.getAndroidCameraAgent(this, CameraAgentFactory.CameraApi.API_1),
-                CameraAgentFactory.getAndroidCameraAgent(this, CameraAgentFactory.CameraApi.AUTO));
-        mCameraController.setCameraDefaultExceptionCallback(mCameraDefaultExceptionCallback,
-                mMainHandler);
+                CameraAgentFactory.getAndroidCameraAgent(mAppContext,
+                        CameraAgentFactory.CameraApi.API_1),
+                CameraAgentFactory.getAndroidCameraAgent(mAppContext,
+                        CameraAgentFactory.CameraApi.AUTO));
+        mCameraController.setCameraExceptionHandler(
+                new CameraExceptionHandler(mCameraExceptionCallback, mMainHandler));
 
         mModeListView = (ModeListView) findViewById(R.id.mode_list_layout);
         mModeListView.init(mModuleManager.getSupportedModeIndexList());
@@ -1373,10 +1450,17 @@ public class CameraActivity extends Activity
             win.setAttributes(params);
 
             // Filter for screen off so that we can finish secure camera
-            // activity
-            // when screen is off.
-            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
-            registerReceiver(mScreenOffReceiver, filter);
+            // activity when screen is off.
+            IntentFilter filter_screen_off = new IntentFilter(Intent.ACTION_SCREEN_OFF);
+            registerReceiver(mShutdownReceiver, filter_screen_off);
+
+            // Filter for phone unlock so that we can finish secure camera
+            // via this UI path:
+            //    1. from secure lock screen, user starts secure camera
+            //    2. user presses home button
+            //    3. user unlocks phone
+            IntentFilter filter_user_unlock = new IntentFilter(Intent.ACTION_USER_PRESENT);
+            registerReceiver(mShutdownReceiver, filter_user_unlock);
         }
         mCameraAppUI = new CameraAppUI(this,
                 (MainActivityLayout) findViewById(R.id.activity_root_view), isCaptureIntent());
@@ -1467,9 +1551,6 @@ public class CameraActivity extends Activity
         getContentResolver().registerContentObserver(
                 MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true,
                 mLocalVideosObserver);
-        if (FeedbackHelper.feedbackAvailable()) {
-            mFeedbackHelper = new FeedbackHelper(mAppContext);
-        }
         mMemoryManager = getServices().getMemoryManager();
 
         AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
@@ -1519,7 +1600,7 @@ public class CameraActivity extends Activity
             modeIndex = mSettingsManager.getInteger(SettingsManager.SCOPE_GLOBAL,
                                                     Keys.KEY_STARTUP_MODULE_INDEX);
             if ((modeIndex == gcamIndex &&
-                    !GcamHelper.hasGcamCapture()) || modeIndex < 0) {
+                    !GcamHelper.hasGcamAsSeparateModule()) || modeIndex < 0) {
                 modeIndex = photoIndex;
             }
         }
@@ -1592,7 +1673,7 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    public void onPause() {
+    public void onPauseTasks() {
         CameraPerformanceTracker.onEvent(CameraPerformanceTracker.ACTIVITY_PAUSE);
 
         /*
@@ -1617,8 +1698,6 @@ public class CameraActivity extends Activity
         performDeletion();
         mCurrentModule.pause();
         mOrientationManager.pause();
-        // Close the camera and wait for the operation done.
-        mCameraController.closeCamera(true);
         mPanoramaViewHelper.onPause();
 
         mLocalImagesObserver.setForegroundChangeListener(null);
@@ -1631,20 +1710,19 @@ public class CameraActivity extends Activity
 
         UsageStatistics.instance().backgrounded();
 
-        super.onPause();
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQ_CODE_DONT_SWITCH_TO_PREVIEW) {
-            mResetToPreviewOnResume = false;
+        // Camera is in fatal state. A fatal dialog is presented to users, but users just hit home
+        // button. Let's just kill the process.
+        if (mCameraFatalError && !isFinishing()) {
+            Log.v(TAG, "onPause when camera is in fatal state, call Activity.finish()");
+            finish();
         } else {
-            super.onActivityResult(requestCode, resultCode, data);
+            // Close the camera and wait for the operation done.
+            mCameraController.closeCamera(true);
         }
     }
 
     @Override
-    public void onResume() {
+    public void onResumeTasks() {
         CameraPerformanceTracker.onEvent(CameraPerformanceTracker.ACTIVITY_RESUME);
         Log.v(TAG, "Build info: " + Build.DISPLAY);
 
@@ -1704,24 +1782,17 @@ public class CameraActivity extends Activity
         }
         UsageStatistics.instance().foregrounded(source, currentUserInterfaceMode());
 
-        mGalleryIntent = IntentHelper.getPhotosGalleryIntent(mAppContext);
-        Drawable galleryLogo = IntentHelper.getGalleryIcon(mAppContext, mGalleryIntent);
-        if (galleryLogo == null) {
-            try {
-                galleryLogo = getPackageManager().getActivityLogo(getComponentName());
-            } catch (PackageManager.NameNotFoundException e) {
-                Log.e(TAG, "Can't get the activity logo");
-            }
+        mGalleryIntent = IntentHelper.getGalleryIntent(mAppContext);
+        if (ApiHelper.isLOrHigher()) {
+            // hide the up affordance for L devices, it's not very Materially
+            mActionBar.setDisplayShowHomeEnabled(false);
         }
-        if (mGalleryIntent != null) {
-            mActionBar.setDisplayUseLogoEnabled(true);
-        }
-        mActionBar.setLogo(galleryLogo);
+
         mOrientationManager.resume();
-        super.onResume();
         mPeekAnimationThread = new HandlerThread("Peek animation");
         mPeekAnimationThread.start();
-        mPeekAnimationHandler = new PeekAnimationHandler(mPeekAnimationThread.getLooper());
+        mPeekAnimationHandler = new PeekAnimationHandler(mPeekAnimationThread.getLooper(),
+                mMainHandler, mAboveFilmstripControlLayout);
 
         mCurrentModule.hardResetSettings(mSettingsManager);
         mCurrentModule.resume();
@@ -1786,7 +1857,7 @@ public class CameraActivity extends Activity
                 });
 
         mPanoramaViewHelper.onResume();
-        ReleaseDialogHelper.showReleaseInfoDialogOnStart(this, mSettingsManager);
+        ReleaseHelper.showReleaseInfoDialogOnStart(this, mSettingsManager);
         syncLocationManagerSetting();
 
         final int previewVisibility = getPreviewVisibility();
@@ -1805,8 +1876,7 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void onStartTasks() {
         mIsActivityRunning = true;
         mPanoramaViewHelper.onStart();
 
@@ -1832,25 +1902,21 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    protected void onStop() {
+    protected void onStopTasks() {
         mIsActivityRunning = false;
         mPanoramaViewHelper.onStop();
-        if (mFeedbackHelper != null) {
-            mFeedbackHelper.stopFeedback();
-        }
 
         mLocationManager.disconnect();
-        super.onStop();
     }
 
     @Override
-    public void onDestroy() {
+    public void onDestroyTasks() {
         if (mSecureCamera) {
-            unregisterReceiver(mScreenOffReceiver);
+            unregisterReceiver(mShutdownReceiver);
         }
-        mActionBar.removeOnMenuVisibilityListener(this);
         mSettingsManager.removeAllListeners();
         mCameraController.removeCallbackReceiver();
+        mCameraController.setCameraExceptionHandler(null);
         getContentResolver().unregisterContentObserver(mLocalImagesObserver);
         getContentResolver().unregisterContentObserver(mLocalVideosObserver);
         getServices().getCaptureSessionManager().removeSessionListener(mSessionListener);
@@ -1858,12 +1924,11 @@ public class CameraActivity extends Activity
         mModeListView.setVisibilityChangedListener(null);
         mCameraController = null;
         mSettingsManager = null;
-        mCameraAppUI = null;
         mOrientationManager = null;
         mButtonManager = null;
+        mSoundPlayer.release();
         CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.API_1);
         CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.AUTO);
-        super.onDestroy();
     }
 
     @Override
@@ -1951,9 +2016,36 @@ public class CameraActivity extends Activity
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.filmstrip_menu, menu);
         mActionBarMenu = menu;
+
+        // add a button for launching the gallery
+        if (mGalleryIntent != null) {
+            CharSequence appName =  IntentHelper.getGalleryAppName(mAppContext, mGalleryIntent);
+            if (appName != null) {
+                MenuItem menuItem = menu.add(appName);
+                menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+                menuItem.setIntent(mGalleryIntent);
+
+                Drawable galleryLogo = IntentHelper.getGalleryIcon(mAppContext, mGalleryIntent);
+                if (galleryLogo != null) {
+                    menuItem.setIcon(galleryLogo);
+                }
+            }
+        }
+
         return super.onCreateOptionsMenu(menu);
     }
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (isSecureCamera() && !ApiHelper.isLOrHigher()) {
+            // Compatibility pre-L: launching new activities right above
+            // lockscreen does not reliably work, only show help if not secure
+            menu.removeItem(R.id.action_help_and_feedback);
+        }
+
+        return super.onPrepareOptionsMenu(menu);
+    }
+
     protected long getStorageSpaceBytes() {
         synchronized (mStorageSpaceLock) {
             return mStorageSpaceBytes;
@@ -1991,8 +2083,12 @@ public class CameraActivity extends Activity
             @Override
             protected void onPostExecute(Long bytes) {
                 updateStorageHint(bytes);
-                if (callback != null) {
+                // This callback returns after I/O to check disk, so we could be
+                // pausing and shutting down. If so, don't bother invoking.
+                if (callback != null && !mPaused) {
                     callback.onStorageUpdateDone(bytes);
+                } else {
+                    Log.v(TAG, "ignoring storage callback after activity pause");
                 }
             }
         }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
@@ -2023,9 +2119,15 @@ public class CameraActivity extends Activity
             }
             mStorageHint.show();
             UsageStatistics.instance().storageWarning(storageSpace);
+
+            // Disable all user interactions,
+            mCameraAppUI.setDisableAllUserInteractions(true);
         } else if (mStorageHint != null) {
             mStorageHint.cancel();
             mStorageHint = null;
+
+            // Re-enable all user interactions.
+            mCameraAppUI.setDisableAllUserInteractions(false);
         }
     }
 
@@ -2061,7 +2163,7 @@ public class CameraActivity extends Activity
     public int getPreferredChildModeIndex(int modeIndex) {
         if (modeIndex == getResources().getInteger(R.integer.camera_mode_photo)) {
             boolean hdrPlusOn = Keys.isHdrPlusOn(mSettingsManager);
-            if (hdrPlusOn && GcamHelper.hasGcamCapture()) {
+            if (hdrPlusOn && GcamHelper.hasGcamAsSeparateModule()) {
                 modeIndex = getResources().getInteger(R.integer.camera_mode_gcam);
             }
         }
@@ -2091,7 +2193,6 @@ public class CameraActivity extends Activity
 
         mCameraAppUI.resetBottomControls(mCurrentModule, modeIndex);
         mCameraAppUI.addShutterListener(mCurrentModule);
-        mCameraAppUI.hideLetterboxing();
         openModule(mCurrentModule);
         mCurrentModule.onOrientationChanged(mLastRawOrientation);
         // Store the module index so we can use it the next time the Camera
@@ -2163,6 +2264,11 @@ public class CameraActivity extends Activity
         return mButtonManager;
     }
 
+    @Override
+    public SoundPlayer getSoundPlayer() {
+        return mSoundPlayer;
+    }
+
     /**
      * Creates an AlertDialog appropriate for choosing whether to enable
      * location on the first run of the app.
@@ -2271,10 +2377,12 @@ public class CameraActivity extends Activity
     private void openModule(CameraModule module) {
         module.init(this, isSecureCamera(), isCaptureIntent());
         module.hardResetSettings(mSettingsManager);
-        module.resume();
-        UsageStatistics.instance().changeScreen(currentUserInterfaceMode(),
-                NavigationChange.InteractionCause.BUTTON);
-        updatePreviewVisibility();
+        if (!mPaused) {
+            module.resume();
+            UsageStatistics.instance().changeScreen(currentUserInterfaceMode(),
+                    NavigationChange.InteractionCause.BUTTON);
+            updatePreviewVisibility();
+        }
     }
 
     private void closeModule(CameraModule module) {
@@ -2365,6 +2473,11 @@ public class CameraActivity extends Activity
 
     @Override
     public void onOrientationChanged(int orientation) {
+        if (orientation != mLastRawOrientation) {
+            Log.v(TAG, "orientation changed (from:to) " + mLastRawOrientation +
+                    ":" + orientation);
+        }
+
         // We keep the last known orientation. So if the user first orient
         // the camera then point the camera to floor or sky, we still have
         // the correct orientation.
@@ -2601,7 +2714,7 @@ public class CameraActivity extends Activity
         filmstripBottomPanel.setViewerButtonVisibility(viewButtonVisibility);
     }
 
-    private class PeekAnimationHandler extends Handler {
+    private static class PeekAnimationHandler extends Handler {
         private class DataAndCallback {
             LocalData mData;
             com.android.camera.util.Callback<Bitmap> mCallback;
@@ -2613,8 +2726,14 @@ public class CameraActivity extends Activity
             }
         }
 
-        public PeekAnimationHandler(Looper looper) {
+        private final Handler mMainHandler;
+        private final FrameLayout mAboveFilmstripControlLayout;
+
+        public PeekAnimationHandler(Looper looper, Handler mainHandler,
+                FrameLayout aboveFilmstripControlLayout) {
             super(looper);
+            mMainHandler = mainHandler;
+            mAboveFilmstripControlLayout = aboveFilmstripControlLayout;
         }
 
         /**
diff --git a/src/com/android/camera/CameraErrorCallback.java b/src/com/android/camera/CameraErrorCallback.java
deleted file mode 100644 (file)
index 5f69332..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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;
-
-import com.android.camera.debug.Log;
-import com.android.ex.camera2.portability.CameraAgent;
-
-public class CameraErrorCallback
-        implements CameraAgent.CameraErrorCallback {
-    private static final Log.Tag TAG = new Log.Tag("CamErrCallback");
-
-    @Override
-    public void onError(int error, CameraAgent.CameraProxy camera) {
-        Log.e(TAG, "Got camera error callback. error=" + error);
-        if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
-            // We are not sure about the current state of the app (in preview or
-            // snapshot or recording). Closing the app is better than creating a
-            // new Camera object.
-            throw new RuntimeException("Media server died.");
-        }
-    }
-}
diff --git a/src/com/android/camera/CaptureActivity.java b/src/com/android/camera/CaptureActivity.java
new file mode 100644 (file)
index 0000000..6b9b915
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+// Use a different activity for capture intents, so it can have a different
+// task affinity from others. This makes sure the regular camera activity is not
+// reused for IMAGE_CAPTURE or VIDEO_CAPTURE intents from other activities.
+public class CaptureActivity extends CameraActivity {
+}
index e0d8c43..744f2ab 100644 (file)
@@ -19,7 +19,6 @@ package com.android.camera;
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.graphics.Bitmap;
 import android.graphics.Matrix;
 import android.graphics.RectF;
 import android.graphics.SurfaceTexture;
@@ -27,8 +26,11 @@ import android.hardware.Sensor;
 import android.hardware.SensorEvent;
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
+import android.location.Location;
 import android.net.Uri;
 import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.SystemClock;
 import android.provider.MediaStore;
 import android.view.KeyEvent;
 import android.view.OrientationEventListener;
@@ -40,6 +42,7 @@ import android.view.View.OnLayoutChangeListener;
 import com.android.camera.app.AppController;
 import com.android.camera.app.CameraAppUI;
 import com.android.camera.app.CameraAppUI.BottomBarUISpec;
+import com.android.camera.app.LocationManager;
 import com.android.camera.app.MediaSaver;
 import com.android.camera.debug.DebugPropertyHelper;
 import com.android.camera.debug.Log;
@@ -47,7 +50,6 @@ import com.android.camera.debug.Log.Tag;
 import com.android.camera.hardware.HardwareSpec;
 import com.android.camera.module.ModuleController;
 import com.android.camera.one.OneCamera;
-import com.android.camera.one.OneCamera.AutoFocusMode;
 import com.android.camera.one.OneCamera.AutoFocusState;
 import com.android.camera.one.OneCamera.CaptureReadyCallback;
 import com.android.camera.one.OneCamera.Facing;
@@ -55,20 +57,25 @@ import com.android.camera.one.OneCamera.OpenCallback;
 import com.android.camera.one.OneCamera.PhotoCaptureParameters;
 import com.android.camera.one.OneCamera.PhotoCaptureParameters.Flash;
 import com.android.camera.one.OneCameraManager;
+import com.android.camera.one.Settings3A;
+import com.android.camera.one.v2.OneCameraManagerImpl;
 import com.android.camera.remote.RemoteCameraModule;
 import com.android.camera.session.CaptureSession;
 import com.android.camera.settings.Keys;
-import com.android.camera.settings.ResolutionUtil;
 import com.android.camera.settings.SettingsManager;
+import com.android.camera.ui.CountDownView;
 import com.android.camera.ui.PreviewStatusListener;
 import com.android.camera.ui.TouchCoordinate;
 import com.android.camera.util.CameraUtil;
+import com.android.camera.util.GcamHelper;
 import com.android.camera.util.Size;
 import com.android.camera.util.UsageStatistics;
 import com.android.camera2.R;
 import com.android.ex.camera2.portability.CameraAgent.CameraProxy;
 
 import java.io.File;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
 
 /**
  * New Capture module that is made to support photo and video capture on top of
@@ -80,17 +87,17 @@ import java.io.File;
  * TODO:
  * <ul>
  * <li>Server-side logging
- * <li>Focusing
- * <li>Show location dialog
+ * <li>Focusing (managed by OneCamera implementations)
+ * <li>Show location dialog on first start
  * <li>Show resolution dialog on certain devices
  * <li>Store location
- * <li>Timer
  * <li>Capture intent
  * </ul>
  */
 public class CaptureModule extends CameraModule
         implements MediaSaver.QueueListener,
         ModuleController,
+        CountDownView.OnCountDownStatusListener,
         OneCamera.PictureCallback,
         OneCamera.FocusStateListener,
         OneCamera.ReadyStateChangedListener,
@@ -114,59 +121,17 @@ public class CaptureModule extends CameraModule
     };
 
     /**
-     * Called when the captured media has been saved.
-     */
-    private final MediaSaver.OnMediaSavedListener mOnMediaSavedListener =
-            new MediaSaver.OnMediaSavedListener() {
-                @Override
-                public void onMediaSaved(Uri uri) {
-                    if (uri != null) {
-                        mAppController.notifyNewMedia(uri);
-                    }
-                }
-            };
-
-    /**
-     * Called when the user pressed the back/front camera switch button.
-     */
-    private final ButtonManager.ButtonCallback mCameraSwitchCallback =
-            new ButtonManager.ButtonCallback() {
-                @Override
-                public void onStateChanged(int cameraId) {
-                    // At the time this callback is fired, the camera id
-                    // has be set to the desired camera.
-                    if (mPaused) {
-                        return;
-                    }
-
-                    mSettingsManager.set(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID,
-                            cameraId);
-
-                    Log.d(TAG, "Start to switch camera. cameraId=" + cameraId);
-                    switchCamera(getFacingFromCameraId(cameraId));
-                }
-            };
-
-    /**
-     * Show AF target in center of preview and start animation.
-     */
-    Runnable mShowAutoFocusTargetInCenterRunnable = new Runnable() {
-        @Override
-        public void run() {
-            mUI.setAutoFocusTarget(((int) (mPreviewArea.left + mPreviewArea.right)) / 2,
-                    ((int) (mPreviewArea.top + mPreviewArea.bottom)) / 2);
-            mUI.showAutoFocusInProgress();
-        }
-    };
-
-    /**
      * Hide AF target UI element.
      */
     Runnable mHideAutoFocusTargetRunnable = new Runnable() {
         @Override
         public void run() {
-            // showAutoFocusSuccess() just hides the AF UI.
-            mUI.showAutoFocusSuccess();
+            // For debug UI off, showAutoFocusSuccess() just hides the AF UI.
+            if (mFocusedAtEnd) {
+                mUI.showAutoFocusSuccess();
+            } else {
+                mUI.showAutoFocusFailure();
+            }
         }
     };
 
@@ -174,18 +139,22 @@ public class CaptureModule extends CameraModule
     private static final String PHOTO_MODULE_STRING_ID = "PhotoModule";
     /** Enable additional debug output. */
     private static final boolean DEBUG = true;
-    /**
-     * This is the delay before we execute onResume tasks when coming from the
-     * lock screen, to allow time for onPause to execute.
-     * <p>
-     * TODO: Make sure this value is in sync with what we see on L.
-     */
-    private static final int ON_RESUME_TASKS_DELAY_MSEC = 20;
+
+    /** Timeout for camera open/close operations. */
+    private static final int CAMERA_OPEN_CLOSE_TIMEOUT_MILLIS = 2500;
 
     /** System Properties switch to enable debugging focus UI. */
-    private static final boolean FOCUS_DEBUG_UI = DebugPropertyHelper.showFocusDebugUI();
+    private static final boolean CAPTURE_DEBUG_UI = DebugPropertyHelper.showCaptureDebugUI();
 
     private final Object mDimensionLock = new Object();
+
+    /**
+     * Sticky Gcam mode is when this module's sole purpose it to be the Gcam
+     * mode. If true, the device uses {@link PhotoModule} for normal picture
+     * taking.
+     */
+    private final boolean mStickyGcamCamera;
+
     /**
      * Lock for race conditions in the SurfaceTextureListener callbacks.
      */
@@ -199,10 +168,15 @@ public class CaptureModule extends CameraModule
     private CaptureModuleUI mUI;
     /** The camera manager used to open cameras. */
     private OneCameraManager mCameraManager;
-    /** The currently opened camera device. */
+    /** The currently opened camera device, or null if the camera is closed. */
     private OneCamera mCamera;
+    /** Held when opening or closing the camera. */
+    private final Semaphore mCameraOpenCloseLock = new Semaphore(1);
     /** The direction the currently opened camera is facing to. */
     private Facing mCameraFacing = Facing.BACK;
+    /** Whether HDR is currently enabled. */
+    private boolean mHdrEnabled = false;
+
     /** The texture used to render the preview in. */
     private SurfaceTexture mPreviewTexture;
 
@@ -219,12 +193,30 @@ public class CaptureModule extends CameraModule
     private int mOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
     /** Current zoom value. */
     private float mZoomValue = 1f;
+    /** Current duration of capture timer in seconds. */
+    private int mTimerDuration;
+    // TODO: Get image capture intent UI working.
+    private boolean mIsImageCaptureIntent;
 
     /** True if in AF tap-to-focus sequence. */
-    private boolean mTapToFocusInProgress = false;
+    private boolean mTapToFocusWaitForActiveScan = false;
+    /** Records beginning frame of each AF scan. */
+    private long mAutoFocusScanStartFrame = -1;
+    /** Records beginning time of each AF scan in uptimeMillis. */
+    private long mAutoFocusScanStartTime;
 
     /** Persistence of Tap to Focus target UI after scan complete. */
-    private static final int FOCUS_HOLD_UI_MILLIS = 500;
+    private static final int FOCUS_HOLD_UI_MILLIS = 0;
+    /** Worst case persistence of TTF target UI. */
+    private static final int FOCUS_UI_TIMEOUT_MILLIS = 2000;
+    /** Results from last tap to focus scan */
+    private boolean mFocusedAtEnd;
+    /** Sensor manager we use to get the heading of the device. */
+    private SensorManager mSensorManager;
+    /** Accelerometer. */
+    private Sensor mAccelerometerSensor;
+    /** Compass. */
+    private Sensor mMagneticSensor;
 
     /** Accelerometer data. */
     private final float[] mGData = new float[3];
@@ -235,21 +227,18 @@ public class CaptureModule extends CameraModule
     /** Current compass heading. */
     private int mHeading = -1;
 
+    /** Used to fetch and embed the location into captured images. */
+    private LocationManager mLocationManager;
+    /** Plays sounds for countdown timer. */
+    private SoundPlayer mCountdownSoundPlayer;
+
     /** Whether the module is paused right now. */
     private boolean mPaused;
 
-    /** Whether this module was resumed from lockscreen capture intent. */
-    private boolean mIsResumeFromLockScreen = false;
-
-    private final Runnable mResumeTaskRunnable = new Runnable() {
-        @Override
-        public void run() {
-            onResumeTasks();
-        }
-    };
-
     /** Main thread handler. */
     private Handler mMainHandler;
+    /** Handler thread for camera-related operations. */
+    private Handler mCameraHandler;
 
     /** Current display rotation in degrees. */
     private int mDisplayRotation;
@@ -273,12 +262,6 @@ public class CaptureModule extends CameraModule
     private final File mDebugDataDir;
 
     /** CLEAN UP START */
-    // private SoundPool mSoundPool;
-    // private int mCaptureStartSoundId;
-    // private static final int NO_SOUND_STREAM = -999;
-    // private final int mCaptureStartSoundStreamId = NO_SOUND_STREAM;
-    // private int mCaptureDoneSoundId;
-    // private SoundClips.Player mSoundPlayer;
     // private boolean mFirstLayout;
     // private int[] mTargetFPSRanges;
     // private float mZoomValue;
@@ -287,22 +270,30 @@ public class CaptureModule extends CameraModule
     // private String mFlashMode;
     /** CLEAN UP END */
 
-    /** Constructs a new capture module. */
     public CaptureModule(AppController appController) {
+        this(appController, false);
+    }
+
+    /** Constructs a new capture module. */
+    public CaptureModule(AppController appController, boolean stickyHdr) {
         super(appController);
         mAppController = appController;
         mContext = mAppController.getAndroidContext();
         mSettingsManager = mAppController.getSettingsManager();
         mSettingsManager.addListener(this);
         mDebugDataDir = mContext.getExternalCacheDir();
+        mStickyGcamCamera = stickyHdr;
     }
 
     @Override
     public void init(CameraActivity activity, boolean isSecureCamera, boolean isCaptureIntent) {
         Log.d(TAG, "init");
-        mIsResumeFromLockScreen = isResumeFromLockscreen(activity);
         mMainHandler = new Handler(activity.getMainLooper());
+        HandlerThread thread = new HandlerThread("CaptureModule.mCameraHandler");
+        thread.start();
+        mCameraHandler = new Handler(thread.getLooper());
         mCameraManager = mAppController.getCameraManager();
+        mLocationManager = mAppController.getLocationManager();
         mDisplayRotation = CameraUtil.getDisplayRotation(mContext);
         mCameraFacing = getFacingFromCameraId(mSettingsManager.getInteger(
                 mAppController.getModuleScope(),
@@ -311,9 +302,21 @@ public class CaptureModule extends CameraModule
                 mLayoutListener);
         mAppController.setPreviewStatusListener(mUI);
         mPreviewTexture = mAppController.getCameraAppUI().getSurfaceTexture();
-        if (mPreviewTexture != null) {
-            initSurface(mPreviewTexture);
-        }
+        mSensorManager = (SensorManager) (mContext.getSystemService(Context.SENSOR_SERVICE));
+        mAccelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+        mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+        mCountdownSoundPlayer = new SoundPlayer(mContext);
+
+        String action = activity.getIntent().getAction();
+        mIsImageCaptureIntent = (MediaStore.ACTION_IMAGE_CAPTURE.equals(action)
+                || CameraActivity.ACTION_IMAGE_CAPTURE_SECURE.equals(action));
+        View cancelButton = activity.findViewById(R.id.shutter_cancel_button);
+        cancelButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                cancelCountDown();
+            }
+        });
     }
 
     @Override
@@ -328,18 +331,33 @@ public class CaptureModule extends CameraModule
 
     @Override
     public void onShutterButtonClick() {
-        // TODO: Add focusing.
         if (mCamera == null) {
             return;
         }
 
+        int countDownDuration = mSettingsManager
+                .getInteger(SettingsManager.SCOPE_GLOBAL, Keys.KEY_COUNTDOWN_DURATION);
+        mTimerDuration = countDownDuration;
+        if (countDownDuration > 0) {
+            // Start count down.
+            mAppController.getCameraAppUI().transitionToCancel();
+            mAppController.getCameraAppUI().hideModeOptions();
+            mUI.setCountdownFinishedListener(this);
+            mUI.startCountdown(countDownDuration);
+            // Will take picture later via listener callback.
+        } else {
+            takePictureNow();
+        }
+    }
+
+    private void takePictureNow() {
+        Location location = mLocationManager.getCurrentLocation();
+
         // Set up the capture session.
         long sessionTime = System.currentTimeMillis();
         String title = CameraUtil.createJpegName(sessionTime);
         CaptureSession session = getServices().getCaptureSessionManager()
-                .createNewSession(title, sessionTime, null);
-
-        // TODO: Add location.
+                .createNewSession(title, sessionTime, location);
 
         // Set up the parameters for this capture.
         PhotoCaptureParameters params = new PhotoCaptureParameters();
@@ -349,16 +367,58 @@ public class CaptureModule extends CameraModule
         params.flashMode = getFlashModeFromSettings();
         params.heading = mHeading;
         params.debugDataFolder = mDebugDataDir;
+        params.location = location;
+        params.zoom = mZoomValue;
+        params.timerSeconds = mTimerDuration > 0 ? (float) mTimerDuration : null;
 
-        // Take the picture.
         mCamera.takePicture(params, session);
     }
 
     @Override
+    public void onCountDownFinished() {
+        mAppController.getCameraAppUI().transitionToCapture();
+        mAppController.getCameraAppUI().showModeOptions();
+        if (mPaused) {
+            return;
+        }
+        takePictureNow();
+    }
+
+    @Override
+    public void onRemainingSecondsChanged(int remainingSeconds) {
+        if (remainingSeconds == 1) {
+            mCountdownSoundPlayer.play(R.raw.timer_final_second, 0.6f);
+        } else if (remainingSeconds == 2 || remainingSeconds == 3) {
+            mCountdownSoundPlayer.play(R.raw.timer_increment, 0.6f);
+        }
+    }
+
+    private void cancelCountDown() {
+        if (mUI.isCountingDown()) {
+            // Cancel on-going countdown.
+            mUI.cancelCountDown();
+        }
+        mAppController.getCameraAppUI().showModeOptions();
+        mAppController.getCameraAppUI().transitionToCapture();
+    }
+
+    @Override
+    public void onQuickExpose() {
+        mMainHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                // Starts the short version of the capture animation UI.
+                mAppController.startPreCaptureAnimation(true);
+            }
+        });
+    }
+
+    @Override
     public void onPreviewAreaChanged(RectF previewArea) {
         mPreviewArea = previewArea;
+        mUI.onPreviewAreaChanged(previewArea);
         // mUI.updatePreviewAreaRect(previewArea);
-        // mUI.positionProgressOverlay(previewArea);
+        mUI.positionProgressOverlay(previewArea);
     }
 
     @Override
@@ -381,6 +441,7 @@ public class CaptureModule extends CameraModule
         SensorManager.getRotationMatrix(mR, null, mGData, mMData);
         SensorManager.getOrientation(mR, orientation);
         mHeading = (int) (orientation[0] * 180f / Math.PI) % 360;
+
         if (mHeading < 0) {
             mHeading += 360;
         }
@@ -398,8 +459,9 @@ public class CaptureModule extends CameraModule
 
     @Override
     public void onRemoteShutterPress() {
+        Log.d(TAG, "onRemoteShutterPress");
         // TODO: Check whether shutter is enabled.
-        onShutterButtonClick();
+        takePictureNow();
     }
 
     @Override
@@ -414,53 +476,7 @@ public class CaptureModule extends CameraModule
     public void initSurface(final SurfaceTexture surface) {
         mPreviewTexture = surface;
         closeCamera();
-
-        mCameraManager.open(mCameraFacing, getPictureSizeFromSettings(), new OpenCallback() {
-            @Override
-            public void onFailure() {
-                Log.e(TAG, "Could not open camera.");
-                mCamera = null;
-                mAppController.showErrorAndFinish(R.string.cannot_connect_camera);
-            }
-
-            @Override
-            public void onCameraOpened(final OneCamera camera) {
-                Log.d(TAG, "onCameraOpened: " + camera);
-                mCamera = camera;
-                updateBufferDimension();
-
-                // If the surface texture is not destroyed, it may have the last
-                // frame lingering.
-                // We need to hold off setting transform until preview is
-                // started.
-                resetDefaultBufferSize();
-                mState = ModuleState.WATCH_FOR_NEXT_FRAME_AFTER_PREVIEW_STARTED;
-
-                Log.d(TAG, "starting preview ...");
-
-                // TODO: Consider rolling these two calls into one.
-                camera.startPreview(new Surface(surface), new CaptureReadyCallback() {
-
-                    @Override
-                    public void onSetupFailed() {
-                        Log.e(TAG, "Could not set up preview.");
-                        mCamera.close(null);
-                        mCamera = null;
-                        // TODO: Show an error message and exit.
-                    }
-
-                    @Override
-                    public void onReadyForCapture() {
-                        Log.d(TAG, "Ready for capture.");
-                        onPreviewStarted();
-                        // Enable zooming after preview has started.
-                        mUI.initializeZoom(mCamera.getMaxZoom());
-                        mCamera.setFocusStateListener(CaptureModule.this);
-                        mCamera.setReadyStateChangedListener(CaptureModule.this);
-                    }
-                });
-            }
-        });
+        openCameraAndStartPreview();
     }
 
     @Override
@@ -472,6 +488,7 @@ public class CaptureModule extends CameraModule
     @Override
     public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
         Log.d(TAG, "onSurfaceTextureDestroyed");
+        mPreviewTexture = null;
         closeCamera();
         return true;
     }
@@ -493,21 +510,6 @@ public class CaptureModule extends CameraModule
 
     @Override
     public void resume() {
-        // Add delay on resume from lock screen only, in order to to speed up
-        // the onResume --> onPause --> onResume cycle from lock screen.
-        // Don't do always because letting go of thread can cause delay.
-        if (mIsResumeFromLockScreen) {
-            Log.v(TAG, "Delayng onResumeTasks from lock screen. " + System.currentTimeMillis());
-            // Note: onPauseAfterSuper() will delete this runnable, so we will
-            // at most have 1 copy queued up.
-            mMainHandler.postDelayed(mResumeTaskRunnable, ON_RESUME_TASKS_DELAY_MSEC);
-        } else {
-            onResumeTasks();
-        }
-    }
-
-    private void onResumeTasks() {
-        Log.d(TAG, "onResumeTasks + " + System.currentTimeMillis());
         mPaused = false;
         mAppController.getCameraAppUI().onChangeCamera();
         mAppController.addPreviewAreaSizeChangedListener(this);
@@ -515,20 +517,57 @@ public class CaptureModule extends CameraModule
         getServices().getRemoteShutterListener().onModuleReady(this);
         // TODO: Check if we can really take a photo right now (memory, camera
         // state, ... ).
+        mAppController.getCameraAppUI().enableModeOptions();
         mAppController.setShutterEnabled(true);
+
+        // Get events from the accelerometer and magnetic sensor.
+        if (mAccelerometerSensor != null) {
+            mSensorManager.registerListener(this, mAccelerometerSensor,
+                    SensorManager.SENSOR_DELAY_NORMAL);
+        }
+        if (mMagneticSensor != null) {
+            mSensorManager.registerListener(this, mMagneticSensor,
+                    SensorManager.SENSOR_DELAY_NORMAL);
+        }
+        mHdrEnabled = mStickyGcamCamera || mAppController.getSettingsManager().getInteger(
+                SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR_PLUS) == 1;
+
+        // This means we are resuming with an existing preview texture. This
+        // means we will never get the onSurfaceTextureAvailable call. So we
+        // have to open the camera and start the preview here.
+        if (mPreviewTexture != null) {
+            initSurface(mPreviewTexture);
+        }
+
+        mCountdownSoundPlayer.loadSound(R.raw.timer_final_second);
+        mCountdownSoundPlayer.loadSound(R.raw.timer_increment);
     }
 
     @Override
     public void pause() {
         mPaused = true;
-        resetTextureBufferSize();
+        getServices().getRemoteShutterListener().onModuleExit();
+        cancelCountDown();
         closeCamera();
+        resetTextureBufferSize();
+        mCountdownSoundPlayer.unloadSound(R.raw.timer_final_second);
+        mCountdownSoundPlayer.unloadSound(R.raw.timer_increment);
         // Remove delayed resume trigger, if it hasn't been executed yet.
         mMainHandler.removeCallbacksAndMessages(null);
+
+        // Unregister the sensors.
+        if (mAccelerometerSensor != null) {
+            mSensorManager.unregisterListener(this, mAccelerometerSensor);
+        }
+        if (mMagneticSensor != null) {
+            mSensorManager.unregisterListener(this, mMagneticSensor);
+        }
     }
 
     @Override
     public void destroy() {
+        mCountdownSoundPlayer.release();
+        mCameraHandler.getLooper().quitSafely();
     }
 
     @Override
@@ -544,7 +583,11 @@ public class CaptureModule extends CameraModule
         if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
             return;
         }
-        mOrientation = CameraUtil.roundOrientation(orientation, mOrientation);
+
+        // TODO: Document orientation compute logic and unify them in OrientationManagerImpl.
+        // b/17443789
+        // Flip to counter-clockwise orientation.
+        mOrientation = (360 - orientation) % 360;
     }
 
     @Override
@@ -554,7 +597,13 @@ public class CaptureModule extends CameraModule
 
     @Override
     public void hardResetSettings(SettingsManager settingsManager) {
-        // TODO Auto-generated method stub
+        if (mStickyGcamCamera) {
+            // Sitcky HDR+ mode should hard reset HDR+ to on, and camera back
+            // facing.
+            settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR_PLUS, true);
+            settingsManager.set(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID,
+                    getBackFacingCameraId());
+        }
     }
 
     @Override
@@ -567,13 +616,13 @@ public class CaptureModule extends CameraModule
 
             @Override
             public boolean isHdrSupported() {
+                // TODO: Check if the device has HDR and not HDR+.
                 return false;
             }
 
             @Override
             public boolean isHdrPlusSupported() {
-                // TODO: Enable once we support this.
-                return false;
+                return GcamHelper.hasGcamCapture();
             }
 
             @Override
@@ -588,16 +637,18 @@ public class CaptureModule extends CameraModule
         CameraAppUI.BottomBarUISpec bottomBarSpec = new CameraAppUI.BottomBarUISpec();
         bottomBarSpec.enableGridLines = true;
         bottomBarSpec.enableCamera = true;
-        bottomBarSpec.cameraCallback = mCameraSwitchCallback;
-        // TODO: Enable once we support this.
-        bottomBarSpec.enableHdr = false;
-        // TODO: Enable once we support this.
-        bottomBarSpec.hdrCallback = null;
-        // TODO: Enable once we support this.
-        bottomBarSpec.enableSelfTimer = false;
-        bottomBarSpec.showSelfTimer = false;
-        // TODO: Deal with e.g. HDR+ if it doesn't support it.
-        bottomBarSpec.enableFlash = true;
+        bottomBarSpec.cameraCallback = getCameraCallback();
+        bottomBarSpec.enableHdr = GcamHelper.hasGcamCapture();
+        bottomBarSpec.hdrCallback = getHdrButtonCallback();
+        bottomBarSpec.enableSelfTimer = true;
+        bottomBarSpec.showSelfTimer = true;
+        if (!mHdrEnabled) {
+            bottomBarSpec.enableFlash = true;
+        }
+        // Added to handle case of CaptureModule being used only for Gcam.
+        if (mStickyGcamCamera) {
+            bottomBarSpec.enableFlash = false;
+        }
         return bottomBarSpec;
     }
 
@@ -608,11 +659,31 @@ public class CaptureModule extends CameraModule
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_CAMERA:
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+                if (mUI.isCountingDown()) {
+                    cancelCountDown();
+                } else if (event.getRepeatCount() == 0) {
+                    onShutterButtonClick();
+                }
+                return true;
+            case KeyEvent.KEYCODE_VOLUME_UP:
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+                // Prevent default.
+                return true;
+        }
         return false;
     }
 
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_VOLUME_UP:
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+                onShutterButtonClick();
+                return true;
+        }
         return false;
     }
 
@@ -633,13 +704,30 @@ public class CaptureModule extends CameraModule
     // Currently AF state transitions are controlled in OneCameraImpl.
     // PhotoModule uses FocusOverlayManager which uses API1/portability
     // logic and coordinates.
-
     private void triggerFocusAtScreenCoord(int x, int y) {
-        mTapToFocusInProgress = true;
+        if (mCamera == null) {
+            // If we receive this after the camera is closed, do nothing.
+            return;
+        }
+
+        mTapToFocusWaitForActiveScan = true;
         // Show UI immediately even though scan has not started yet.
-        mUI.setAutoFocusTarget(x, y);
+        float minEdge = Math.min(mPreviewArea.width(), mPreviewArea.height());
+        mUI.setAutoFocusTarget(x, y, false,
+                (int) (Settings3A.getAutoFocusRegionWidth() * mZoomValue * minEdge),
+                (int) (Settings3A.getMeteringRegionWidth() * mZoomValue * minEdge));
         mUI.showAutoFocusInProgress();
 
+        // Cancel any scheduled auto focus target UI actions.
+        mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
+        // Timeout in case camera fails to stop (unlikely).
+        mMainHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                mMainHandler.post(mHideAutoFocusTargetRunnable);
+            }
+        }, FOCUS_UI_TIMEOUT_MILLIS);
+
         // Normalize coordinates to [0,1] per CameraOne API.
         float points[] = new float[2];
         points[0] = (x - mPreviewArea.left) / mPreviewArea.width();
@@ -661,65 +749,96 @@ public class CaptureModule extends CameraModule
     }
 
     /**
-     * This AF status listener does two things:
-     * <ol>
-     * <li>Ends tap-to-focus period when mode goes from AUTO to CONTINUOUS_PICTURE.</li>
-     * <li>Updates AF UI if tap-to-focus is not in progress.</li>
-     * </ol>
+     * Show AF target in center of preview.
      */
-    @Override
-    public void onFocusStatusUpdate(final AutoFocusMode mode, final AutoFocusState state) {
-        Log.v(TAG, "AF status is mode:" + mode + " state:" + state);
+    private void setAutoFocusTargetPassive() {
+        float minEdge = Math.min(mPreviewArea.width(), mPreviewArea.height());
+        mUI.setAutoFocusTarget((int) mPreviewArea.centerX(), (int) mPreviewArea.centerY(),
+                true,
+                (int) (Settings3A.getAutoFocusRegionWidth() * mZoomValue * minEdge),
+                (int) (Settings3A.getMeteringRegionWidth() * mZoomValue * minEdge));
+        mUI.showAutoFocusInProgress();
+    }
 
-        if (FOCUS_DEBUG_UI) {
-            // TODO: Add debug circle radius+color UI to FocusOverlay.
-            // mMainHandler.post(...)
-        }
+    /**
+     * Update UI based on AF state changes.
+     */
+    @Override
+    public void onFocusStatusUpdate(final AutoFocusState state, long frameNumber) {
+        Log.v(TAG, "AF status is state:" + state);
 
-        // If mTapToFocusInProgress, clear UI.
-        if (mTapToFocusInProgress) {
-            // Clear UI on return to CONTINUOUS_PICTURE (debug mode).
-            if (FOCUS_DEBUG_UI) {
-                if (mode == AutoFocusMode.CONTINUOUS_PICTURE) {
-                    mTapToFocusInProgress = false;
+        switch (state) {
+            case PASSIVE_SCAN:
+                mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
+                mMainHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        setAutoFocusTargetPassive();
+                    }
+                });
+                break;
+            case ACTIVE_SCAN:
+                mTapToFocusWaitForActiveScan = false;
+                break;
+            case PASSIVE_FOCUSED:
+            case PASSIVE_UNFOCUSED:
+                mMainHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        mUI.setPassiveFocusSuccess(state == AutoFocusState.PASSIVE_FOCUSED);
+                    }
+                });
+                break;
+            case ACTIVE_FOCUSED:
+            case ACTIVE_UNFOCUSED:
+                if (!mTapToFocusWaitForActiveScan) {
+                    mFocusedAtEnd = state != AutoFocusState.ACTIVE_UNFOCUSED;
                     mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
                     mMainHandler.post(mHideAutoFocusTargetRunnable);
                 }
-            } else { // Clear UI FOCUS_HOLD_UI_MILLIS after scan end (normal).
-                if (mode == AutoFocusMode.AUTO && (state == AutoFocusState.STOPPED_FOCUSED ||
-                        state == AutoFocusState.STOPPED_UNFOCUSED)) {
-                    mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
-                    mMainHandler.postDelayed(new Runnable() {
-                        @Override
-                        public void run() {
-                            mTapToFocusInProgress = false;
-                            mMainHandler.post(mHideAutoFocusTargetRunnable);
-                        }
-                    }, FOCUS_HOLD_UI_MILLIS);
-                }
-            }
+                break;
         }
 
-        // Use the OneCamera auto focus callbacks to show the UI, except for
-        // tap to focus where we show UI right away at touch, and then turn
-        // it off early at 0.5 sec, before the focus lock expires at 3 sec.
-        if (!mTapToFocusInProgress) {
-            switch (state) {
-                case SCANNING:
-                    mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
-                    mMainHandler.post(mShowAutoFocusTargetInCenterRunnable);
-                    break;
-                case STOPPED_FOCUSED:
-                case STOPPED_UNFOCUSED:
-                    mMainHandler.removeCallbacks(mHideAutoFocusTargetRunnable);
-                    mMainHandler.post(mHideAutoFocusTargetRunnable);
-                    break;
-            }
+        if (CAPTURE_DEBUG_UI) {
+            measureAutoFocusScans(state, frameNumber);
+        }
+    }
+
+    private void measureAutoFocusScans(final AutoFocusState state, long frameNumber) {
+        // Log AF scan lengths.
+        boolean passive = false;
+        switch (state) {
+            case PASSIVE_SCAN:
+            case ACTIVE_SCAN:
+                if (mAutoFocusScanStartFrame == -1) {
+                    mAutoFocusScanStartFrame = frameNumber;
+                    mAutoFocusScanStartTime = SystemClock.uptimeMillis();
+                }
+                break;
+            case PASSIVE_FOCUSED:
+            case PASSIVE_UNFOCUSED:
+                passive = true;
+            case ACTIVE_FOCUSED:
+            case ACTIVE_UNFOCUSED:
+                if (mAutoFocusScanStartFrame != -1) {
+                    long frames = frameNumber - mAutoFocusScanStartFrame;
+                    long dt = SystemClock.uptimeMillis() - mAutoFocusScanStartTime;
+                    int fps = Math.round(frames * 1000f / dt);
+                    String report = String.format("%s scan: fps=%d frames=%d",
+                            passive ? "CAF" : "AF", fps, frames);
+                    Log.v(TAG, report);
+                    mUI.showDebugMessage(String.format("%d / %d", frames, fps));
+                    mAutoFocusScanStartFrame = -1;
+                }
+                break;
         }
     }
 
     @Override
     public void onReadyStateChanged(boolean readyForCapture) {
+        if (readyForCapture) {
+            mAppController.getCameraAppUI().enableModeOptions();
+        }
         mAppController.setShutterEnabled(readyForCapture);
     }
 
@@ -730,12 +849,13 @@ public class CaptureModule extends CameraModule
     }
 
     @Override
-    public void onThumbnailResult(Bitmap bitmap) {
-        // TODO
+    public void onThumbnailResult(byte[] jpegData) {
+        getServices().getRemoteShutterListener().onPictureTaken(jpegData);
     }
 
     @Override
     public void onPictureTaken(CaptureSession session) {
+        mAppController.getCameraAppUI().enableModeOptions();
     }
 
     @Override
@@ -745,7 +865,7 @@ public class CaptureModule extends CameraModule
 
     @Override
     public void onTakePictureProgress(float progress) {
-        mUI.setPictureTakingProgress((int)(progress * 100));
+        mUI.setPictureTakingProgress((int) (progress * 100));
     }
 
     @Override
@@ -773,6 +893,7 @@ public class CaptureModule extends CameraModule
 
     /**
      * Set zoom value.
+     *
      * @param zoom Zoom value, must be between 1.0 and mCamera.getMaxZoom().
      */
     public void setZoom(float zoom) {
@@ -783,6 +904,126 @@ public class CaptureModule extends CameraModule
     }
 
     /**
+     * TODO: Remove this method once we are in pure CaptureModule land.
+     */
+    private String getBackFacingCameraId() {
+        if (!(mCameraManager instanceof OneCameraManagerImpl)) {
+            throw new IllegalStateException("This should never be called with Camera API V1");
+        }
+        OneCameraManagerImpl manager = (OneCameraManagerImpl) mCameraManager;
+        return manager.getFirstBackCameraId();
+    }
+
+    /**
+     * @return Depending on whether we're in sticky-HDR mode or not, return the
+     *         proper callback to be used for when the HDR/HDR+ button is
+     *         pressed.
+     */
+    private ButtonManager.ButtonCallback getHdrButtonCallback() {
+        if (mStickyGcamCamera) {
+            return new ButtonManager.ButtonCallback() {
+                @Override
+                public void onStateChanged(int state) {
+                    if (mPaused) {
+                        return;
+                    }
+                    if (state == ButtonManager.ON) {
+                        throw new IllegalStateException(
+                                "Can't leave hdr plus mode if switching to hdr plus mode.");
+                    }
+                    SettingsManager settingsManager = mAppController.getSettingsManager();
+                    settingsManager.set(mAppController.getModuleScope(),
+                            Keys.KEY_REQUEST_RETURN_HDR_PLUS, false);
+                    switchToRegularCapture();
+                }
+            };
+        } else {
+            return new ButtonManager.ButtonCallback() {
+                @Override
+                public void onStateChanged(int hdrEnabled) {
+                    if (mPaused) {
+                        return;
+                    }
+                    Log.d(TAG, "HDR enabled =" + hdrEnabled);
+                    mHdrEnabled = hdrEnabled == 1;
+                    switchCamera();
+                }
+            };
+        }
+    }
+
+    /**
+     * @return Depending on whether we're in sticky-HDR mode or not, this
+     *         returns the proper callback to be used for when the camera
+     *         (front/back switch) button is pressed.
+     */
+    private ButtonManager.ButtonCallback getCameraCallback() {
+        if (mStickyGcamCamera) {
+            return new ButtonManager.ButtonCallback() {
+                @Override
+                public void onStateChanged(int state) {
+                    if (mPaused) {
+                        return;
+                    }
+
+                    // At the time this callback is fired, the camera id setting
+                    // has changed to the desired camera.
+                    SettingsManager settingsManager = mAppController.getSettingsManager();
+                    if (Keys.isCameraBackFacing(settingsManager,
+                            mAppController.getModuleScope())) {
+                        throw new IllegalStateException(
+                                "Hdr plus should never be switching from front facing camera.");
+                    }
+
+                    // Switch to photo mode, but request a return to hdr plus on
+                    // switching to back camera again.
+                    settingsManager.set(mAppController.getModuleScope(),
+                            Keys.KEY_REQUEST_RETURN_HDR_PLUS, true);
+                    switchToRegularCapture();
+                }
+            };
+        } else {
+            return new ButtonManager.ButtonCallback() {
+                @Override
+                public void onStateChanged(int cameraId) {
+                    if (mPaused) {
+                        return;
+                    }
+
+                    // At the time this callback is fired, the camera id
+                    // has be set to the desired camera.
+                    mSettingsManager.set(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID,
+                            cameraId);
+
+                    Log.d(TAG, "Start to switch camera. cameraId=" + cameraId);
+                    mCameraFacing = getFacingFromCameraId(cameraId);
+                    switchCamera();
+                }
+            };
+        }
+    }
+
+    /**
+     * Switches to PhotoModule to do regular photo captures.
+     * <p>
+     * TODO: Remove this once we use CaptureModule for photo taking.
+     */
+    private void switchToRegularCapture() {
+        // Turn off HDR+ before switching back to normal photo mode.
+        SettingsManager settingsManager = mAppController.getSettingsManager();
+        settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR_PLUS, false);
+
+        // Disable this button to prevent callbacks from this module from firing
+        // while we are transitioning modules.
+        ButtonManager buttonManager = mAppController.getButtonManager();
+        buttonManager.disableButtonClick(ButtonManager.BUTTON_HDR_PLUS);
+        mAppController.getCameraAppUI().freezeScreenUntilPreviewReady();
+        mAppController.onModeSelected(mContext.getResources().getInteger(
+                R.integer.camera_mode_photo));
+        buttonManager.enableButtonClick(ButtonManager.BUTTON_HDR_PLUS);
+    }
+
+    /**
      * Called when the preview started. Informs the app controller and queues a
      * transform update when the next preview frame arrives.
      */
@@ -802,8 +1043,8 @@ public class CaptureModule extends CameraModule
     }
 
     /***
-     * Update the preview transform based on the new dimensions.
-     * TODO: Make work with all: aspect ratios/resolutions x screens/cameras.
+     * Update the preview transform based on the new dimensions. TODO: Make work
+     * with all: aspect ratios/resolutions x screens/cameras.
      */
     private void updatePreviewTransform(int incomingWidth, int incomingHeight,
             boolean forceUpdate) {
@@ -821,7 +1062,7 @@ public class CaptureModule extends CameraModule
             mDisplayRotation = incomingRotation;
             mScreenWidth = incomingWidth;
             mScreenHeight = incomingHeight;
-            updateBufferDimension();
+            updatePreviewBufferDimension();
 
             mPreviewTranformationMatrix = mAppController.getCameraAppUI().getPreviewTransform(
                     mPreviewTranformationMatrix);
@@ -882,31 +1123,10 @@ public class CaptureModule extends CameraModule
                 effectiveHeight = temp;
             }
 
-            boolean is16by9 = false;
-
-            // TODO: BACK/FRONT.
-            Size pictureSize = getPictureSizeFromSettings();
-            if (pictureSize != null) {
-                pictureSize = ResolutionUtil.getApproximateSize(pictureSize);
-                if (pictureSize.equals(new Size(16, 9))) {
-                    is16by9 = true;
-                }
-            }
-
-            float scale;
-            if (is16by9) {
-                // We are going to be clipping off edges to achieve the 16
-                // by 9 aspect ratio so we will choose the max here to fill,
-                // instead of fit.
-                scale =
-                        Math.max(width / (float) effectiveWidth, height
-                                / (float) effectiveHeight);
-            } else {
-                // Scale to fit view, cropping the longest dimension
-                scale =
-                        Math.min(width / (float) effectiveWidth, height
-                                / (float) effectiveHeight);
-            }
+            // Scale to fit view, cropping the longest dimension
+            float scale =
+                    Math.min(width / (float) effectiveWidth, height
+                            / (float) effectiveHeight);
             mPreviewTranformationMatrix.postScale(scale, scale, centerX, centerY);
 
             // TODO: Take these quantities from mPreviewArea.
@@ -917,24 +1137,7 @@ public class CaptureModule extends CameraModule
             mPreviewTranformationMatrix.postTranslate(previewCenterX - centerX, previewCenterY
                     - centerY);
 
-            if (is16by9) {
-                float aspectRatio = FULLSCREEN_ASPECT_RATIO;
-                RectF renderedPreviewRect = mAppController.getFullscreenRect();
-                float desiredPreviewWidth = Math.max(renderedPreviewRect.height(),
-                        renderedPreviewRect.width()) * 1 / aspectRatio;
-                int letterBoxWidth = (int) Math.ceil((Math.min(renderedPreviewRect.width(),
-                        renderedPreviewRect.height()) - desiredPreviewWidth) / 2.0f);
-                mAppController.getCameraAppUI().addLetterboxing(letterBoxWidth);
-
-                float wOffset = -(previewWidth - renderedPreviewRect.width()) / 2.0f;
-                float hOffset = -(previewHeight - renderedPreviewRect.height()) / 2.0f;
-                mPreviewTranformationMatrix.postTranslate(wOffset, hOffset);
-                mAppController.updatePreviewTransformFullscreen(mPreviewTranformationMatrix,
-                        aspectRatio);
-            } else {
-                mAppController.updatePreviewTransform(mPreviewTranformationMatrix);
-                mAppController.getCameraAppUI().hideLetterboxing();
-            }
+            mAppController.updatePreviewTransform(mPreviewTranformationMatrix);
             // if (mGcamProxy != null) {
             // mGcamProxy.postSetAspectRatio(mFinalAspectRatio);
             // }
@@ -953,17 +1156,20 @@ public class CaptureModule extends CameraModule
         }
     }
 
-    private void updateBufferDimension() {
+    /**
+     * Based on the current picture size, selects the best preview dimension and
+     * stores it in {@link #mPreviewBufferWidth} and
+     * {@link #mPreviewBufferHeight}.
+     */
+    private void updatePreviewBufferDimension() {
         if (mCamera == null) {
             return;
         }
 
-        Size picked = CaptureModuleUtil.pickBufferDimensions(
-                mCamera.getSupportedSizes(),
-                mCamera.getFullSizeAspectRatio(),
-                mContext);
-        mPreviewBufferWidth = picked.getWidth();
-        mPreviewBufferHeight = picked.getHeight();
+        Size pictureSize = getPictureSizeFromSettings();
+        Size previewBufferSize = mCamera.pickPreviewSize(pictureSize, mContext);
+        mPreviewBufferWidth = previewBufferSize.getWidth();
+        mPreviewBufferHeight = previewBufferSize.getHeight();
     }
 
     /**
@@ -977,11 +1183,127 @@ public class CaptureModule extends CameraModule
         }
     }
 
-    private void closeCamera() {
+    /**
+     * Open camera and start the preview.
+     */
+    private void openCameraAndStartPreview() {
+        // Only enable HDR on the back camera
+        boolean useHdr = mHdrEnabled && mCameraFacing == Facing.BACK;
+
+        try {
+            // TODO Given the current design, we cannot guarantee that one of
+            // CaptureReadyCallback.onSetupFailed or onReadyForCapture will
+            // be called (see below), so it's possible that
+            // mCameraOpenCloseLock.release() is never called under extremely
+            // rare cases.  If we leak the lock, this timeout ensures that we at
+            // least crash so we don't deadlock the app.
+            if (!mCameraOpenCloseLock.tryAcquire(CAMERA_OPEN_CLOSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)) {
+                throw new RuntimeException("Time out waiting to acquire camera-open lock.");
+            }
+        } catch (InterruptedException e) {
+            throw new RuntimeException("Interrupted while waiting to acquire camera-open lock.", e);
+        }
         if (mCamera != null) {
-            mCamera.setFocusStateListener(null);
-            mCamera.close(null);
-            mCamera = null;
+            // If the camera is already open, do nothing.
+            Log.d(TAG, "Camera already open, not re-opening.");
+            mCameraOpenCloseLock.release();
+            return;
+        }
+        mCameraManager.open(mCameraFacing, useHdr, getPictureSizeFromSettings(),
+                new OpenCallback() {
+                    @Override
+                    public void onFailure() {
+                        Log.e(TAG, "Could not open camera.");
+                        mCamera = null;
+                        mCameraOpenCloseLock.release();
+                        mAppController.showErrorAndFinish(R.string.cannot_connect_camera);
+                    }
+
+                    @Override
+                    public void onCameraClosed() {
+                        mCamera = null;
+                        mCameraOpenCloseLock.release();
+                    }
+
+                    @Override
+                    public void onCameraOpened(final OneCamera camera) {
+                        Log.d(TAG, "onCameraOpened: " + camera);
+                        mCamera = camera;
+                        updatePreviewBufferDimension();
+
+                        // If the surface texture is not destroyed, it may have
+                        // the last frame lingering. We need to hold off setting
+                        // transform until preview is started.
+                        resetDefaultBufferSize();
+                        mState = ModuleState.WATCH_FOR_NEXT_FRAME_AFTER_PREVIEW_STARTED;
+                        Log.d(TAG, "starting preview ...");
+
+                        // TODO: Consider rolling these two calls into one.
+                        camera.startPreview(new Surface(mPreviewTexture),
+                                new CaptureReadyCallback() {
+                                    @Override
+                                    public void onSetupFailed() {
+                                        // We must release this lock here, before posting
+                                        // to the main handler since we may be blocked
+                                        // in pause(), getting ready to close the camera.
+                                        mCameraOpenCloseLock.release();
+                                        Log.e(TAG, "Could not set up preview.");
+                                        mMainHandler.post(new Runnable() {
+                                           @Override
+                                           public void run() {
+                                               if (mCamera == null) {
+                                                   Log.d(TAG, "Camera closed, aborting.");
+                                                   return;
+                                               }
+                                               mCamera.close(null);
+                                               mCamera = null;
+                                               // TODO: Show an error message and exit.
+                                           }
+                                        });
+                                    }
+
+                                    @Override
+                                    public void onReadyForCapture() {
+                                        // We must release this lock here, before posting
+                                        // to the main handler since we may be blocked
+                                        // in pause(), getting ready to close the camera.
+                                        mCameraOpenCloseLock.release();
+                                        mMainHandler.post(new Runnable() {
+                                           @Override
+                                           public void run() {
+                                               Log.d(TAG, "Ready for capture.");
+                                               if (mCamera == null) {
+                                                   Log.d(TAG, "Camera closed, aborting.");
+                                                   return;
+                                               }
+                                               onPreviewStarted();
+                                               // Enable zooming after preview has
+                                               // started.
+                                               mUI.initializeZoom(mCamera.getMaxZoom());
+                                               mCamera.setFocusStateListener(CaptureModule.this);
+                                               mCamera.setReadyStateChangedListener(CaptureModule.this);
+                                           }
+                                        });
+                                    }
+                                });
+                    }
+                }, mCameraHandler);
+    }
+
+    private void closeCamera() {
+        try {
+            mCameraOpenCloseLock.acquire();
+        } catch(InterruptedException e) {
+            throw new RuntimeException("Interrupted while waiting to acquire camera-open lock.", e);
+        }
+        try {
+            if (mCamera != null) {
+                mCamera.close(null);
+                mCamera.setFocusStateListener(null);
+                mCamera = null;
+            }
+        } finally {
+            mCameraOpenCloseLock.release();
         }
     }
 
@@ -1002,16 +1324,15 @@ public class CaptureModule extends CameraModule
         || MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(action));
     }
 
-    private void switchCamera(Facing switchTo) {
-        if (mPaused || mCameraFacing == switchTo) {
+    /**
+     * Re-initialize the camera if e.g. the HDR mode or facing property changed.
+     */
+    private void switchCamera() {
+        if (mPaused) {
             return;
         }
-        // TODO: Un-comment once we have timer back.
-        // cancelCountDown();
-
+        cancelCountDown();
         mAppController.freezeScreenUntilPreviewReady();
-
-        mCameraFacing = switchTo;
         initSurface(mPreviewTexture);
 
         // TODO: Un-comment once we have focus back.
index d00e7f7..67fb12f 100644 (file)
@@ -25,14 +25,13 @@ import android.view.MotionEvent;
 import android.view.TextureView;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 
 import com.android.camera.debug.Log;
+import com.android.camera.ui.CountDownView;
 import com.android.camera.ui.PreviewOverlay;
 import com.android.camera.ui.PreviewOverlay.OnZoomChangedListener;
 import com.android.camera.ui.PreviewStatusListener;
 import com.android.camera.ui.ProgressOverlay;
-import com.android.camera.util.UsageStatistics;
 import com.android.camera2.R;
 
 /**
@@ -51,7 +50,6 @@ public class CaptureModuleUI implements
     private final ProgressOverlay mProgressOverlay;
     private final View.OnLayoutChangeListener mLayoutListener;
     private final TextureView mPreviewView;
-    private final ImageView mPreviewThumb;
 
     private final GestureDetector.OnGestureListener mPreviewGestureListener = new GestureDetector.SimpleOnGestureListener() {
         @Override
@@ -61,6 +59,8 @@ public class CaptureModuleUI implements
         }
     };
     private final FocusOverlayManager.FocusUI mFocusUI;
+    private final CountDownView mCountdownView;
+
     private int mPreviewAreaWidth;
     private int mPreviewAreaHeight;
 
@@ -70,9 +70,8 @@ public class CaptureModuleUI implements
     /** Set up listener to receive zoom changes from View and send to module. */
     private final OnZoomChangedListener mZoomChancedListener  = new OnZoomChangedListener() {
         @Override
-        public void onZoomValueChanged(int index) {
-            float zoomValue = ((float) PreviewOverlay.ZOOM_MIN_FACTOR + (float) index) / 100;
-            mModule.setZoom(zoomValue);
+        public void onZoomValueChanged(float ratio) {
+            mModule.setZoom(ratio);
         }
 
         @Override
@@ -84,6 +83,11 @@ public class CaptureModuleUI implements
         }
     };
 
+    public void onPreviewAreaChanged(RectF previewArea) {
+        // TODO: mFaceView.onPreviewAreaChanged(previewArea);
+        mCountdownView.onPreviewAreaChanged(previewArea);
+    }
+
     @Override
     public void onPreviewLayoutChanged(View v, int left, int top, int right,
             int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
@@ -135,16 +139,8 @@ public class CaptureModuleUI implements
         mPreviewOverlay = (PreviewOverlay) mRootView.findViewById(R.id.preview_overlay);
         mProgressOverlay = (ProgressOverlay) mRootView.findViewById(R.id.progress_overlay);
 
-        mPreviewThumb = (ImageView) mRootView.findViewById(R.id.gcam_preview_thumb);
-        mPreviewThumb.setScaleType(ImageView.ScaleType.MATRIX);
-        mPreviewThumb.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mActivity.gotoGallery();
-            }
-        });
-
         mFocusUI = (FocusOverlayManager.FocusUI) mRootView.findViewById(R.id.focus_overlay);
+        mCountdownView = (CountDownView) mRootView.findViewById(R.id.count_down_view);
     }
 
     @Override
@@ -201,10 +197,16 @@ public class CaptureModuleUI implements
         mFocusUI.onFocusFailed();
     }
 
-    public void setAutoFocusTarget(int x, int y) {
-        // TODO: refactor.
-        boolean isAutoFocus = false;
-        mFocusUI.setFocusPosition(x, y, isAutoFocus);
+    public void setPassiveFocusSuccess(boolean success) {
+        mFocusUI.setPassiveFocusSuccess(success);
+    }
+
+    public void showDebugMessage(String message) {
+        mFocusUI.showDebugMessage(message);
+    }
+
+    public void setAutoFocusTarget(int x, int y, boolean isPassiveScan, int afSize, int aeSize) {
+        mFocusUI.setFocusPosition(x, y, isPassiveScan, afSize, aeSize);
     }
 
     public void clearAutoFocusIndicator() {
@@ -215,6 +217,36 @@ public class CaptureModuleUI implements
     }
 
     /**
+     * Starts the countdown timer.
+     *
+     * @param sec seconds to countdown
+     */
+    public void startCountdown(int sec) {
+        mCountdownView.startCountDown(sec);
+    }
+
+    /**
+     * Sets a listener that gets notified when the countdown is finished.
+     */
+    public void setCountdownFinishedListener(CountDownView.OnCountDownStatusListener listener) {
+        mCountdownView.setCountDownStatusListener(listener);
+    }
+
+    /**
+     * Returns whether the countdown is on-going.
+     */
+    public boolean isCountingDown() {
+        return mCountdownView.isCountingDown();
+    }
+
+    /**
+     * Cancels the on-going countdown, if any.
+     */
+    public void cancelCountDown() {
+        mCountdownView.cancelCountDown();
+    }
+
+    /**
      * Sets the progress of the gcam picture taking.
      *
      * @param percent amount of process done in percent 0-100.
index 21f8676..7be2550 100644 (file)
@@ -64,14 +64,12 @@ public class CaptureModuleUtil {
                 count++;
             }
         }
-        ArrayList<com.android.ex.camera2.portability.Size> camera1Sizes =
-                new ArrayList<com.android.ex.camera2.portability.Size>(count);
+        ArrayList<Size> camera1Sizes = new ArrayList<Size>(count);
 
         // Set array of all sizes with height <= 1080p
         for (Size s : sizes) {
             if (s.getHeight() <= MAX_ASPECT_HEIGHT) {
-                camera1Sizes.add(
-                        new com.android.ex.camera2.portability.Size(s.getWidth(), s.getHeight()));
+                camera1Sizes.add(new Size(s.getWidth(), s.getHeight()));
             }
         }
 
@@ -82,9 +80,9 @@ public class CaptureModuleUtil {
             return null;
         }
 
-        com.android.ex.camera2.portability.Size optimal = camera1Sizes.get(optimalIndex);
+        Size optimal = camera1Sizes.get(optimalIndex);
         for (Size s : sizes) {
-            if (s.getWidth() == optimal.width() && s.getHeight() == optimal.height()) {
+            if (s.getWidth() == optimal.getWidth() && s.getHeight() == optimal.getHeight()) {
                 return s;
             }
         }
index d236d8a..4e4d54c 100644 (file)
@@ -29,6 +29,7 @@ import android.os.Message;
 import com.android.camera.app.AppController;
 import com.android.camera.app.MotionManager;
 import com.android.camera.debug.Log;
+import com.android.camera.one.Settings3A;
 import com.android.camera.settings.Keys;
 import com.android.camera.settings.SettingsManager;
 import com.android.camera.ui.PreviewStatusListener;
@@ -37,6 +38,7 @@ import com.android.camera.util.CameraUtil;
 import com.android.camera.util.UsageStatistics;
 import com.android.ex.camera2.portability.CameraCapabilities;
 
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -67,7 +69,11 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
     private static final Log.Tag TAG = new Log.Tag("FocusOverlayMgr");
 
     private static final int RESET_TOUCH_FOCUS = 0;
-    private static final int RESET_TOUCH_FOCUS_DELAY = 4000;
+
+    private static final int RESET_TOUCH_FOCUS_DELAY_MILLIS = Settings3A.getFocusHoldMillis();
+
+    public static final float AF_REGION_BOX = Settings3A.getAutoFocusRegionWidth();
+    public static final float AE_REGION_BOX = Settings3A.getMeteringRegionWidth();
 
     private int mState = STATE_IDLE;
     private static final int STATE_IDLE = 0; // Focus is not active.
@@ -108,10 +114,13 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
     public  interface FocusUI {
         public boolean hasFaces();
         public void clearFocus();
-        public void setFocusPosition(int x, int y, boolean isAutoFocus);
+        public void setFocusPosition(int x, int y, boolean isPassiveScan, int aFsize, int aEsize);
+        public void setFocusPosition(int x, int y, boolean isPassiveScan);
         public void onFocusStarted();
         public void onFocusSucceeded();
         public void onFocusFailed();
+        public void setPassiveFocusSuccess(boolean success);
+        public void showDebugMessage(String message);
         public void pauseFaceDetection();
         public void resumeFaceDetection();
     }
@@ -125,17 +134,33 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         public void setFocusParameters();
     }
 
-    private class MainHandler extends Handler {
-        public MainHandler(Looper looper) {
+    /**
+     * TODO: Refactor this so that we either don't need a handler or make
+     * mListener not be the activity.
+     */
+    private static class MainHandler extends Handler {
+        /**
+         * The outer mListener at the moment is actually the CameraActivity,
+         * which we would leak if we didn't break the GC path here using a
+         * WeakReference.
+         */
+        final WeakReference<FocusOverlayManager> mManager;
+        public MainHandler(FocusOverlayManager manager, Looper looper) {
             super(looper);
+            mManager = new WeakReference<FocusOverlayManager>(manager);
         }
 
         @Override
         public void handleMessage(Message msg) {
+            FocusOverlayManager manager = mManager.get();
+            if (manager == null) {
+                return;
+            }
+
             switch (msg.what) {
                 case RESET_TOUCH_FOCUS: {
-                    cancelAutoFocus();
-                    mListener.startFaceDetection();
+                    manager.cancelAutoFocus();
+                    manager.mListener.startFaceDetection();
                     break;
                 }
             }
@@ -147,7 +172,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
             Listener listener, boolean mirror, Looper looper, FocusUI ui) {
         mAppController = appController;
         mSettingsManager = appController.getSettingsManager();
-        mHandler = new MainHandler(looper);
+        mHandler = new MainHandler(this, looper);
         mMatrix = new Matrix();
         mDefaultFocusModes = new ArrayList<CameraCapabilities.FocusMode>(defaultFocusModes);
         updateCapabilities(capabilities);
@@ -290,7 +315,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
             // while.
             if (mFocusArea != null) {
                 mFocusLocked = true;
-                mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY);
+                mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY_MILLIS);
             }
             if (shutterButtonPressed) {
                 // Lock AE & AWB so users can half-press shutter and recompose.
@@ -323,7 +348,8 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         // animate on false->true trasition only b/8219520
         if (moving && !mPreviousMoving) {
             // Auto focus at the center of the preview.
-            mUI.setFocusPosition(mPreviewRect.centerX(), mPreviewRect.centerY(), true);
+            mUI.setFocusPosition(mPreviewRect.centerX(), mPreviewRect.centerY(), true,
+                    getAFRegionEdge(), getAERegionEdge());
             mUI.onFocusStarted();
         } else if (!moving) {
             mUI.onFocusSucceeded();
@@ -331,6 +357,16 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         mPreviousMoving = moving;
     }
 
+    /** Returns width of auto focus region in pixels. */
+    private int getAFRegionEdge() {
+        return (int) (Math.min(mPreviewRect.width(), mPreviewRect.height()) * AF_REGION_BOX);
+    }
+
+    /** Returns width of metering region in pixels. */
+    private int getAERegionEdge() {
+        return (int) (Math.min(mPreviewRect.width(), mPreviewRect.height()) * AE_REGION_BOX);
+    }
+
     @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
     private void initializeFocusAreas(int x, int y) {
         if (mFocusArea == null) {
@@ -339,7 +375,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         }
 
         // Convert the coordinates to driver format.
-        calculateTapArea(x, y, 1f, mFocusArea.get(0).rect);
+        calculateTapArea(x, y, getAFRegionEdge(), mFocusArea.get(0).rect);
     }
 
     @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@@ -350,9 +386,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         }
 
         // Convert the coordinates to driver format.
-        // AE area is bigger because exposure is sensitive and
-        // easy to over- or underexposure if area is too small.
-        calculateTapArea(x, y, 1.5f, mMeteringArea.get(0).rect);
+        calculateTapArea(x, y, getAERegionEdge(), mMeteringArea.get(0).rect);
     }
 
     public void onSingleTapUp(int x, int y) {
@@ -379,7 +413,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         }
 
         // Use margin to set the focus indicator to the touched area.
-        mUI.setFocusPosition(x, y, false);
+        mUI.setFocusPosition(x, y, false, getAFRegionEdge(), getAERegionEdge());
         // Log manual tap to focus.
         mTouchCoordinate = new TouchCoordinate(x, y, mPreviewRect.width(), mPreviewRect.height());
         mTouchTime = System.currentTimeMillis();
@@ -395,18 +429,18 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
             updateFocusUI();
             // Reset the metering area in 4 seconds.
             mHandler.removeMessages(RESET_TOUCH_FOCUS);
-            mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY);
+            mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY_MILLIS);
         }
     }
 
     public void onPreviewStarted() {
         mState = STATE_IDLE;
+        resetTouchFocus();
     }
 
     public void onPreviewStopped() {
         // If auto focus was in progress, it would have been stopped.
         mState = STATE_IDLE;
-        resetTouchFocus();
         updateFocusUI();
     }
 
@@ -543,7 +577,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
                 // autoFocus call is not required.
                 mUI.onFocusStarted();
             }
-        } else if (mState == STATE_FOCUSING || mState == STATE_FOCUSING_SNAP_ON_FINISH) {
+        } else if (mState == STATE_FOCUSING) {
             mUI.onFocusStarted();
         } else {
             if (mFocusMode == CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) {
@@ -567,6 +601,9 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         // Initialize mFocusArea.
         mFocusArea = null;
         mMeteringArea = null;
+        // This will cause current module to call getFocusAreas() and
+        // getMeteringAreas() and send updated regions to camera.
+        mListener.setFocusParameters();
 
         if (mTouchCoordinate != null) {
             UsageStatistics.instance().tapToFocus(mTouchCoordinate,
@@ -575,24 +612,17 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
         }
     }
 
-    private void calculateTapArea(int x, int y, float areaMultiple, Rect rect) {
-        int areaSize = (int) (getAreaSize() * areaMultiple);
-        int left = CameraUtil.clamp(x - areaSize / 2, mPreviewRect.left,
-                mPreviewRect.right - areaSize);
-        int top = CameraUtil.clamp(y - areaSize / 2, mPreviewRect.top,
-                mPreviewRect.bottom - areaSize);
+    private void calculateTapArea(int x, int y, int size, Rect rect) {
+        int left = CameraUtil.clamp(x - size / 2, mPreviewRect.left,
+                mPreviewRect.right - size);
+        int top = CameraUtil.clamp(y - size / 2, mPreviewRect.top,
+                mPreviewRect.bottom - size);
 
-        RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);
+        RectF rectF = new RectF(left, top, left + size, top + size);
         mMatrix.mapRect(rectF);
         CameraUtil.rectFToRect(rectF, rect);
     }
 
-    private int getAreaSize() {
-        // Recommended focus area size from the manufacture is 1/8 of the image
-        // width (i.e. longer edge of the image)
-        return Math.max(mPreviewRect.width(), mPreviewRect.height()) / 8;
-    }
-
     /* package */ int getFocusState() {
         return mState;
     }
index ee75e21..3816819 100644 (file)
@@ -18,6 +18,7 @@ package com.android.camera;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -25,6 +26,7 @@ import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
 import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.ImageButton;
@@ -58,7 +60,7 @@ public class MultiToggleImageButton extends ImageButton {
     public static final int ANIM_DIRECTION_VERTICAL = 0;
     public static final int ANIM_DIRECTION_HORIZONTAL = 1;
 
-    private static final int AINM_DURATION_MS = 250;
+    private static final int ANIM_DURATION_MS = 250;
     private static final int UNSET = -1;
 
     private OnStateChangeListener mOnStateChangeListener;
@@ -69,6 +71,8 @@ public class MultiToggleImageButton extends ImageButton {
     private boolean mClickEnabled = true;
     private int mParentSize;
     private int mAnimDirection;
+    private Matrix mMatrix = new Matrix();
+    private ValueAnimator mAnimator;
 
     public MultiToggleImageButton(Context context) {
         super(context);
@@ -123,6 +127,16 @@ public class MultiToggleImageButton extends ImageButton {
      * @param callListener should the state change listener be called?
      */
     public void setState(final int state, final boolean callListener) {
+        setStateAnimatedInternal(state, callListener);
+    }
+
+    /**
+     * Set the current button state via an animated transition.
+     *
+     * @param state
+     * @param callListener
+     */
+    private void setStateAnimatedInternal(final int state, final boolean callListener) {
         if (mState == state || mState == UNSET) {
             setStateInternal(state, callListener);
             return;
@@ -132,60 +146,47 @@ public class MultiToggleImageButton extends ImageButton {
             return;
         }
 
-        Bitmap bitmap = combine(mState, state);
-        if (bitmap == null) {
-            setStateInternal(state, callListener);
-            return;
-        }
-
-        setImageBitmap(bitmap);
-        final Matrix matrix = new Matrix();
-
-        int offset;
-        if (mAnimDirection == ANIM_DIRECTION_VERTICAL) {
-            offset = (mParentSize+getHeight())/2;
-        } else if (mAnimDirection == ANIM_DIRECTION_HORIZONTAL) {
-            offset = (mParentSize+getWidth())/2;
-        } else {
-            return;
-        }
-
-        ValueAnimator animator = ValueAnimator.ofFloat(-offset, 0.0f);
-        animator.setDuration(AINM_DURATION_MS);
-        animator.setInterpolator(Gusterpolator.INSTANCE);
-        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                matrix.reset();
-                if (mAnimDirection == ANIM_DIRECTION_VERTICAL) {
-                    matrix.setTranslate(0.0f, (Float) animation.getAnimatedValue());
-                } else if (mAnimDirection == ANIM_DIRECTION_HORIZONTAL) {
-                    matrix.setTranslate((Float) animation.getAnimatedValue(), 0.0f);
-                }
-
-                setImageMatrix(matrix);
-                invalidate();
-            }
-        });
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                setClickEnabled(false);
-            }
-
+        new AsyncTask<Integer, Void, Bitmap>() {
             @Override
-            public void onAnimationEnd(Animator animation) {
-                setStateInternal(state, callListener);
-                setClickEnabled(true);
+            protected Bitmap doInBackground(Integer... params) {
+                return combine(params[0], params[1]);
             }
 
             @Override
-            public void onAnimationCancel(Animator animation) {
-                setStateInternal(state, callListener);
-                setClickEnabled(true);
+            protected void onPostExecute(Bitmap bitmap) {
+                if (bitmap == null) {
+                    setStateInternal(state, callListener);
+                } else {
+                    setImageBitmap(bitmap);
+
+                    int offset;
+                    if (mAnimDirection == ANIM_DIRECTION_VERTICAL) {
+                        offset = (mParentSize+getHeight())/2;
+                    } else if (mAnimDirection == ANIM_DIRECTION_HORIZONTAL) {
+                        offset = (mParentSize+getWidth())/2;
+                    } else {
+                        return;
+                    }
+
+                    mAnimator.setFloatValues(-offset, 0.0f);
+                    AnimatorSet s = new AnimatorSet();
+                    s.play(mAnimator);
+                    s.addListener(new AnimatorListenerAdapter() {
+                        @Override
+                        public void onAnimationStart(Animator animation) {
+                            setClickEnabled(false);
+                        }
+
+                        @Override
+                        public void onAnimationEnd(Animator animation) {
+                            setStateInternal(state, callListener);
+                            setClickEnabled(true);
+                        }
+                    });
+                    s.start();
+                }
             }
-        });
-        animator.start();
+        }.execute(mState, state);
     }
 
     /**
@@ -240,6 +241,24 @@ public class MultiToggleImageButton extends ImageButton {
             }
         });
         setScaleType(ImageView.ScaleType.MATRIX);
+
+        mAnimator = ValueAnimator.ofFloat(0.0f, 0.0f);
+        mAnimator.setDuration(ANIM_DURATION_MS);
+        mAnimator.setInterpolator(Gusterpolator.INSTANCE);
+        mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                mMatrix.reset();
+                if (mAnimDirection == ANIM_DIRECTION_VERTICAL) {
+                    mMatrix.setTranslate(0.0f, (Float) animation.getAnimatedValue());
+                } else if (mAnimDirection == ANIM_DIRECTION_HORIZONTAL) {
+                    mMatrix.setTranslate((Float) animation.getAnimatedValue(), 0.0f);
+                }
+
+                setImageMatrix(mMatrix);
+                invalidate();
+            }
+        });
     }
 
     private void parseAttributes(Context context, AttributeSet attrs) {
@@ -274,6 +293,10 @@ public class MultiToggleImageButton extends ImageButton {
                 ids.recycle();
             }
         }
+
+        if (mState >= 0 && mState < mImageIds.length) {
+            setImageByState(mState);
+        }
     }
 
     /**
index edc877b..c1c36e8 100644 (file)
@@ -20,7 +20,6 @@ import android.app.Activity;
 import android.content.Context;
 import android.graphics.PixelFormat;
 import android.os.Handler;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.WindowManager;
@@ -44,10 +43,6 @@ import com.android.camera2.R;
 public class OnScreenHint {
     static final Log.Tag TAG = new Log.Tag("OnScreenHint");
 
-    int mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
-    int mX, mY;
-    float mHorizontalMargin;
-    float mVerticalMargin;
     View mView;
     View mNextView;
 
@@ -65,8 +60,6 @@ public class OnScreenHint {
      */
     private OnScreenHint(Activity activity) {
         mWM = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
-        mY = activity.getResources().getDimensionPixelSize(
-                R.dimen.hint_y_offset);
 
         mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
         mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
@@ -142,23 +135,10 @@ public class OnScreenHint {
             // remove the old view if necessary
             handleHide();
             mView = mNextView;
-            final int gravity = mGravity;
-            mParams.gravity = gravity;
-            if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK)
-                    == Gravity.FILL_HORIZONTAL) {
-                mParams.horizontalWeight = 1.0f;
-            }
-            if ((gravity & Gravity.VERTICAL_GRAVITY_MASK)
-                    == Gravity.FILL_VERTICAL) {
-                mParams.verticalWeight = 1.0f;
-            }
-            mParams.x = mX;
-            mParams.y = mY;
-            mParams.verticalMargin = mVerticalMargin;
-            mParams.horizontalMargin = mHorizontalMargin;
             if (mView.getParent() != null) {
                 mWM.removeView(mView);
             }
+
             mWM.addView(mView, mParams);
         }
     }
index d1e045a..d95a0fc 100644 (file)
@@ -32,8 +32,7 @@ public interface PhotoController extends OnShutterButtonListener {
     // Switching between cameras.
     public static final int SWITCHING_CAMERA = 4;
 
-    // returns the actual set zoom value
-    public int onZoomChanged(int requestedZoom);
+    public void onZoomChanged(float requestedZoom);
 
     public boolean isImageCaptureIntent();
 
index 45002f2..b4b5ee7 100644 (file)
@@ -29,9 +29,7 @@ import android.hardware.SensorEvent;
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
 import android.location.Location;
-import android.media.AudioManager;
 import android.media.CameraProfile;
-import android.media.SoundPool;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
@@ -77,6 +75,7 @@ import com.android.camera.util.SessionStatsCollector;
 import com.android.camera.util.UsageStatistics;
 import com.android.camera.widget.AspectRatioSelector;
 import com.android.camera2.R;
+import com.android.ex.camera2.portability.CameraAgent;
 import com.android.ex.camera2.portability.CameraAgent.CameraAFCallback;
 import com.android.ex.camera2.portability.CameraAgent.CameraAFMoveCallback;
 import com.android.ex.camera2.portability.CameraAgent.CameraPictureCallback;
@@ -127,10 +126,6 @@ public class PhotoModule
     private static final int UPDATE_PARAM_PREFERENCE = 4;
     private static final int UPDATE_PARAM_ALL = -1;
 
-    // This is the delay before we execute onResume tasks when coming
-    // from the lock screen, to allow time for onPause to execute.
-    private static final int ON_RESUME_TASKS_DELAY_MSEC = 20;
-
     private static final String DEBUG_IMAGE_PREFIX = "DEBUG_";
 
     private CameraActivity mActivity;
@@ -151,7 +146,7 @@ public class PhotoModule
     // needed to be updated in mUpdateSet.
     private int mUpdateSet;
 
-    private int mZoomValue; // The current zoom value.
+    private float mZoomValue; // The current zoom ratio.
     private int mTimerDuration;
     /** Set when a volume button is clicked to take photo */
     private boolean mVolumeButtonClickedFlag = false;
@@ -196,8 +191,6 @@ public class PhotoModule
     // The display rotation in degrees. This is only valid when mCameraState is
     // not PREVIEW_STOPPED.
     private int mDisplayRotation;
-    // The value for android.hardware.Camera.setDisplayOrientation.
-    private int mCameraDisplayOrientation;
     // The value for UI components like indicators.
     private int mDisplayOrientation;
     // The value for cameradevice.CameraSettings.setPhotoRotationDegrees.
@@ -225,8 +218,6 @@ public class PhotoModule
                     ? new AutoFocusMoveCallback()
                     : null;
 
-    private final CameraErrorCallback mErrorCallback = new CameraErrorCallback();
-
     private long mFocusStartTime;
     private long mShutterCallbackTime;
     private long mPostViewPictureCallbackTime;
@@ -250,7 +241,7 @@ public class PhotoModule
     private FocusOverlayManager mFocusManager;
 
     private final int mGcamModeIndex;
-    private final CountdownSoundPlayer mCountdownSoundPlayer = new CountdownSoundPlayer();
+    private SoundPlayer mCountdownSoundPlayer;
 
     private CameraCapabilities.SceneMode mSceneMode;
 
@@ -263,6 +254,9 @@ public class PhotoModule
     private final float[] mR = new float[16];
     private int mHeading = -1;
 
+    /** Used to detect motion. We use this to release focus lock early. */
+    private MotionManager mMotionManager;
+
     /** True if all the parameters needed to start preview is ready. */
     private boolean mCameraPreviewParamsReady = false;
 
@@ -277,13 +271,6 @@ public class PhotoModule
             };
     private boolean mShouldResizeTo16x9 = false;
 
-    private final Runnable mResumeTaskRunnable = new Runnable() {
-        @Override
-        public void run() {
-            onResumeTasks();
-        }
-    };
-
     /**
      * We keep the flash setting before entering scene modes (HDR)
      * and restore it after HDR is off.
@@ -327,6 +314,10 @@ public class PhotoModule
     }
 
     private void checkDisplayRotation() {
+        // Need to just be a no-op for the quick resume-pause scenario.
+        if (mPaused) {
+            return;
+        }
         // Set the display orientation if display rotation has changed.
         // Sometimes this happens when the device is held upside
         // down and camera app is opened. Rotation animation will
@@ -451,6 +442,7 @@ public class PhotoModule
         mQuickCapture = mActivity.getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
         mSensorManager = (SensorManager) (mActivity.getSystemService(Context.SENSOR_SERVICE));
         mUI.setCountdownFinishedListener(this);
+        mCountdownSoundPlayer = new SoundPlayer(mAppController.getAndroidContext());
 
         // TODO: Make this a part of app controller API.
         View cancelButton = mActivity.findViewById(R.id.shutter_cancel_button);
@@ -469,6 +461,7 @@ public class PhotoModule
         }
         mAppController.getCameraAppUI().transitionToCapture();
         mAppController.getCameraAppUI().showModeOptions();
+        mAppController.setShutterEnabled(true);
     }
 
     @Override
@@ -485,6 +478,7 @@ public class PhotoModule
 
     private void onPreviewStarted() {
         mAppController.onPreviewStarted();
+        mAppController.setShutterEnabled(true);
         setCameraState(IDLE);
         startFaceDetection();
         settingsFirstRun();
@@ -527,7 +521,14 @@ public class PhotoModule
             }, createAspectRatioDialogCallback());
         } else {
             // App upgrade. Only show aspect ratio selection.
-            mUI.showAspectRatioDialog(createAspectRatioDialogCallback());
+            boolean wasShown = mUI.showAspectRatioDialog(createAspectRatioDialogCallback());
+            if (!wasShown) {
+                // If the dialog was not shown, set this flag to true so that we
+                // never have to check for it again. It means that we don't need
+                // to show the dialog on this device.
+                mActivity.getSettingsManager().set(SettingsManager.SCOPE_GLOBAL,
+                        Keys.KEY_USER_SELECTED_ASPECT_RATIO, true);
+            }
         }
     }
 
@@ -607,6 +608,7 @@ public class PhotoModule
                     Keys.KEY_USER_SELECTED_ASPECT_RATIO);
                 Log.e(TAG, "aspect ratio after setting it to true=" + aspectRatio);
                 if (newAspectRatio != currentAspectRatio) {
+                    Log.i(TAG, "changing aspect ratio from dialog");
                     stopPreview();
                     startPreview();
                     mUI.setRunnableForNextFrame(dialogHandlingFinishedRunnable);
@@ -620,6 +622,7 @@ public class PhotoModule
 
     @Override
     public void onPreviewUIReady() {
+        Log.i(TAG, "onPreviewUIReady");
         startPreview();
     }
 
@@ -654,6 +657,7 @@ public class PhotoModule
         Log.i(TAG, "Start to switch camera. id=" + mPendingSwitchCameraId);
         closeCamera();
         mCameraId = mPendingSwitchCameraId;
+
         settingsManager.set(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID, mCameraId);
         requestCameraOpen();
         mUI.clearFaces();
@@ -672,6 +676,7 @@ public class PhotoModule
      * device, using {@link GservicesHelper} to choose between API-1 and API-2.
      */
     private void requestCameraOpen() {
+        Log.v(TAG, "requestCameraOpen");
         mActivity.getCameraProvider().requestCamera(mCameraId,
                 GservicesHelper.useCamera2ApiThroughPortabilityLayer(mActivity));
     }
@@ -714,7 +719,7 @@ public class PhotoModule
                 @Override
                 public void onStateChanged(int state) {
                     SettingsManager settingsManager = mActivity.getSettingsManager();
-                    if (GcamHelper.hasGcamCapture()) {
+                    if (GcamHelper.hasGcamAsSeparateModule()) {
                         // Set the camera setting to default backfacing.
                         settingsManager.setToDefault(mAppController.getModuleScope(),
                                                      Keys.KEY_CAMERA_ID);
@@ -730,7 +735,9 @@ public class PhotoModule
                                             CameraCapabilities.SceneMode.AUTO));
                         }
                         updateParametersSceneMode();
-                        mCameraDevice.applySettings(mCameraSettings);
+                        if (mCameraDevice != null) {
+                            mCameraDevice.applySettings(mCameraSettings);
+                        }
                         updateSceneMode();
                     }
                 }
@@ -763,7 +770,7 @@ public class PhotoModule
         // PhotoModule should hard reset HDR+ to off,
         // and HDR to off if HDR+ is supported.
         settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR_PLUS, false);
-        if (GcamHelper.hasGcamCapture()) {
+        if (GcamHelper.hasGcamAsSeparateModule()) {
             settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR, false);
         }
     }
@@ -887,7 +894,7 @@ public class PhotoModule
 
     @Override
     public void startFaceDetection() {
-        if (mFaceDetectionStarted) {
+        if (mFaceDetectionStarted || mCameraDevice == null) {
             return;
         }
         if (mCameraCapabilities.getMaxNumOfFacesSupported() > 0) {
@@ -901,7 +908,7 @@ public class PhotoModule
 
     @Override
     public void stopFaceDetection() {
-        if (!mFaceDetectionStarted) {
+        if (!mFaceDetectionStarted || mCameraDevice == null) {
             return;
         }
         if (mCameraCapabilities.getMaxNumOfFacesSupported() > 0) {
@@ -1016,6 +1023,7 @@ public class PhotoModule
 
         @Override
         public void onPictureTaken(final byte[] originalJpegData, final CameraProxy camera) {
+            Log.i(TAG, "onPictureTaken");
             mAppController.setShutterEnabled(true);
             if (mPaused) {
                 return;
@@ -1056,7 +1064,7 @@ public class PhotoModule
             mJpegPictureCallbackTime = 0;
 
             final ExifInterface exif = Exif.getExif(originalJpegData);
-
+            final NamedEntity name = mNamedImages.getNextNameEntity();
             if (mShouldResizeTo16x9) {
                 final ResizeBundle dataBundle = new ResizeBundle();
                 dataBundle.jpegData = originalJpegData;
@@ -1071,28 +1079,23 @@ public class PhotoModule
 
                     @Override
                     protected void onPostExecute(ResizeBundle result) {
-                        saveFinalPhoto(result.jpegData, result.exif, camera);
+                        saveFinalPhoto(result.jpegData, name, result.exif, camera);
                     }
                 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, dataBundle);
 
             } else {
-                saveFinalPhoto(originalJpegData, exif, camera);
+                saveFinalPhoto(originalJpegData, name, exif, camera);
             }
         }
 
-        void saveFinalPhoto(final byte[] jpegData, final ExifInterface exif, CameraProxy camera) {
-
+        void saveFinalPhoto(final byte[] jpegData, NamedEntity name, final ExifInterface exif,
+                CameraProxy camera) {
             int orientation = Exif.getOrientation(exif);
 
-            float zoomValue = 0f;
+            float zoomValue = 1.0f;
             if (mCameraCapabilities.supports(CameraCapabilities.Feature.ZOOM)) {
-                int zoomIndex = mCameraSettings.getCurrentZoomIndex();
-                List<Integer> zoomRatios = mCameraCapabilities.getZoomRatioList();
-                if (zoomRatios != null && zoomIndex < zoomRatios.size()) {
-                    zoomValue = 0.01f * zoomRatios.get(zoomIndex);
-                }
+                zoomValue = mCameraSettings.getCurrentZoomRatio();
             }
-
             boolean hdrOn = CameraCapabilities.SceneMode.HDR == mSceneMode;
             String flashSetting =
                     mActivity.getSettingsManager().getString(mAppController.getCameraScope(),
@@ -1100,7 +1103,7 @@ public class PhotoModule
             boolean gridLinesOn = Keys.areGridLinesOn(mActivity.getSettingsManager());
             UsageStatistics.instance().photoCaptureDoneEvent(
                     eventprotos.NavigationChange.Mode.PHOTO_CAPTURE,
-                    mNamedImages.mQueue.lastElement().title + ".jpg", exif,
+                    name.title + ".jpg", exif,
                     isCameraFrontFacing(), hdrOn, zoomValue, flashSetting, gridLinesOn,
                     (float) mTimerDuration, mShutterTouchCoordinate, mVolumeButtonClickedFlag);
             mShutterTouchCoordinate = null;
@@ -1125,7 +1128,6 @@ public class PhotoModule
                         height = s.width();
                     }
                 }
-                NamedEntity name = mNamedImages.getNextNameEntity();
                 String title = (name == null) ? null : name.title;
                 long date = (name == null) ? -1 : name.date;
 
@@ -1167,6 +1169,7 @@ public class PhotoModule
             } else {
                 mJpegImageData = jpegData;
                 if (!mQuickCapture) {
+                    Log.v(TAG, "showing UI");
                     mUI.showCapturedImageForReview(jpegData, orientation, mMirror);
                 } else {
                     onCaptureDone();
@@ -1268,12 +1271,15 @@ public class PhotoModule
 
     @Override
     public boolean capture() {
+        Log.i(TAG, "capture");
         // If we are already in the middle of taking a snapshot or the image
         // save request is full then ignore.
         if (mCameraDevice == null || mCameraState == SNAPSHOT_IN_PROGRESS
-                || mCameraState == SWITCHING_CAMERA || !mAppController.isShutterEnabled()) {
+                || mCameraState == SWITCHING_CAMERA) {
             return false;
         }
+        setCameraState(SNAPSHOT_IN_PROGRESS);
+
         mCaptureStartTime = System.currentTimeMillis();
 
         mPostViewPictureCallbackTime = 0;
@@ -1285,24 +1291,22 @@ public class PhotoModule
             animateAfterShutter();
         }
 
-        // Set rotation and gps data.
-        int orientation;
-
-        if (mActivity.isAutoRotateScreen()) {
-            orientation = mDisplayRotation;
-        } else {
-            orientation = mOrientation;
-        }
-        Characteristics info =
-                mActivity.getCameraProvider().getCharacteristics(mCameraId);
-        mJpegRotation = info.getJpegOrientation(orientation);
         Location loc = mActivity.getLocationManager().getCurrentLocation();
         CameraUtil.setGpsParameters(mCameraSettings, loc);
         mCameraDevice.applySettings(mCameraSettings);
 
-        // We don't want user to press the button again while taking a
-        // multi-second HDR photo.
-        mAppController.setShutterEnabled(false);
+        // Set JPEG orientation. Even if screen UI is locked in portrait, camera orientation should
+        // still match device orientation (e.g., users should always get landscape photos while
+        // capturing by putting device in landscape.)
+        int orientation = mActivity.isAutoRotateScreen() ? mDisplayRotation : mOrientation;
+        Characteristics info = mActivity.getCameraProvider().getCharacteristics(mCameraId);
+        mJpegRotation = info.getJpegOrientation(orientation);
+        mCameraDevice.setJpegOrientation(mJpegRotation);
+
+        Log.v(TAG, "capture orientation (screen:device:used:jpeg) " +
+                mDisplayRotation + ":" + mOrientation + ":" +
+                orientation + ":" + mJpegRotation);
+
         mCameraDevice.takePicture(mHandler,
                 new ShutterCallback(!animateBefore),
                 mRawPictureCallback, mPostViewPictureCallback,
@@ -1311,7 +1315,6 @@ public class PhotoModule
         mNamedImages.nameNewImage(mCaptureStartTime);
 
         mFaceDetectionStarted = false;
-        setCameraState(SNAPSHOT_IN_PROGRESS);
         return true;
     }
 
@@ -1333,25 +1336,29 @@ public class PhotoModule
             CameraCapabilities.FocusMode focusMode) {
         CameraCapabilities.Stringifier stringifier = mCameraCapabilities.getStringifier();
         SettingsManager settingsManager = mActivity.getSettingsManager();
-        settingsManager.set(mAppController.getCameraScope(), Keys.KEY_FLASH_MODE,
-                            stringifier.stringify(flashMode));
+        if (!CameraCapabilities.FlashMode.NO_FLASH.equals(flashMode)) {
+            settingsManager.set(mAppController.getCameraScope(), Keys.KEY_FLASH_MODE,
+                    stringifier.stringify(flashMode));
+        }
         settingsManager.set(mAppController.getCameraScope(), Keys.KEY_FOCUS_MODE,
-                            stringifier.stringify(focusMode));
+                stringifier.stringify(focusMode));
     }
 
     @Override
     public void onOrientationChanged(int orientation) {
-        // We keep the last known orientation. So if the user first orient
-        // the camera then point the camera to floor or sky, we still have
-        // the correct orientation.
         if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
             return;
         }
-        mOrientation = CameraUtil.roundOrientation(orientation, mOrientation);
+
+        // TODO: Document orientation compute logic and unify them in OrientationManagerImpl.
+        // b/17443789
+        // Flip to counter-clockwise orientation.
+        mOrientation = (360 - orientation) % 360;
     }
 
     @Override
     public void onCameraAvailable(CameraProxy cameraProxy) {
+        Log.i(TAG, "onCameraAvailable");
         if (mPaused) {
             return;
         }
@@ -1360,7 +1367,7 @@ public class PhotoModule
         initializeCapabilities();
 
         // Reset zoom value index.
-        mZoomValue = 0;
+        mZoomValue = 1.0f;
         if (mFocusManager == null) {
             initializeFocusManager();
         }
@@ -1368,6 +1375,7 @@ public class PhotoModule
 
         // Do camera parameter dependent initialization.
         mCameraSettings = mCameraDevice.getSettings();
+
         setCameraParameters(UPDATE_PARAM_ALL);
         // Set a listener which updates camera parameters based
         // on changed settings.
@@ -1388,6 +1396,7 @@ public class PhotoModule
 
     @Override
     public void onCaptureRetake() {
+        Log.i(TAG, "onCaptureRetake");
         if (mPaused) {
             return;
         }
@@ -1398,6 +1407,7 @@ public class PhotoModule
 
     @Override
     public void onCaptureDone() {
+        Log.i(TAG, "onCaptureDone");
         if (mPaused) {
             return;
         }
@@ -1416,9 +1426,11 @@ public class PhotoModule
                     outputStream.write(data);
                     outputStream.close();
 
+                    Log.v(TAG, "saved result to URI: " + mSaveUri);
                     mActivity.setResultEx(Activity.RESULT_OK);
                     mActivity.finish();
                 } catch (IOException ex) {
+                    Log.w(TAG, "exception saving result to URI: " + mSaveUri, ex);
                     // ignore exception
                 } finally {
                     CameraUtil.closeSilently(outputStream);
@@ -1428,6 +1440,7 @@ public class PhotoModule
                 int orientation = Exif.getOrientation(exif);
                 Bitmap bitmap = CameraUtil.makeBitmap(data, 50 * 1024);
                 bitmap = CameraUtil.rotate(bitmap, orientation);
+                Log.v(TAG, "inlined bitmap into capture intent result");
                 mActivity.setResultEx(Activity.RESULT_OK,
                         new Intent("inline-data").putExtra("data", bitmap));
                 mActivity.finish();
@@ -1443,11 +1456,14 @@ public class PhotoModule
                 tempStream.write(data);
                 tempStream.close();
                 tempUri = Uri.fromFile(path);
+                Log.v(TAG, "wrote temp file for cropping to: " + sTempCropFilename);
             } catch (FileNotFoundException ex) {
+                Log.w(TAG, "error writing temp cropping file to: " + sTempCropFilename, ex);
                 mActivity.setResultEx(Activity.RESULT_CANCELED);
                 mActivity.finish();
                 return;
             } catch (IOException ex) {
+                Log.w(TAG, "error writing temp cropping file to: " + sTempCropFilename, ex);
                 mActivity.setResultEx(Activity.RESULT_CANCELED);
                 mActivity.finish();
                 return;
@@ -1460,6 +1476,7 @@ public class PhotoModule
                 newExtras.putString("circleCrop", "true");
             }
             if (mSaveUri != null) {
+                Log.v(TAG, "setting output of cropped file to: " + mSaveUri);
                 newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, mSaveUri);
             } else {
                 newExtras.putBoolean(CameraUtil.KEY_RETURN_DATA, true);
@@ -1474,7 +1491,7 @@ public class PhotoModule
 
             cropIntent.setData(tempUri);
             cropIntent.putExtras(newExtras);
-
+            Log.v(TAG, "starting CROP intent for capture");
             mActivity.startActivityForResult(cropIntent, REQUEST_CROP);
         }
     }
@@ -1492,7 +1509,8 @@ public class PhotoModule
     @Override
     public void onShutterButtonClick() {
         if (mPaused || (mCameraState == SWITCHING_CAMERA)
-                || (mCameraState == PREVIEW_STOPPED)) {
+                || (mCameraState == PREVIEW_STOPPED)
+                || !mAppController.isShutterEnabled()) {
             mVolumeButtonClickedFlag = false;
             return;
         }
@@ -1507,6 +1525,8 @@ public class PhotoModule
         Log.d(TAG, "onShutterButtonClick: mCameraState=" + mCameraState +
                 " mVolumeButtonClickedFlag=" + mVolumeButtonClickedFlag);
 
+        mAppController.setShutterEnabled(false);
+
         int countDownDuration = mActivity.getSettingsManager()
             .getInteger(SettingsManager.SCOPE_GLOBAL, Keys.KEY_COUNTDOWN_DURATION);
         mTimerDuration = countDownDuration;
@@ -1543,16 +1563,16 @@ public class PhotoModule
 
     @Override
     public void onRemainingSecondsChanged(int remainingSeconds) {
-        mCountdownSoundPlayer.onRemainingSecondsChanged(remainingSeconds);
+        if (remainingSeconds == 1) {
+            mCountdownSoundPlayer.play(R.raw.timer_final_second, 0.6f);
+        } else if (remainingSeconds == 2 || remainingSeconds == 3) {
+            mCountdownSoundPlayer.play(R.raw.timer_increment, 0.6f);
+        }
     }
 
     @Override
     public void onCountDownFinished() {
-        if (mIsImageCaptureIntent) {
-            mAppController.getCameraAppUI().transitionToIntentReviewLayout();
-        } else {
-            mAppController.getCameraAppUI().transitionToCapture();
-        }
+        mAppController.getCameraAppUI().transitionToCapture();
         mAppController.getCameraAppUI().showModeOptions();
         if (mPaused) {
             return;
@@ -1560,13 +1580,12 @@ public class PhotoModule
         focusAndCapture();
     }
 
-    private void onResumeTasks() {
-        if (mPaused) {
-            return;
-        }
-        Log.v(TAG, "Executing onResumeTasks.");
+    @Override
+    public void resume() {
+        mPaused = false;
 
-        mCountdownSoundPlayer.loadSounds();
+        mCountdownSoundPlayer.loadSound(R.raw.timer_final_second);
+        mCountdownSoundPlayer.loadSound(R.raw.timer_increment);
         if (mFocusManager != null) {
             // If camera is not open when resume is called, focus manager will
             // not be initialized yet, in which case it will start listening to
@@ -1583,7 +1602,7 @@ public class PhotoModule
         requestCameraOpen();
 
         mJpegPictureCallbackTime = 0;
-        mZoomValue = 0;
+        mZoomValue = 1.0f;
 
         mOnResumeTime = SystemClock.uptimeMillis();
         checkDisplayRotation();
@@ -1645,9 +1664,9 @@ public class PhotoModule
                     new FocusOverlayManager(mAppController, defaultFocusModes,
                             mCameraCapabilities, this, mMirror, mActivity.getMainLooper(),
                             mUI.getFocusUI());
-            MotionManager motionManager = getServices().getMotionManager();
-            if (motionManager != null) {
-                motionManager.addListener(mFocusManager);
+            mMotionManager = getServices().getMotionManager();
+            if (mMotionManager != null) {
+                mMotionManager.addListener(mFocusManager);
             }
         }
         mAppController.addPreviewAreaSizeChangedListener(mFocusManager);
@@ -1663,27 +1682,9 @@ public class PhotoModule
     }
 
     @Override
-    public void resume() {
-        mPaused = false;
-
-        // Add delay on resume from lock screen only, in order to to speed up
-        // the onResume --> onPause --> onResume cycle from lock screen.
-        // Don't do always because letting go of thread can cause delay.
-        if (isResumeFromLockscreen()) {
-            Log.v(TAG, "On resume, from lock screen.");
-            // Note: onPauseAfterSuper() will delete this runnable, so we will
-            // at most have 1 copy queued up.
-            mHandler.postDelayed(mResumeTaskRunnable, ON_RESUME_TASKS_DELAY_MSEC);
-        } else {
-            Log.v(TAG, "On resume.");
-            onResumeTasks();
-        }
-    }
-
-    @Override
     public void pause() {
+        Log.v(TAG, "pause");
         mPaused = true;
-        mHandler.removeCallbacks(mResumeTaskRunnable);
         getServices().getRemoteShutterListener().onModuleExit();
         SessionStatsCollector.instance().sessionActive(false);
 
@@ -1708,7 +1709,8 @@ public class PhotoModule
         // (e.g. onResume -> onPause -> onResume).
         stopPreview();
         cancelCountDown();
-        mCountdownSoundPlayer.release();
+        mCountdownSoundPlayer.unloadSound(R.raw.timer_final_second);
+        mCountdownSoundPlayer.unloadSound(R.raw.timer_increment);
 
         mNamedImages = null;
         // If we are in an image capture intent and has taken
@@ -1718,6 +1720,11 @@ public class PhotoModule
         // Remove the messages and runnables in the queue.
         mHandler.removeCallbacksAndMessages(null);
 
+        if (mMotionManager != null) {
+            mMotionManager.removeListener(mFocusManager);
+            mMotionManager = null;
+        }
+
         closeCamera();
         mActivity.enableKeepScreenOn(false);
         mUI.onPause();
@@ -1736,7 +1743,7 @@ public class PhotoModule
 
     @Override
     public void destroy() {
-        // TODO: implement this.
+        mCountdownSoundPlayer.release();
     }
 
     @Override
@@ -1758,6 +1765,9 @@ public class PhotoModule
 
     @Override
     public void autoFocus() {
+        if (mCameraDevice == null) {
+            return;
+        }
         Log.v(TAG,"Starting auto focus");
         mFocusStartTime = System.currentTimeMillis();
         mCameraDevice.autoFocus(mHandler, mAutoFocusCallback);
@@ -1767,6 +1777,9 @@ public class PhotoModule
 
     @Override
     public void cancelAutoFocus() {
+        if (mCameraDevice == null) {
+            return;
+        }
         mCameraDevice.cancelAutoFocus();
         setCameraState(IDLE);
         setCameraParameters(UPDATE_PARAM_PREFERENCE);
@@ -1856,7 +1869,6 @@ public class PhotoModule
             stopFaceDetection();
             mCameraDevice.setZoomChangeListener(null);
             mCameraDevice.setFaceDetectionCallback(null, null);
-            mCameraDevice.setErrorCallback(null, null);
 
             mFaceDetectionStarted = false;
             mActivity.getCameraProvider().releaseCamera(mCameraDevice.getCameraId());
@@ -1871,7 +1883,6 @@ public class PhotoModule
         Characteristics info =
                 mActivity.getCameraProvider().getCharacteristics(mCameraId);
         mDisplayOrientation = info.getPreviewOrientation(mDisplayRotation);
-        mCameraDisplayOrientation = mDisplayOrientation;
         mUI.setDisplayOrientation(mDisplayOrientation);
         if (mFocusManager != null) {
             mFocusManager.setDisplayOrientation(mDisplayOrientation);
@@ -1880,10 +1891,13 @@ public class PhotoModule
         if (mCameraDevice != null) {
             mCameraDevice.setDisplayOrientation(mDisplayRotation);
         }
+        Log.v(TAG, "setDisplayOrientation (screen:preview) " +
+                mDisplayRotation + ":" + mDisplayOrientation);
     }
 
     /** Only called by UI thread. */
     private void setupPreview() {
+        Log.i(TAG, "setupPreview");
         mFocusManager.resetTouchFocus();
         startPreview();
     }
@@ -1918,11 +1932,16 @@ public class PhotoModule
      * The start/stop preview should only run on the UI thread.
      */
     private void startPreview() {
+        if (mCameraDevice == null) {
+            Log.i(TAG, "attempted to start preview before camera device");
+            // do nothing
+            return;
+        }
+
         if (!checkPreviewPreconditions()) {
             return;
         }
 
-        mCameraDevice.setErrorCallback(mHandler, mErrorCallback);
         setDisplayOrientation();
 
         if (!mSnapshotOnIdle) {
@@ -1934,17 +1953,38 @@ public class PhotoModule
             }
             mFocusManager.setAeAwbLock(false); // Unlock AE and AWB.
         }
+
+        // Nexus 4 must have picture size set to > 640x480 before other
+        // parameters are set in setCameraParameters, b/18227551. This call to
+        // updateParametersPictureSize should occur before setCameraParameters
+        // to address the issue.
+        updateParametersPictureSize();
+
         setCameraParameters(UPDATE_PARAM_ALL);
+
         mCameraDevice.setPreviewTexture(mActivity.getCameraAppUI().getSurfaceTexture());
 
         Log.i(TAG, "startPreview");
-        mCameraDevice.startPreview();
-
-        mFocusManager.onPreviewStarted();
-        onPreviewStarted();
-        SessionStatsCollector.instance().previewActive(true);
-        if (mSnapshotOnIdle) {
-            mHandler.post(mDoSnapRunnable);
+        // If we're using API2 in portability layers, don't use startPreviewWithCallback()
+        // b/17576554
+        CameraAgent.CameraStartPreviewCallback startPreviewCallback =
+            new CameraAgent.CameraStartPreviewCallback() {
+                @Override
+                public void onPreviewStarted() {
+                    mFocusManager.onPreviewStarted();
+                    PhotoModule.this.onPreviewStarted();
+                    SessionStatsCollector.instance().previewActive(true);
+                    if (mSnapshotOnIdle) {
+                        mHandler.post(mDoSnapRunnable);
+                    }
+                }
+            };
+        if (GservicesHelper.useCamera2ApiThroughPortabilityLayer(mActivity)) {
+            mCameraDevice.startPreview();
+            startPreviewCallback.onPreviewStarted();
+        } else {
+            mCameraDevice.startPreviewWithCallback(new Handler(Looper.getMainLooper()),
+                    startPreviewCallback);
         }
     }
 
@@ -2009,7 +2049,7 @@ public class PhotoModule
     private void updateCameraParametersZoom() {
         // Set zoom.
         if (mCameraCapabilities.supports(CameraCapabilities.Feature.ZOOM)) {
-            mCameraSettings.setZoomIndex(mZoomValue);
+            mCameraSettings.setZoomRatio(mZoomValue);
         }
     }
 
@@ -2040,6 +2080,12 @@ public class PhotoModule
     }
 
     private void updateCameraParametersPreference() {
+        // some monkey tests can get here when shutting the app down
+        // make sure mCameraDevice is still valid, b/17580046
+        if (mCameraDevice == null) {
+            return;
+        }
+
         setAutoExposureLockIfSupported();
         setAutoWhiteBalanceLockIfSupported();
         setFocusAreasIfSupported();
@@ -2054,9 +2100,6 @@ public class PhotoModule
                         CameraCapabilities.FocusMode.CONTINUOUS_PICTURE
         );
 
-        // Set picture size.
-        updateParametersPictureSize();
-
         // Set JPEG quality.
         updateParametersPictureQuality();
 
@@ -2074,7 +2117,17 @@ public class PhotoModule
         }
     }
 
+    /**
+     * This method sets picture size parameters. Size parameters should only be
+     * set when the preview is stopped, and so this method is only invoked in
+     * {@link #startPreview()} just before starting the preview.
+     */
     private void updateParametersPictureSize() {
+        if (mCameraDevice == null) {
+            Log.w(TAG, "attempting to set picture size without caemra device");
+            return;
+        }
+
         SettingsManager settingsManager = mActivity.getSettingsManager();
         String pictureSizeKey = isCameraFrontFacing() ? Keys.KEY_PICTURE_SIZE_FRONT
             : Keys.KEY_PICTURE_SIZE_BACK;
@@ -2104,24 +2157,19 @@ public class PhotoModule
                 (double) size.width() / size.height());
         Size original = mCameraSettings.getCurrentPreviewSize();
         if (!optimalSize.equals(original)) {
+            Log.v(TAG, "setting preview size. optimal: " + optimalSize + "original: " + original);
             mCameraSettings.setPreviewSize(optimalSize);
 
-            // Zoom related settings will be changed for different preview
-            // sizes, so set and read the parameters to get latest values
-            if (mHandler.getLooper() == Looper.myLooper()) {
-                // On UI thread only, not when camera starts up
-                setupPreview();
-            } else {
-                mCameraDevice.applySettings(mCameraSettings);
-            }
+            mCameraDevice.applySettings(mCameraSettings);
             mCameraSettings = mCameraDevice.getSettings();
         }
 
         if (optimalSize.width() != 0 && optimalSize.height() != 0) {
+            Log.v(TAG, "updating aspect ratio");
             mUI.updatePreviewAspectRatio((float) optimalSize.width()
                     / (float) optimalSize.height());
         }
-        Log.i(TAG, "Preview size is " + optimalSize);
+        Log.d(TAG, "Preview size is " + optimalSize);
     }
 
     private void updateParametersPictureQuality() {
@@ -2200,6 +2248,9 @@ public class PhotoModule
 
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
     private void updateAutoFocusMoveCallback() {
+        if (mCameraDevice == null) {
+            return;
+        }
         if (mCameraSettings.getCurrentFocusMode() ==
                 CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) {
             mCameraDevice.setAutoFocusMoveCallback(mHandler,
@@ -2243,7 +2294,9 @@ public class PhotoModule
             updateCameraParametersPreference();
         }
 
-        mCameraDevice.applySettings(mCameraSettings);
+        if (mCameraDevice != null) {
+            mCameraDevice.applySettings(mCameraSettings);
+        }
     }
 
     // If the Camera is idle, update the parameters immediately, otherwise
@@ -2299,25 +2352,19 @@ public class PhotoModule
                 mCameraCapabilities.supports(CameraCapabilities.FocusMode.CONTINUOUS_PICTURE);
     }
 
-    // TODO: Use zoomRatio device API rather than deprecated zoomIndex
     @Override
-    public int onZoomChanged(int index) {
+    public void onZoomChanged(float ratio) {
         // Not useful to change zoom value when the activity is paused.
         if (mPaused) {
-            return index;
+            return;
         }
-        mZoomValue = index;
+        mZoomValue = ratio;
         if (mCameraSettings == null || mCameraDevice == null) {
-            return index;
+            return;
         }
         // Set zoom parameters asynchronously
-        mCameraSettings.setZoomIndex(mZoomValue);
+        mCameraSettings.setZoomRatio(mZoomValue);
         mCameraDevice.applySettings(mCameraSettings);
-        CameraSettings settings = mCameraDevice.getSettings();
-        if (settings != null) {
-            return settings.getCurrentZoomIndex();
-        }
-        return index;
     }
 
     @Override
@@ -2393,42 +2440,4 @@ public class PhotoModule
             }
         });
     }
-
-    /**
-     * This class manages the loading/releasing/playing of the sounds needed for
-     * countdown timer.
-     */
-    private class CountdownSoundPlayer {
-        private SoundPool mSoundPool;
-        private int mBeepOnce;
-        private int mBeepTwice;
-
-        void loadSounds() {
-            // Load the beeps.
-            if (mSoundPool == null) {
-                mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
-                mBeepOnce = mSoundPool.load(mAppController.getAndroidContext(), R.raw.beep_once, 1);
-                mBeepTwice = mSoundPool.load(mAppController.getAndroidContext(), R.raw.beep_twice, 1);
-            }
-        }
-
-        void onRemainingSecondsChanged(int newVal) {
-            if (mSoundPool == null) {
-                Log.e(TAG, "Cannot play sound - they have not been loaded.");
-                return;
-            }
-            if (newVal == 1) {
-                mSoundPool.play(mBeepTwice, 1.0f, 1.0f, 0, 0, 1.0f);
-            } else if (newVal == 2 || newVal == 3) {
-                mSoundPool.play(mBeepOnce, 1.0f, 1.0f, 0, 0, 1.0f);
-            }
-        }
-
-        void release() {
-            if (mSoundPool != null) {
-                mSoundPool.release();
-                mSoundPool = null;
-            }
-        }
-    }
 }
index e7be5be..dac4cb3 100644 (file)
@@ -19,7 +19,6 @@ package com.android.camera;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.graphics.Bitmap;
-import android.graphics.Color;
 import android.graphics.Matrix;
 import android.graphics.RectF;
 import android.graphics.SurfaceTexture;
@@ -34,22 +33,23 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 
 import com.android.camera.FocusOverlayManager.FocusUI;
+import com.android.camera.debug.DebugPropertyHelper;
 import com.android.camera.debug.Log;
 import com.android.camera.ui.CountDownView;
 import com.android.camera.ui.FaceView;
 import com.android.camera.ui.PreviewOverlay;
 import com.android.camera.ui.PreviewStatusListener;
+import com.android.camera.util.ApiHelper;
 import com.android.camera.util.CameraUtil;
+import com.android.camera.util.GservicesHelper;
 import com.android.camera.widget.AspectRatioDialogLayout;
 import com.android.camera.widget.AspectRatioSelector;
 import com.android.camera.widget.LocationDialogLayout;
 import com.android.camera2.R;
-import com.android.ex.camera2.portability.CameraCapabilities;
 import com.android.ex.camera2.portability.CameraAgent;
+import com.android.ex.camera2.portability.CameraCapabilities;
 import com.android.ex.camera2.portability.CameraSettings;
 
-import java.util.List;
-
 public class PhotoUI implements PreviewStatusListener,
     CameraAgent.CameraFaceDetectionCallback, PreviewStatusListener.PreviewAreaChangedListener {
 
@@ -66,11 +66,10 @@ public class PhotoUI implements PreviewStatusListener,
     private Dialog mDialog = null;
 
     // TODO: Remove face view logic if UX does not bring it back within a month.
-    private final FaceView mFaceView = null;
+    private final FaceView mFaceView;
     private DecodeImageForReview mDecodeTaskForReview = null;
 
-    private int mZoomMax;
-    private List<Integer> mZoomRatios;
+    private float mZoomMax;
 
     private int mPreviewWidth = 0;
     private int mPreviewHeight = 0;
@@ -94,7 +93,7 @@ public class PhotoUI implements PreviewStatusListener,
         }
     };
     private Runnable mRunnableForNextFrame = null;
-    private CountDownView mCountdownView;
+    private final CountDownView mCountdownView;
 
     @Override
     public GestureDetector.OnGestureListener getGestureListener() {
@@ -236,6 +235,12 @@ public class PhotoUI implements PreviewStatusListener,
         mFocusUI = (FocusUI) mRootView.findViewById(R.id.focus_overlay);
         mPreviewOverlay = (PreviewOverlay) mRootView.findViewById(R.id.preview_overlay);
         mCountdownView = (CountDownView) mRootView.findViewById(R.id.count_down_view);
+        // Show faces if we are in debug mode.
+        if (DebugPropertyHelper.showCaptureDebugUI()) {
+            mFaceView = (FaceView) mRootView.findViewById(R.id.face_view);
+        } else {
+            mFaceView = null;
+        }
 
         if (mController.isImageCaptureIntent()) {
             initIntentReviewImageView();
@@ -400,18 +405,24 @@ public class PhotoUI implements PreviewStatusListener,
         }
     }
 
-    public void showAspectRatioDialog(final PhotoModule.AspectRatioDialogCallback callback) {
+    /**
+     * @return Whether the dialog was shown.
+     */
+    public boolean showAspectRatioDialog(final PhotoModule.AspectRatioDialogCallback callback) {
         if (showAspectRatioDialogOnThisDevice()) {
             setDialog(new Dialog(mActivity, android.R.style.Theme_Black_NoTitleBar_Fullscreen));
             showAspectRatioDialog(callback, mDialog);
+            return true;
+        } else {
+            return false;
         }
     }
 
-    private void showAspectRatioDialog(final PhotoModule.AspectRatioDialogCallback callback,
+    private boolean showAspectRatioDialog(final PhotoModule.AspectRatioDialogCallback callback,
             final Dialog aspectRatioDialog) {
         if (aspectRatioDialog == null) {
             Log.e(TAG, "Dialog for aspect ratio is null.");
-            return;
+            return false;
         }
         final AspectRatioDialogLayout aspectRatioDialogLayout =
                 (AspectRatioDialogLayout) mActivity
@@ -434,6 +445,7 @@ public class PhotoUI implements PreviewStatusListener,
         aspectRatioDialog.setContentView(aspectRatioDialogLayout, new ViewGroup.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
         aspectRatioDialog.show();
+        return true;
     }
 
     /**
@@ -441,8 +453,10 @@ public class PhotoUI implements PreviewStatusListener,
      *         intro dialog on.
      */
     private boolean showAspectRatioDialogOnThisDevice() {
-        // We only want to show that dialog on N4 and N5
-        return "hammerhead".equals(Build.DEVICE) || "mako".equals(Build.DEVICE);
+        // We only want to show that dialog on N4/N5/N6
+        // Don't show if using API2 portability, b/17462976
+        return !GservicesHelper.useCamera2ApiThroughPortabilityLayer(mActivity) &&
+                (ApiHelper.IS_NEXUS_4 || ApiHelper.IS_NEXUS_5 || ApiHelper.IS_NEXUS_6);
     }
 
     public void initializeZoom(CameraCapabilities capabilities, CameraSettings settings) {
@@ -450,12 +464,11 @@ public class PhotoUI implements PreviewStatusListener,
                 !capabilities.supports(CameraCapabilities.Feature.ZOOM)) {
             return;
         }
-        mZoomMax = capabilities.getMaxZoomIndex();
-        mZoomRatios = capabilities.getZoomRatioList();
+        mZoomMax = capabilities.getMaxZoomRatio();
         // Currently we use immediate zoom for fast zooming to get better UX and
         // there is no plan to take advantage of the smooth zoom.
         // TODO: Need to setup a path to AppUI to do this
-        mPreviewOverlay.setupZoom(mZoomMax, settings.getCurrentZoomIndex(), mZoomRatios,
+        mPreviewOverlay.setupZoom(mZoomMax, settings.getCurrentZoomRatio(),
                 new ZoomChangeListener());
     }
 
@@ -501,8 +514,8 @@ public class PhotoUI implements PreviewStatusListener,
 
     private class ZoomChangeListener implements PreviewOverlay.OnZoomChangedListener {
         @Override
-        public void onZoomValueChanged(int index) {
-            mController.onZoomChanged(index);
+        public void onZoomValueChanged(float ratio) {
+            mController.onZoomChanged(ratio);
         }
 
         @Override
@@ -525,6 +538,8 @@ public class PhotoUI implements PreviewStatusListener,
         if (mDialog != null) {
             mDialog.dismiss();
         }
+        // recalculate aspect ratio when restarting.
+        mAspectRatio = 0.0f;
     }
 
     public void clearFaces() {
diff --git a/src/com/android/camera/PreviewGestures.java b/src/com/android/camera/PreviewGestures.java
deleted file mode 100644 (file)
index 8ab4a7f..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.view.GestureDetector;
-import android.view.MotionEvent;
-import android.view.ScaleGestureDetector;
-import android.view.View;
-
-import com.android.camera.debug.Log;
-import com.android.camera.ui.PieRenderer;
-import com.android.camera.ui.RenderOverlay;
-import com.android.camera.ui.ZoomRenderer;
-
-/* PreviewGestures disambiguates touch events received on RenderOverlay
- * and dispatch them to the proper recipient (i.e. zoom renderer or pie renderer).
- * Touch events on CameraControls will be handled by framework.
- * */
-public class PreviewGestures
-        implements ScaleGestureDetector.OnScaleGestureListener {
-
-    private static final Log.Tag TAG = new Log.Tag("PreviewGestures");
-
-    private static final int MODE_NONE = 0;
-    private static final int MODE_ZOOM = 2;
-
-    public static final int DIR_UP = 0;
-    public static final int DIR_DOWN = 1;
-    public static final int DIR_LEFT = 2;
-    public static final int DIR_RIGHT = 3;
-
-    private final SingleTapListener mTapListener;
-    private RenderOverlay mOverlay;
-    private final PieRenderer mPie;
-    private final ZoomRenderer mZoom;
-    private MotionEvent mDown;
-    private MotionEvent mCurrent;
-    private final ScaleGestureDetector mScale;
-    private int mMode;
-    private boolean mZoomEnabled;
-    private boolean mEnabled;
-    private boolean mZoomOnly;
-    private final GestureDetector mGestureDetector;
-
-    private final GestureDetector.SimpleOnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
-        @Override
-        public void onLongPress (MotionEvent e) {
-            // Open pie
-            if (!mZoomOnly && mPie != null && !mPie.showsItems()) {
-                openPie();
-            }
-        }
-
-        @Override
-        public boolean onSingleTapUp (MotionEvent e) {
-            // Tap to focus when pie is not open
-            if (mPie == null || !mPie.showsItems()) {
-                mTapListener.onSingleTapUp(null, (int) e.getX(), (int) e.getY());
-                return true;
-            }
-            return false;
-        }
-
-        @Override
-        public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
-            if (e1 == null) {
-                // e1 can be null if for some cases.
-                return false;
-            }
-            if (mZoomOnly || mMode == MODE_ZOOM) return false;
-            int deltaX = (int) (e1.getX() - e2.getX());
-            int deltaY = (int) (e1.getY() - e2.getY());
-            if (deltaY > 2 * deltaX && deltaY > -2 * deltaX) {
-                // Open pie on swipe up
-                if (mPie != null && !mPie.showsItems()) {
-                    openPie();
-                    return true;
-                }
-            }
-            return false;
-        }
-    };
-
-    public interface SingleTapListener {
-        public void onSingleTapUp(View v, int x, int y);
-    }
-
-    public PreviewGestures(CameraActivity ctx, SingleTapListener tapListener,
-            ZoomRenderer zoom, PieRenderer pie) {
-        mTapListener = tapListener;
-        mPie = pie;
-        mZoom = zoom;
-        mMode = MODE_NONE;
-        mScale = new ScaleGestureDetector(ctx, this);
-        mEnabled = true;
-        mGestureDetector = new GestureDetector(mGestureListener);
-    }
-
-    public void setRenderOverlay(RenderOverlay overlay) {
-        mOverlay = overlay;
-    }
-
-    public void setEnabled(boolean enabled) {
-        mEnabled = enabled;
-    }
-
-    public void setZoomEnabled(boolean enable) {
-        mZoomEnabled = enable;
-    }
-
-    public void setZoomOnly(boolean zoom) {
-        mZoomOnly = zoom;
-    }
-
-    public boolean isEnabled() {
-        return mEnabled;
-    }
-
-    public boolean dispatchTouch(MotionEvent m) {
-        if (!mEnabled) {
-            return false;
-        }
-        mCurrent = m;
-        if (MotionEvent.ACTION_DOWN == m.getActionMasked()) {
-            mMode = MODE_NONE;
-            mDown = MotionEvent.obtain(m);
-        }
-
-        // If pie is open, redirects all the touch events to pie.
-        if (mPie != null && mPie.isOpen()) {
-            return sendToPie(m);
-        }
-
-        // If pie is not open, send touch events to gesture detector and scale
-        // listener to recognize the gesture.
-        mGestureDetector.onTouchEvent(m);
-        if (mZoom != null) {
-            mScale.onTouchEvent(m);
-            if (MotionEvent.ACTION_POINTER_DOWN == m.getActionMasked()) {
-                mMode = MODE_ZOOM;
-                if (mZoomEnabled) {
-                    // Start showing zoom UI as soon as there is a second finger down
-                    mZoom.onScaleBegin(mScale);
-                }
-            } else if (MotionEvent.ACTION_POINTER_UP == m.getActionMasked()) {
-                mZoom.onScaleEnd(mScale);
-            }
-        }
-        return true;
-    }
-
-    private MotionEvent makeCancelEvent(MotionEvent m) {
-        MotionEvent c = MotionEvent.obtain(m);
-        c.setAction(MotionEvent.ACTION_CANCEL);
-        return c;
-    }
-
-    private void openPie() {
-        mGestureDetector.onTouchEvent(makeCancelEvent(mDown));
-        mScale.onTouchEvent(makeCancelEvent(mDown));
-        mOverlay.directDispatchTouch(mDown, mPie);
-    }
-
-    private boolean sendToPie(MotionEvent m) {
-        return mOverlay.directDispatchTouch(m, mPie);
-    }
-
-    // OnScaleGestureListener implementation
-    @Override
-    public boolean onScale(ScaleGestureDetector detector) {
-        return mZoom.onScale(detector);
-    }
-
-    @Override
-    public boolean onScaleBegin(ScaleGestureDetector detector) {
-        if (mPie == null || !mPie.isOpen()) {
-            mMode = MODE_ZOOM;
-            mGestureDetector.onTouchEvent(makeCancelEvent(mCurrent));
-            if (!mZoomEnabled) return false;
-            return mZoom.onScaleBegin(detector);
-        }
-        return false;
-    }
-
-    @Override
-    public void onScaleEnd(ScaleGestureDetector detector) {
-        mZoom.onScaleEnd(detector);
-    }
-}
-
index ac06be8..5315a84 100644 (file)
@@ -114,13 +114,15 @@ public class SoundClips {
         private static final int[] SOUND_RES = { // Soundtrack res IDs.
                 R.raw.focus_complete,
                 R.raw.video_record,
+                R.raw.video_record,
+                R.raw.shutter
         };
 
         // ID returned by load() should be non-zero.
         private static final int ID_NOT_LOADED = 0;
 
         // Maps a sound action to the id;
-        private final int[] mSoundRes = {0, 1, 1, 1};
+        private final int[] mSoundRes = {0, 1, 2, 3};
         // Store the context for lazy loading.
         private Context mContext;
         // mSoundPool is created every time load() is called and cleared every
diff --git a/src/com/android/camera/SoundPlayer.java b/src/com/android/camera/SoundPlayer.java
new file mode 100644 (file)
index 0000000..3f17c58
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2014 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.content.Context;
+import android.media.SoundPool;
+import android.util.SparseIntArray;
+
+/**
+ * Loads a plays custom sounds. For playing system-standard sounds for various
+ * camera actions, please refer to {@link SoundClips}.
+ */
+public class SoundPlayer {
+    private final Context mAppContext;
+    private final SoundPool mSoundPool;
+    /** Keeps a mapping from sound resource ID to sound ID */
+    private final SparseIntArray mResourceToSoundId = new SparseIntArray();
+
+    /**
+     * Construct a new sound player.
+     */
+    public SoundPlayer(Context appContext) {
+        mAppContext = appContext;
+        final int audioType = SoundClips.getAudioTypeForSoundPool();
+        mSoundPool = new SoundPool(1 /* max streams */, audioType, 0 /* quality */);
+    }
+
+    /**
+     * Load the sound from a resource.
+     */
+    public void loadSound(int resourceId) {
+        int soundId = mSoundPool.load(mAppContext, resourceId, 1/* priority */);
+        mResourceToSoundId.put(resourceId, soundId);
+    }
+
+    /**
+     * Play the sound with the given resource. The resource has to be loaded
+     * before it can be played, otherwise an exception will be thrown.
+     */
+    public void play(int resourceId, float volume) {
+        Integer soundId = mResourceToSoundId.get(resourceId);
+        if (soundId == null) {
+            throw new IllegalStateException("Sound not loaded. Must call #loadSound first.");
+        }
+        mSoundPool.play(soundId, volume, volume, 0 /* priority */, 0 /* loop */, 1 /* rate */);
+    }
+
+    /**
+     * Unload the given sound if it's not needed anymore to release memory.
+     */
+    public void unloadSound(int resourceId) {
+        Integer soundId = mResourceToSoundId.get(resourceId);
+        if (soundId == null) {
+            throw new IllegalStateException("Sound not loaded. Must call #loadSound first.");
+        }
+        mSoundPool.unload(soundId);
+    }
+
+    /**
+     * Call this if you don't need the SoundPlayer anymore. All memory will be
+     * released and the object cannot be re-used.
+     */
+    public void release() {
+        mSoundPool.release();
+    }
+}
index 69897ca..ee557f8 100644 (file)
@@ -44,6 +44,8 @@ public class SurfaceTextureRenderer {
     private EGL10 mEgl;
     private GL10 mGl;
 
+    private volatile boolean mDrawPending = false;
+
     private final Handler mEglHandler;
     private final FrameDrawer mFrameDrawer;
 
@@ -55,32 +57,13 @@ public class SurfaceTextureRenderer {
                 if (mEglDisplay != null && mEglSurface != null) {
                     mFrameDrawer.onDrawFrame(mGl);
                     mEgl.eglSwapBuffers(mEglDisplay, mEglSurface);
+                    mDrawPending = false;
                 }
                 mRenderLock.notifyAll();
             }
         }
     };
 
-    public class RenderThread extends Thread {
-        private Boolean mRenderStopped = false;
-
-        @Override
-        public void run() {
-            while (true) {
-                synchronized (mRenderStopped) {
-                    if (mRenderStopped) return;
-                }
-                draw(true);
-            }
-        }
-
-        public void stopRender() {
-            synchronized (mRenderStopped) {
-                mRenderStopped = true;
-            }
-        }
-    }
-
     public SurfaceTextureRenderer(SurfaceTexture tex,
             Handler handler, FrameDrawer renderer) {
         mEglHandler = handler;
@@ -89,10 +72,6 @@ public class SurfaceTextureRenderer {
         initialize(tex);
     }
 
-    public RenderThread createRenderThread() {
-        return new RenderThread();
-    }
-
     public void release() {
         mEglHandler.post(new Runnable() {
             @Override
@@ -116,12 +95,15 @@ public class SurfaceTextureRenderer {
      */
     public void draw(boolean sync) {
         synchronized (mRenderLock) {
-            mEglHandler.post(mRenderTask);
-            if (sync) {
-                try {
-                    mRenderLock.wait();
-                } catch (InterruptedException ex) {
-                    Log.v(TAG, "RenderLock.wait() interrupted");
+            if (!mDrawPending) {
+                mEglHandler.post(mRenderTask);
+                mDrawPending = true;
+                if (sync) {
+                    try {
+                        mRenderLock.wait();
+                    } catch (InterruptedException ex) {
+                        Log.v(TAG, "RenderLock.wait() interrupted");
+                    }
                 }
             }
         }
index 41bdbc8..9eb8980 100644 (file)
@@ -92,6 +92,7 @@ public class TextureViewHelper implements TextureView.SurfaceTextureListener,
     @Override
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                                int oldTop, int oldRight, int oldBottom) {
+        Log.v(TAG, "onLayoutChange");
         int width = right - left;
         int height = bottom - top;
         int rotation = CameraUtil.getDisplayRotation(mPreview.getContext());
@@ -122,6 +123,7 @@ public class TextureViewHelper implements TextureView.SurfaceTextureListener,
     }
 
     public void updateAspectRatio(float aspectRatio) {
+        Log.v(TAG, "updateAspectRatio");
         if (aspectRatio <= 0) {
             Log.e(TAG, "Invalid aspect ratio: " + aspectRatio);
             return;
@@ -134,7 +136,9 @@ public class TextureViewHelper implements TextureView.SurfaceTextureListener,
     }
 
     private void setAspectRatio(float aspectRatio) {
+        Log.v(TAG, "setAspectRatio: " + aspectRatio);
         if (mAspectRatio != aspectRatio) {
+            Log.v(TAG, "aspect ratio changed from: " + mAspectRatio);
             mAspectRatio = aspectRatio;
             onAspectRatioChanged();
         }
@@ -238,6 +242,7 @@ public class TextureViewHelper implements TextureView.SurfaceTextureListener,
      * @return Whether {@code mAutoAdjustTransform}.
      */
     private boolean updateTransform() {
+        Log.v(TAG, "updateTransform");
         if (!mAutoAdjustTransform) {
             return false;
         }
index 5e17f49..b754eae 100644 (file)
@@ -28,7 +28,7 @@ public interface VideoController extends OnShutterButtonListener {
 
     public boolean isVideoCaptureIntent();
     public boolean isInReviewMode();
-    public int onZoomChanged(int index);
+    public void onZoomChanged(float ratio);
 
     public void onSingleTapUp(View view, int x, int y);
 
index 6fe83d2..a99fcb4 100644 (file)
@@ -37,6 +37,7 @@ import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
 import android.os.SystemClock;
@@ -128,8 +129,6 @@ public class VideoModule extends CameraModule
     private boolean mIsInReviewMode;
     private boolean mSnapshotInProgress = false;
 
-    private final CameraErrorCallback mErrorCallback = new CameraErrorCallback();
-
     // Preference must be read before starting preview. We check this before starting
     // preview.
     private boolean mPreferenceRead;
@@ -182,7 +181,7 @@ public class VideoModule extends CameraModule
     // The degrees of the device rotated clockwise from its natural orientation.
     private int mOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
 
-    private int mZoomValue;  // The current zoom value.
+    private float mZoomValue;  // The current zoom ratio.
 
     private final MediaSaver.OnMediaSavedListener mOnVideoSavedListener =
             new MediaSaver.OnMediaSavedListener() {
@@ -227,7 +226,8 @@ public class VideoModule extends CameraModule
                     ? new CameraAgent.CameraAFMoveCallback() {
                 @Override
                 public void onAutoFocusMoving(boolean moving, CameraProxy camera) {
-                    mFocusManager.onAutoFocusMoving(moving);
+                    // mFocusManager.onAutoFocusMoving(moving) not called because UI
+                    // not compatible with vertical video hint UI.
                 }
             } : null;
 
@@ -412,7 +412,7 @@ public class VideoModule extends CameraModule
         }
         if (!mIsVideoCaptureIntent) {
             if (!mMediaRecorderRecording || mPaused || mSnapshotInProgress
-                    || !mAppController.isShutterEnabled()) {
+                    || !mAppController.isShutterEnabled() || mCameraDevice == null) {
                 return;
             }
 
@@ -430,7 +430,7 @@ public class VideoModule extends CameraModule
 
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      private void updateAutoFocusMoveCallback() {
-        if (mPaused) {
+        if (mPaused || mCameraDevice == null) {
             return;
         }
 
@@ -585,6 +585,10 @@ public class VideoModule extends CameraModule
 
     @Override
     public void onCameraAvailable(CameraProxy cameraProxy) {
+        if (cameraProxy == null) {
+            Log.w(TAG, "onCameraAvailable returns a null CameraProxy object");
+            return;
+        }
         mCameraDevice = cameraProxy;
         mCameraCapabilities = mCameraDevice.getCapabilities();
         mCameraSettings = mCameraDevice.getSettings();
@@ -592,6 +596,7 @@ public class VideoModule extends CameraModule
         mMeteringAreaSupported =
                 mCameraCapabilities.supports(CameraCapabilities.Feature.METERING_AREA);
         readVideoPreferences();
+        updateDesiredPreviewSize();
         resizeForPreviewAspectRatio();
         initializeFocusManager();
         // TODO: Having focus overlay manager caching the parameters is prone to error,
@@ -609,8 +614,7 @@ public class VideoModule extends CameraModule
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setDataAndType(mCurrentVideoUri, convertOutputFormatToMimeType(mProfile.fileFormat));
         try {
-            mActivity
-                    .startActivityForResult(intent, CameraActivity.REQ_CODE_DONT_SWITCH_TO_PREVIEW);
+            mActivity.launchActivityByIntent(intent);
         } catch (ActivityNotFoundException ex) {
             Log.e(TAG, "Couldn't view video " + mCurrentVideoUri, ex);
         }
@@ -689,12 +693,20 @@ public class VideoModule extends CameraModule
         boolean stop = mMediaRecorderRecording;
 
         if (stop) {
+            // CameraAppUI mishandles mode option enable/disable
+            // for video, override that
+            mAppController.getCameraAppUI().enableModeOptions();
             onStopVideoRecording();
         } else {
+            // CameraAppUI mishandles mode option enable/disable
+            // for video, override that
+            mAppController.getCameraAppUI().disableModeOptions();
             startVideoRecording();
         }
         mAppController.setShutterEnabled(false);
-        mFocusManager.onShutterUp(mCameraSettings.getCurrentFocusMode());
+        if (mCameraSettings != null) {
+            mFocusManager.onShutterUp(mCameraSettings.getCurrentFocusMode());
+        }
 
         // Keep the shutter button disabled when in video capture intent
         // mode and recording is stopped. It'll be re-enabled when
@@ -718,24 +730,6 @@ public class VideoModule extends CameraModule
         // The preference stores values from ListPreference and is thus string type for all values.
         // We need to convert it to int manually.
         SettingsManager settingsManager = mActivity.getSettingsManager();
-        if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL,
-                                   Keys.KEY_VIDEO_QUALITY_BACK)) {
-            settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
-                                         Keys.KEY_VIDEO_QUALITY_BACK);
-
-            // TODO: Remove this once 4k recording is stable enough on new devices.
-            // Don't set the default resolution to be large if the device supports 4k video.
-            if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_2160P)) {
-                settingsManager.set(SettingsManager.SCOPE_GLOBAL,
-                                    Keys.KEY_VIDEO_QUALITY_BACK,
-                                    mAppController.getAndroidContext().getString(R.string.pref_video_quality_medium));
-            }
-        }
-        if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL,
-                                   Keys.KEY_VIDEO_QUALITY_FRONT)) {
-            settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
-                                         Keys.KEY_VIDEO_QUALITY_FRONT);
-        }
         String videoQualityKey = isCameraFrontFacing() ? Keys.KEY_VIDEO_QUALITY_FRONT
             : Keys.KEY_VIDEO_QUALITY_BACK;
         String videoQuality = settingsManager
@@ -772,17 +766,28 @@ public class VideoModule extends CameraModule
         }
         mProfile = CamcorderProfile.get(mCameraId, quality);
         mPreferenceRead = true;
+    }
+
+    /**
+     * Calculates and sets local class variables for Desired Preview sizes.
+     * This function should be called after every change in preview camera
+     * resolution and/or before the preview starts. Note that these values still
+     * need to be pushed to the CameraSettings to actually change the preview
+     * resolution.  Does nothing when camera pointer is null.
+     */
+    private void updateDesiredPreviewSize() {
         if (mCameraDevice == null) {
             return;
         }
+
         mCameraSettings = mCameraDevice.getSettings();
         Point desiredPreviewSize = getDesiredPreviewSize(mAppController.getAndroidContext(),
                 mCameraSettings, mCameraCapabilities, mProfile, mUI.getPreviewScreenSize());
         mDesiredPreviewWidth = desiredPreviewSize.x;
         mDesiredPreviewHeight = desiredPreviewSize.y;
         mUI.setPreviewSize(mDesiredPreviewWidth, mDesiredPreviewHeight);
-        Log.v(TAG, "mDesiredPreviewWidth=" + mDesiredPreviewWidth +
-                ". mDesiredPreviewHeight=" + mDesiredPreviewHeight);
+        Log.v(TAG, "Updated DesiredPreview=" + mDesiredPreviewWidth + "x"
+                + mDesiredPreviewHeight);
     }
 
     @TargetApi(Build.VERSION_CODES.HONEYCOMB)
@@ -794,7 +799,9 @@ public class VideoModule extends CameraModule
      * com.android.camera.cameradevice.CameraCapabilities#getPreferredPreviewSizeForVideo()}
      * but also considers the current preview area size on screen and make sure
      * the final preview size will not be smaller than 1/2 of the current
-     * on screen preview area in terms of their short sides.</p>
+     * on screen preview area in terms of their short sides.  This function has
+     * highest priority of WYSIWYG, 1:1 matching as its best match, even if
+     * there's a larger preview that meets the condition above. </p>
      *
      * @return The preferred preview size or {@code null} if the camera is not
      *         opened yet.
@@ -824,6 +831,19 @@ public class VideoModule extends CameraModule
                 it.remove();
             }
         }
+
+        // Take highest priority for WYSIWYG when the preview exactly matches
+        // video frame size.  The variable sizes is assumed to be filtered
+        // for sizes beyond the UI size.
+        for (Size size : sizes) {
+            if (size.width() == profile.videoFrameWidth
+                    && size.height() == profile.videoFrameHeight) {
+                Log.v(TAG, "Selected =" + size.width() + "x" + size.height()
+                           + " on WYSIWYG Priority");
+                return new Point(profile.videoFrameWidth, profile.videoFrameHeight);
+            }
+        }
+
         Size optimalSize = CameraUtil.getOptimalPreviewSize(context, sizes,
                 (double) profile.videoFrameWidth / profile.videoFrameHeight);
         return new Point(optimalSize.width(), optimalSize.height());
@@ -876,35 +896,22 @@ public class VideoModule extends CameraModule
      * Returns current Zoom value, with 1.0 as the value for no zoom.
      */
     private float currentZoomValue() {
-        float zoomValue = 1.0f;
-        if (mCameraCapabilities.supports(CameraCapabilities.Feature.ZOOM)) {
-            int zoomIndex = mCameraSettings.getCurrentZoomIndex();
-            List<Integer> zoomRatios = mCameraCapabilities.getZoomRatioList();
-            if (zoomRatios != null && zoomIndex < zoomRatios.size()) {
-                zoomValue = 0.01f * zoomRatios.get(zoomIndex);
-            }
-        }
-        return zoomValue;
+        return mCameraSettings.getCurrentZoomRatio();
     }
 
     @Override
-    public int onZoomChanged(int index) {
+    public void onZoomChanged(float ratio) {
         // Not useful to change zoom value when the activity is paused.
         if (mPaused) {
-            return index;
+            return;
         }
-        mZoomValue = index;
+        mZoomValue = ratio;
         if (mCameraSettings == null || mCameraDevice == null) {
-            return index;
+            return;
         }
         // Set zoom parameters asynchronously
-        mCameraSettings.setZoomIndex(mZoomValue);
+        mCameraSettings.setZoomRatio(mZoomValue);
         mCameraDevice.applySettings(mCameraSettings);
-        CameraSettings settings = mCameraDevice.getSettings();
-        if (settings != null) {
-            return settings.getCurrentZoomIndex();
-        }
-        return index;
     }
 
     private void startPreview() {
@@ -916,7 +923,6 @@ public class VideoModule extends CameraModule
             return;
         }
 
-        mCameraDevice.setErrorCallback(mHandler, mErrorCallback);
         if (mPreviewing == true) {
             stopPreview();
         }
@@ -939,13 +945,23 @@ public class VideoModule extends CameraModule
         // controller can set preview callbacks if needed. This has to happen before
         // preview is started as a workaround of the framework issue related to preview
         // callbacks that causes preview stretch and crash. (More details see b/12210027
-        // and b/12591410
-        mAppController.onPreviewReadyToStart();
+        // and b/12591410. Don't apply this to L, see b/16649297.
+        if (!ApiHelper.isLOrHigher()) {
+            Log.v(TAG, "calling onPreviewReadyToStart to set one shot callback");
+            mAppController.onPreviewReadyToStart();
+        } else {
+            Log.v(TAG, "on L, no one shot callback necessary");
+        }
         try {
             mCameraDevice.setPreviewTexture(surfaceTexture);
-            mCameraDevice.startPreview();
+            mCameraDevice.startPreviewWithCallback(new Handler(Looper.getMainLooper()),
+                    new CameraAgent.CameraStartPreviewCallback() {
+                @Override
+                public void onPreviewStarted() {
+                    VideoModule.this.onPreviewStarted();
+                }
+            });
             mPreviewing = true;
-            onPreviewStarted();
         } catch (Throwable ex) {
             closeCamera();
             throw new RuntimeException("startPreview failed", ex);
@@ -967,8 +983,15 @@ public class VideoModule extends CameraModule
     @Override
     public void stopPreview() {
         if (!mPreviewing) {
+            Log.v(TAG, "Skip stopPreview since it's not mPreviewing");
+            return;
+        }
+        if (mCameraDevice == null) {
+            Log.v(TAG, "Skip stopPreview since mCameraDevice is null");
             return;
         }
+
+        Log.v(TAG, "stopPreview");
         mCameraDevice.stopPreview();
         if (mFocusManager != null) {
             mFocusManager.onPreviewStopped();
@@ -983,7 +1006,6 @@ public class VideoModule extends CameraModule
             return;
         }
         mCameraDevice.setZoomChangeListener(null);
-        mCameraDevice.setErrorCallback(null, null);
         mActivity.getCameraProvider().releaseCamera(mCameraDevice.getCameraId());
         mCameraDevice = null;
         mPreviewing = false;
@@ -1056,6 +1078,7 @@ public class VideoModule extends CameraModule
         if (valid) {
             resultCode = Activity.RESULT_OK;
             resultIntent.setData(mCurrentVideoUri);
+            resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         } else {
             resultCode = Activity.RESULT_CANCELED;
         }
@@ -1075,7 +1098,7 @@ public class VideoModule extends CameraModule
 
     // Prepares media recorder.
     private void initializeRecorder() {
-        Log.i(TAG, "initializeRecorder");
+        Log.i(TAG, "initializeRecorder: " + Thread.currentThread());
         // If the mCameraDevice is null, then this activity is going to finish
         if (mCameraDevice == null) {
             return;
@@ -1102,7 +1125,6 @@ public class VideoModule extends CameraModule
             requestedSizeLimit = myExtras.getLong(MediaStore.EXTRA_SIZE_LIMIT);
         }
         mMediaRecorder = new MediaRecorder();
-
         // Unlock the camera object before passing it to media recorder.
         mCameraDevice.unlock();
         mMediaRecorder.setCamera(mCameraDevice.getCamera());
@@ -1304,7 +1326,7 @@ public class VideoModule extends CameraModule
     }
 
     private void startVideoRecording() {
-        Log.i(TAG, "startVideoRecording");
+        Log.i(TAG, "startVideoRecording: " + Thread.currentThread());
         mUI.cancelAnimations();
         mUI.setSwipingEnabled(false);
         mUI.showFocusUI(false);
@@ -1316,8 +1338,23 @@ public class VideoModule extends CameraModule
                 if (bytes <= Storage.LOW_STORAGE_THRESHOLD_BYTES) {
                     Log.w(TAG, "Storage issue, ignore the start request");
                 } else {
-                    //??
-                    //if (!mCameraDevice.waitDone()) return;
+                    if (mCameraDevice == null) {
+                        Log.v(TAG, "in storage callback after camera closed");
+                        return;
+                    }
+                    if (mPaused == true) {
+                        Log.v(TAG, "in storage callback after module paused");
+                        return;
+                    }
+
+                    // Monkey is so fast so it could trigger startVideoRecording twice. To prevent
+                    // app crash (b/17313985), do nothing here for the second storage-checking
+                    // callback because recording is already started.
+                    if (mMediaRecorderRecording) {
+                        Log.v(TAG, "in storage callback after recording started");
+                        return;
+                    }
+
                     mCurrentVideoUri = null;
 
                     initializeRecorder();
@@ -1401,7 +1438,15 @@ public class VideoModule extends CameraModule
     }
 
     private boolean stopVideoRecording() {
-        Log.i(TAG, "stopVideoRecording");
+        // Do nothing if camera device is still capturing photo. Monkey test can trigger app crashes
+        // (b/17313985) without this check. Crash could also be reproduced by continuously tapping
+        // on shutter button and preview with two fingers.
+        if (mSnapshotInProgress) {
+            Log.v(TAG, "Skip stopVideoRecording since snapshot in progress");
+            return true;
+        }
+        Log.v(TAG, "stopVideoRecording");
+
         mUI.setSwipingEnabled(true);
         mUI.showFocusUI(true);
         mUI.showVideoRecordingHints(true);
@@ -1431,6 +1476,10 @@ public class VideoModule extends CameraModule
             // during recording. Release the camera as soon as possible because
             // face unlock or other applications may need to use the camera.
             if (mPaused) {
+                // b/16300704: Monkey is fast so it could pause the module while recording.
+                // stopPreview should definitely be called before switching off.
+                stopPreview();
+
                 closeCamera();
             }
 
@@ -1453,7 +1502,7 @@ public class VideoModule extends CameraModule
 
         mAppController.getCameraAppUI().showModeOptions();
         mAppController.getCameraAppUI().animateBottomBarToFullSize(mShutterIconId);
-        if (!mPaused) {
+        if (!mPaused && mCameraDevice != null) {
             setFocusParameters();
             mCameraDevice.lock();
             if (!ApiHelper.HAS_SURFACE_TEXTURE_RECORDING) {
@@ -1567,6 +1616,9 @@ public class VideoModule extends CameraModule
     private void setCameraParameters() {
         SettingsManager settingsManager = mActivity.getSettingsManager();
 
+        // Update Desired Preview size in case video camera resolution has changed.
+        updateDesiredPreviewSize();
+
         mCameraSettings.setPreviewSize(new Size(mDesiredPreviewWidth, mDesiredPreviewHeight));
         // This is required for Samsung SGH-I337 and probably other Samsung S4 versions
         if (Build.BRAND.toLowerCase().contains("samsung")) {
@@ -1585,7 +1637,7 @@ public class VideoModule extends CameraModule
 
         // Set zoom.
         if (mCameraCapabilities.supports(CameraCapabilities.Feature.ZOOM)) {
-            mCameraSettings.setZoomIndex(mZoomValue);
+            mCameraSettings.setZoomRatio(mZoomValue);
         }
         updateFocusParameters();
 
@@ -1601,7 +1653,7 @@ public class VideoModule extends CameraModule
         // here we determine the picture size based on the preview size.
         List<Size> supported = mCameraCapabilities.getSupportedPhotoSizes();
         Size optimalSize = CameraUtil.getOptimalVideoSnapshotPictureSize(supported,
-                (double) mDesiredPreviewWidth / mDesiredPreviewHeight);
+                mDesiredPreviewWidth, mDesiredPreviewHeight);
         Size original = new Size(mCameraSettings.getCurrentPhotoSize());
         if (!original.equals(optimalSize)) {
             mCameraSettings.setPhotoSize(optimalSize);
@@ -1613,10 +1665,12 @@ public class VideoModule extends CameraModule
                 CameraProfile.QUALITY_HIGH);
         mCameraSettings.setPhotoJpegCompressionQuality(jpegQuality);
 
-        mCameraDevice.applySettings(mCameraSettings);
-        // Nexus 5 through KitKat 4.4.2 requires a second call to
-        // .setParameters() for frame rate settings to take effect.
-        mCameraDevice.applySettings(mCameraSettings);
+        if (mCameraDevice != null) {
+            mCameraDevice.applySettings(mCameraSettings);
+            // Nexus 5 through KitKat 4.4.2 requires a second call to
+            // .setParameters() for frame rate settings to take effect.
+            mCameraDevice.applySettings(mCameraSettings);
+        }
 
         // Update UI based on the new parameters.
         mUI.updateOnScreenIndicators(mCameraSettings);
@@ -1660,7 +1714,7 @@ public class VideoModule extends CameraModule
         mPaused = false;
         installIntentFilter();
         mAppController.setShutterEnabled(false);
-        mZoomValue = 0;
+        mZoomValue = 1.0f;
 
         showVideoSnapshotUI(false);
 
@@ -1719,6 +1773,7 @@ public class VideoModule extends CameraModule
         mSwitchingCamera = false;
         mPreferenceRead = false;
         getServices().getMemoryManager().removeListener(this);
+        mUI.onPause();
     }
 
     @Override
@@ -1760,7 +1815,7 @@ public class VideoModule extends CameraModule
         }
 
         // From onResume
-        mZoomValue = 0;
+        mZoomValue = 1.0f;
         mUI.setOrientationIndicator(0, false);
 
         // Start switch camera animation. Post a message because
@@ -1825,7 +1880,9 @@ public class VideoModule extends CameraModule
                 mParameters.setFlashMode(flashMode);
             }
         }*/
-        mCameraDevice.applySettings(mCameraSettings);
+        if (mCameraDevice != null) {
+            mCameraDevice.applySettings(mCameraSettings);
+        }
         mUI.updateOnScreenIndicators(mCameraSettings);
     }
 
@@ -1928,13 +1985,17 @@ public class VideoModule extends CameraModule
     /***********************FocusOverlayManager Listener****************************/
     @Override
     public void autoFocus() {
-        mCameraDevice.autoFocus(mHandler, mAutoFocusCallback);
+        if (mCameraDevice != null) {
+            mCameraDevice.autoFocus(mHandler, mAutoFocusCallback);
+        }
     }
 
     @Override
     public void cancelAutoFocus() {
-        mCameraDevice.cancelAutoFocus();
-        setFocusParameters();
+        if (mCameraDevice != null) {
+            mCameraDevice.cancelAutoFocus();
+            setFocusParameters();
+        }
     }
 
     @Override
@@ -1954,8 +2015,9 @@ public class VideoModule extends CameraModule
 
     @Override
     public void setFocusParameters() {
-        updateFocusParameters();
-        mCameraDevice.applySettings(mCameraSettings);
+        if (mCameraDevice != null) {
+            updateFocusParameters();
+            mCameraDevice.applySettings(mCameraSettings);
+        }
     }
-
 }
index a91f038..1276c84 100644 (file)
@@ -57,8 +57,7 @@ public class VideoUI implements PreviewStatusListener {
     private RotateLayout mRecordingTimeRect;
     private boolean mRecordingStarted = false;
     private final VideoController mController;
-    private int mZoomMax;
-    private List<Integer> mZoomRatios;
+    private float mZoomMax;
 
     private float mAspectRatio = UNSET;
     private final AnimationManager mAnimationManager;
@@ -213,12 +212,11 @@ public class VideoUI implements PreviewStatusListener {
     }
 
     public void initializeZoom(CameraSettings settings, CameraCapabilities capabilities) {
-        mZoomMax = capabilities.getMaxZoomIndex();
-        mZoomRatios = capabilities.getZoomRatioList();
+        mZoomMax = capabilities.getMaxZoomRatio();
         // Currently we use immediate zoom for fast zooming to get better UX and
         // there is no plan to take advantage of the smooth zoom.
         // TODO: setup zoom through App UI.
-        mPreviewOverlay.setupZoom(mZoomMax, settings.getCurrentZoomIndex(), mZoomRatios,
+        mPreviewOverlay.setupZoom(mZoomMax, settings.getCurrentZoomRatio(),
                 new ZoomChangeListener());
     }
 
@@ -277,8 +275,8 @@ public class VideoUI implements PreviewStatusListener {
 
     private class ZoomChangeListener implements PreviewOverlay.OnZoomChangedListener {
         @Override
-        public void onZoomValueChanged(int index) {
-            mController.onZoomChanged(index);
+        public void onZoomValueChanged(float ratio) {
+            mController.onZoomChanged(ratio);
         }
 
         @Override
@@ -310,4 +308,9 @@ public class VideoUI implements PreviewStatusListener {
     @Override
     public void onSurfaceTextureUpdated(SurfaceTexture surface) {
     }
+
+    public void onPause() {
+        // recalculate aspect ratio when restarting.
+        mAspectRatio = 0.0f;
+    }
 }
index e09ff4d..4516bfb 100644 (file)
@@ -28,6 +28,7 @@ import android.view.View;
 import android.widget.FrameLayout;
 
 import com.android.camera.ButtonManager;
+import com.android.camera.SoundPlayer;
 import com.android.camera.module.ModuleController;
 import com.android.camera.one.OneCameraManager;
 import com.android.camera.settings.SettingsManager;
@@ -270,7 +271,14 @@ public interface AppController {
     /********************** Capture animation **********************/
 
     /**
-     * Starts the pre-capture animation.
+     * Starts the pre-capture animation with optional shorter flash.
+     *
+     * @param shortFlash true for shorter flash (faster cameras).
+     */
+    public void startPreCaptureAnimation(boolean shortFlash);
+
+    /**
+     * Starts normal pre-capture animation.
      */
     public void startPreCaptureAnimation();
 
@@ -367,6 +375,9 @@ public interface AppController {
      */
     public ButtonManager getButtonManager();
 
+    /** Returns a sound player that can be used to play custom sounds. */
+    public SoundPlayer getSoundPlayer();
+
     /** Whether auto-rotate is enabled.*/
     public boolean isAutoRotateScreen();
 
index e41e0c8..2362e69 100644 (file)
@@ -27,7 +27,6 @@ import android.graphics.SurfaceTexture;
 import android.hardware.display.DisplayManager;
 import android.util.CameraPerformanceTracker;
 import android.view.GestureDetector;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.TextureView;
@@ -511,8 +510,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     private TextureView mTextureView;
     private FrameLayout mModuleUI;
     private ShutterButton mShutterButton;
-    private View mLetterBoxer1;
-    private View mLetterBoxer2;
     private BottomBar mBottomBar;
     private ModeOptionsOverlay mModeOptionsOverlay;
     private IndicatorIconController mIndicatorIconController;
@@ -549,6 +546,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     private boolean mAccessibilityEnabled;
     private final View mAccessibilityAffordances;
 
+    private boolean mDisableAllUserInteractions;
     /**
      * Provides current preview frame and the controls/overlay from the module that
      * are shown on top of the preview.
@@ -645,6 +643,22 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         mTextureViewHelper.updateAspectRatio(aspectRatio);
     }
 
+    /**
+     * WAR: Reset the SurfaceTexture's default buffer size to the current view dimensions of
+     * its TextureView.  This is necessary to get the expected behavior for the TextureView's
+     * HardwareLayer transform matrix (set by TextureView#setTransform) after configuring the
+     * SurfaceTexture as an output for the Camera2 API (which involves changing the default buffer
+     * size).
+     *
+     * b/17286155 - Tracking a fix for this in HardwareLayer.
+     */
+    public void setDefaultBufferSizeToViewDimens() {
+        if (mSurface == null || mTextureView == null) {
+            Log.w(TAG, "Could not set SurfaceTexture default buffer dimensions, not yet setup");
+            return;
+        }
+        mSurface.setDefaultBufferSize(mTextureView.getWidth(), mTextureView.getHeight());
+    }
 
     /**
      * Updates the preview matrix without altering it.
@@ -799,6 +813,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
      * in.
      */
     public void freezeScreenUntilPreviewReady() {
+        Log.v(TAG, "freezeScreenUntilPreviewReady");
         mModeTransitionView.setupModeCover(mCameraModuleScreenShotProvider
                 .getScreenShot(DOWN_SAMPLE_RATE_FOR_SCREENSHOT));
         mHideCoverRunnable = new Runnable() {
@@ -928,7 +943,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
                     mController.getQuickSwitchToModuleId(currentModuleIndex);
             if (currentModuleIndex != moduleToTransitionTo) {
                 mAppRootView.redirectTouchEventsTo(mModeTransitionView);
-
                 int shadeColorId = R.color.mode_cover_default_color;
                 int iconRes = CameraUtil.getCameraModeCoverIconResId(moduleToTransitionTo,
                         mController.getAndroidContext());
@@ -949,11 +963,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
                         }
                     }
                 };
-                if (mSwipeState == SWIPE_UP) {
-                    mModeTransitionView.prepareToPullUpShade(shadeColorId, iconRes, listener);
-                } else {
-                    mModeTransitionView.prepareToPullDownShade(shadeColorId, iconRes, listener);
-                }
             }
         } else if (swipeState == SWIPE_LEFT) {
             // Pass the touch sequence to filmstrip layout.
@@ -1016,7 +1025,9 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
             @Override
             public void run() {
                 mModeTransitionView.hideModeCover(null);
-                showShimmyDelayed();
+                if (!mDisableAllUserInteractions) {
+                    showShimmyDelayed();
+                }
             }
         };
         mModeCoverState = COVER_SHOWN;
@@ -1223,9 +1234,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         addShutterListener(mModeOptionsOverlay);
         addShutterListener(this);
 
-        mLetterBoxer1 = mCameraRootView.findViewById(R.id.leftLetterBoxer1);
-        mLetterBoxer2 = mCameraRootView.findViewById(R.id.leftLetterBoxer2);
-
         mGridLines = (GridLines) mCameraRootView.findViewById(R.id.grid_lines);
         mTextureViewHelper.addPreviewAreaSizeChangedListener(mGridLines);
 
@@ -1324,6 +1332,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
      * Gets called when preview is started.
      */
     public void onPreviewStarted() {
+        Log.v(TAG, "onPreviewStarted");
         if (mModeCoverState == COVER_SHOWN) {
             mModeCoverState = COVER_WILL_HIDE_AT_NEXT_TEXTURE_UPDATE;
         }
@@ -1334,27 +1343,9 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
      * Gets notified when next preview frame comes in.
      */
     public void onNewPreviewFrame() {
+        Log.v(TAG, "onNewPreviewFrame");
         CameraPerformanceTracker.onEvent(CameraPerformanceTracker.FIRST_PREVIEW_FRAME);
         hideModeCover();
-        mModeCoverState = COVER_HIDDEN;
-    }
-
-    /**
-     * Set the mode options toggle clickable.
-     */
-    public void enableModeOptions() {
-        /*
-         * For modules using camera 1 api, this gets called in
-         * onSurfaceTextureUpdated whenever the preview gets stopped and
-         * started after each capture.  This also takes care of the
-         * case where the mode options might be unclickable when we
-         * switch modes
-         *
-         * For modules using camera 2 api, they're required to call this
-         * method when a capture is "completed".  Unfortunately this differs
-         * per module implementation.
-         */
-        mModeOptionsOverlay.setToggleClickable(true);
     }
 
     @Override
@@ -1368,7 +1359,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
          * can clearly see when the toggle becomes clickable again,
          * keep all of that logic at this level.
          */
-        mModeOptionsOverlay.setToggleClickable(false);
+        disableModeOptions();
     }
 
     @Override
@@ -1382,6 +1373,47 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     }
 
     /**
+     * Set the mode options toggle clickable.
+     */
+    public void enableModeOptions() {
+        /*
+         * For modules using camera 1 api, this gets called in
+         * onSurfaceTextureUpdated whenever the preview gets stopped and
+         * started after each capture.  This also takes care of the
+         * case where the mode options might be unclickable when we
+         * switch modes
+         *
+         * For modules using camera 2 api, they're required to call this
+         * method when a capture is "completed".  Unfortunately this differs
+         * per module implementation.
+         */
+        if (!mDisableAllUserInteractions) {
+            mModeOptionsOverlay.setToggleClickable(true);
+        }
+    }
+
+    /**
+     * Set the mode options toggle not clickable.
+     */
+    public void disableModeOptions() {
+        mModeOptionsOverlay.setToggleClickable(false);
+    }
+
+    public void setDisableAllUserInteractions(boolean disable) {
+        if (disable) {
+            disableModeOptions();
+            setShutterButtonEnabled(false);
+            setSwipeEnabled(false);
+            mModeListView.hideAnimated();
+        } else {
+            enableModeOptions();
+            setShutterButtonEnabled(true);
+            setSwipeEnabled(true);
+        }
+        mDisableAllUserInteractions = disable;
+    }
+
+    /**
      * Gets called when a mode is selected from {@link com.android.camera.ui.ModeListView}
      *
      * @param modeIndex mode index of the selected mode
@@ -1394,6 +1426,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
                 mModeListView.startModeSelectionAnimation();
             }
         };
+        mShutterButton.setAlpha(ShutterButton.ALPHA_WHEN_ENABLED);
         mModeCoverState = COVER_SHOWN;
 
         int lastIndex = mController.getCurrentModuleIndex();
@@ -1409,13 +1442,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     }
 
     private void updateModeSpecificUIColors() {
-        // set up UI colors to match the current mode
-        /*
-        int colorId = CameraUtil.getCameraThemeColorId(mController.getCurrentModuleIndex(),
-                mController.getAndroidContext());
-        int pressedColor = mController.getAndroidContext().getResources().getColor(colorId);
-        setBottomBarPressedColor(pressedColor);
-        */
         setBottomBarColorsForModeIndex(mController.getCurrentModuleIndex());
     }
 
@@ -1456,9 +1482,11 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
 
     /**
      * Starts the pre-capture animation.
+     *
+     * @param shortFlash show shortest possible flash instead of regular long version.
      */
-    public void startPreCaptureAnimation() {
-        mCaptureOverlay.startFlashAnimation();
+    public void startPreCaptureAnimation(boolean shortFlash) {
+        mCaptureOverlay.startFlashAnimation(shortFlash);
     }
 
     /**
@@ -1487,6 +1515,14 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         return mFilmstripBottomControls;
     }
 
+    public void showBottomControls() {
+        mFilmstripBottomControls.show();
+    }
+
+    public void hideBottomControls() {
+        mFilmstripBottomControls.hide();
+    }
+
     /**
      * @param listener The listener for bottom controls.
      */
@@ -1552,13 +1588,13 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     @Override
     public void onSurfaceTextureUpdated(SurfaceTexture surface) {
         mSurface = surface;
+        if (mPreviewStatusListener != null) {
+            mPreviewStatusListener.onSurfaceTextureUpdated(surface);
+        }
         if (mModeCoverState == COVER_WILL_HIDE_AT_NEXT_TEXTURE_UPDATE) {
+            Log.v(TAG, "hiding cover via onSurfaceTextureUpdated");
             CameraPerformanceTracker.onEvent(CameraPerformanceTracker.FIRST_PREVIEW_FRAME);
             hideModeCover();
-            mModeCoverState = COVER_HIDDEN;
-        }
-        if (mPreviewStatusListener != null) {
-            mPreviewStatusListener.onSurfaceTextureUpdated(surface);
         }
     }
 
@@ -1699,13 +1735,14 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
     }
 
     public void setShutterButtonEnabled(final boolean enabled) {
-        mBottomBar.post(new Runnable() {
-
-            @Override
-            public void run() {
-                mBottomBar.setShutterButtonEnabled(enabled);
-            }
-        });
+        if (!mDisableAllUserInteractions) {
+            mBottomBar.post(new Runnable() {
+                @Override
+                public void run() {
+                    mBottomBar.setShutterButtonEnabled(enabled);
+                }
+            });
+        }
     }
 
     public void setShutterButtonImportantToA11y(boolean important) {
@@ -1735,49 +1772,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         mShutterButton.addOnShutterButtonListener(listener);
     }
 
-
-    /**
-     * This adds letterboxing around the preview, one on each side
-     *
-     * @param width the width in pixels of each letterboxing cover
-     */
-    public void addLetterboxing(int width) {
-        FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) mLetterBoxer1
-                .getLayoutParams();
-        FrameLayout.LayoutParams params2 = (FrameLayout.LayoutParams) mLetterBoxer2
-                .getLayoutParams();
-
-        if (mCameraRootView.getWidth() < mCameraRootView.getHeight()) {
-            params1.width = width;
-            params1.height = mCameraRootView.getHeight();
-            params1.gravity = Gravity.LEFT;
-            mLetterBoxer1.setVisibility(View.VISIBLE);
-
-            params2.width = width;
-            params2.height = mCameraRootView.getHeight();
-            params2.gravity = Gravity.RIGHT;
-            mLetterBoxer2.setVisibility(View.VISIBLE);
-        } else {
-            params1.height = width;
-            params1.width = mCameraRootView.getWidth();
-            params1.gravity = Gravity.TOP;
-            mLetterBoxer1.setVisibility(View.VISIBLE);
-
-            params2.height = width;
-            params2.width = mCameraRootView.getWidth();
-            params2.gravity = Gravity.BOTTOM;
-            mLetterBoxer2.setVisibility(View.VISIBLE);
-        }
-    }
-
-    /**
-     * Remove the letter boxing strips if they happen to be present.
-     */
-    public void hideLetterboxing() {
-        mLetterBoxer1.setVisibility(View.GONE);
-        mLetterBoxer2.setVisibility(View.GONE);
-    }
-
     /**
      * Remove a {@link #ShutterButton.OnShutterButtonListener} from the shutter button.
      */
@@ -1865,7 +1859,8 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         buttonManager.setToInitialState();
 
         /** Standard mode options */
-        if (hardwareSpec.isFrontCameraSupported()) {
+        if (mController.getCameraProvider().getNumberOfCameras() > 1 &&
+                hardwareSpec.isFrontCameraSupported()) {
             if (bottomBarSpec.enableCamera) {
                 buttonManager.initializeButton(ButtonManager.BUTTON_CAMERA,
                         bottomBarSpec.cameraCallback);
@@ -1880,7 +1875,9 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         boolean flashBackCamera = mController.getSettingsManager().getBoolean(
             SettingsManager.SCOPE_GLOBAL, Keys.KEY_FLASH_SUPPORTED_BACK_CAMERA);
         if (bottomBarSpec.hideFlash || !flashBackCamera) {
+            // Hide both flash and torch button in flash disable logic
             buttonManager.hideButton(ButtonManager.BUTTON_FLASH);
+            buttonManager.hideButton(ButtonManager.BUTTON_TORCH);
         } else {
             if (hardwareSpec.isFlashSupported()) {
                 if (bottomBarSpec.enableFlash) {
@@ -1893,11 +1890,15 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
                     buttonManager.initializeButton(ButtonManager.BUTTON_HDR_PLUS_FLASH,
                         bottomBarSpec.flashCallback);
                 } else {
+                    // Hide both flash and torch button in flash disable logic
                     buttonManager.disableButton(ButtonManager.BUTTON_FLASH);
+                    buttonManager.disableButton(ButtonManager.BUTTON_TORCH);
                 }
             } else {
-                // Disable flash icon if not supported by the hardware.
+                // Disable both flash and torch icon if not supported
+                // by the chosen camera hardware.
                 buttonManager.disableButton(ButtonManager.BUTTON_FLASH);
+                buttonManager.disableButton(ButtonManager.BUTTON_TORCH);
             }
         }
 
index c83b67f..c6f5d62 100644 (file)
 package com.android.camera.app;
 
 import android.content.Context;
-import android.hardware.Camera;
 import android.os.Handler;
 
 import com.android.camera.CameraDisabledException;
 import com.android.camera.debug.Log;
 import com.android.camera.util.CameraUtil;
-import com.android.ex.camera2.portability.CameraDeviceInfo;
+import com.android.camera.util.GservicesHelper;
 import com.android.ex.camera2.portability.CameraAgent;
-import com.android.ex.camera2.portability.CameraAgent.CameraExceptionCallback;
+import com.android.ex.camera2.portability.CameraDeviceInfo;
+import com.android.ex.camera2.portability.CameraExceptionHandler;
 
 /**
  * A class which implements {@link com.android.camera.app.CameraProvider} used
@@ -83,11 +83,10 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
     }
 
     @Override
-    public void setCameraDefaultExceptionCallback(CameraExceptionCallback callback,
-            Handler handler) {
-        mCameraAgent.setCameraDefaultExceptionCallback(callback, handler);
+    public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler) {
+        mCameraAgent.setCameraExceptionHandler(exceptionHandler);
         if (mCameraAgentNg != null) {
-            mCameraAgentNg.setCameraDefaultExceptionCallback(callback, handler);
+            mCameraAgentNg.setCameraExceptionHandler(exceptionHandler);
         }
     }
 
@@ -161,7 +160,6 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
     public void onCameraOpened(CameraAgent.CameraProxy camera) {
         Log.v(TAG, "onCameraOpened");
         if (mRequestingCameraId != camera.getCameraId()) {
-            // Not requesting any camera or not waiting for this one.
             return;
         }
         mCameraProxy = camera;
@@ -206,6 +204,7 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
 
     @Override
     public void requestCamera(int id, boolean useNewApi) {
+        Log.v(TAG, "requestCamera");
         // Based on
         // (mRequestingCameraId == id, mRequestingCameraId == EMPTY_REQUEST),
         // we have (T, T), (T, F), (F, T), (F, F).
@@ -230,11 +229,14 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
             // No camera yet.
             checkAndOpenCamera(mContext, cameraManager, id, mCallbackHandler, this);
         } else if (mCameraProxy.getCameraId() != id || mUsingNewApi != useNewApi) {
+            boolean syncClose = GservicesHelper.useCamera2ApiThroughPortabilityLayer(mContext);
+            Log.v(TAG, "different camera already opened, closing then reopening");
             // Already has camera opened, and is switching cameras and/or APIs.
             if (mUsingNewApi) {
                 mCameraAgentNg.closeCamera(mCameraProxy, true);
             } else {
-                mCameraAgent.closeCamera(mCameraProxy, true);
+                // if using API2 ensure API1 usage is also synced
+                mCameraAgent.closeCamera(mCameraProxy, syncClose);
             }
             checkAndOpenCamera(mContext, cameraManager, id, mCallbackHandler, this);
         } else {
@@ -279,10 +281,6 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
      * TODO: Make this method package private.
      */
     public void closeCamera(boolean synced) {
-        if (mCameraProxy == null) {
-            Log.v(TAG, "No camera open, not closing");
-            return;
-        }
         Log.v(TAG, "Closing camera");
         mCameraProxy = null;
         if (mUsingNewApi) {
@@ -296,6 +294,7 @@ public class CameraController implements CameraAgent.CameraOpenCallback, CameraP
 
     private static void checkAndOpenCamera(Context context, CameraAgent cameraManager,
             final int cameraId, Handler handler, final CameraAgent.CameraOpenCallback cb) {
+        Log.v(TAG, "checkAndOpenCamera");
         try {
             CameraUtil.throwIfCameraDisabled(context);
             cameraManager.openCamera(handler, cameraId, cb);
index 40c602f..9b98b67 100644 (file)
@@ -19,8 +19,8 @@ package com.android.camera.app;
 import android.hardware.Camera;
 import android.os.Handler;
 
-import com.android.ex.camera2.portability.CameraAgent.CameraExceptionCallback;
 import com.android.ex.camera2.portability.CameraDeviceInfo.Characteristics;
+import com.android.ex.camera2.portability.CameraExceptionHandler;
 
 /**
  * An interface which defines the camera provider.
@@ -57,8 +57,7 @@ public interface CameraProvider {
      * Sets a callback for handling camera api runtime exceptions on
      * a handler.
      */
-    public void setCameraDefaultExceptionCallback(CameraExceptionCallback callback,
-            Handler handler);
+    public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler);
 
     /**
      * Get the {@link Characteristics} of the given camera.
index 572ab83..018476c 100644 (file)
@@ -16,6 +16,9 @@
 
 package com.android.camera.app;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
@@ -23,6 +26,7 @@ import android.widget.ImageButton;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import com.android.camera.util.Gusterpolator;
 import com.android.camera.widget.Cling;
 import com.android.camera.widget.ExternalViewerButton;
 import com.android.camera2.R;
@@ -32,6 +36,7 @@ import com.android.camera2.R;
  * sphere image and creating a tiny planet from a photo sphere image.
  */
 class FilmstripBottomPanel implements CameraAppUI.BottomPanel {
+    private static final int ANIM_DURATION = 150;
 
     private final AppController mController;
     private final ViewGroup mLayout;
@@ -265,4 +270,31 @@ class FilmstripBottomPanel implements CameraAppUI.BottomPanel {
             mMiddleFiller.setVisibility(View.GONE);
         }
     }
+
+    public void show() {
+        ObjectAnimator animator = ObjectAnimator
+                .ofFloat(mLayout, "translationY", mLayout.getHeight(), 0.0f);
+        animator.setDuration(ANIM_DURATION);
+        animator.setInterpolator(Gusterpolator.INSTANCE);
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mViewButton.updateClingVisibility();
+            }
+        });
+        mViewButton.hideClings();
+        animator.start();
+    }
+
+    public void hide() {
+        int offset = mLayout.getHeight();
+        if (mLayout.getTranslationY() < offset) {
+            ObjectAnimator animator = ObjectAnimator
+                    .ofFloat(mLayout, "translationY", mLayout.getTranslationY(), offset);
+            animator.setDuration(ANIM_DURATION);
+            animator.setInterpolator(Gusterpolator.INSTANCE);
+            mViewButton.hideClings();
+            animator.start();
+        }
+    }
 }
index 7802caa..0549407 100644 (file)
@@ -195,8 +195,10 @@ public class OrientationManagerImpl implements OrientationManager {
             if (orientation == ORIENTATION_UNKNOWN) {
                 return;
             }
+            // TODO: We have two copies of the rounding method: one is CameraUtil.roundOrientation
+            // and the other is OrientationManagerImpl.roundOrientation. The same computation is
+            // done twice when orientation is changed. We should remove the duplicate. b/17440795
             final int roundedOrientation = roundOrientation(orientation, 0);
-
             for (OrientationChangeCallback l : mListeners) {
                 l.postOrientationChangeCallback(roundedOrientation);
             }
index 721b213..7fd2d09 100644 (file)
@@ -23,6 +23,7 @@ import android.os.AsyncTask;
 import android.view.View;
 
 import com.android.camera.Storage;
+import com.android.camera.data.LocalData.ActionCallback;
 import com.android.camera.debug.Log;
 import com.android.camera.filmstrip.ImageData;
 import com.android.camera.util.Callback;
@@ -125,14 +126,15 @@ public class CameraDataAdapter implements LocalDataAdapter {
     }
 
     @Override
-    public View getView(Context context, View recycled, int dataID) {
+    public View getView(Context context, View recycled, int dataID,
+            ActionCallback actionCallback) {
         if (dataID >= mImages.size() || dataID < 0) {
             return null;
         }
 
         return mImages.get(dataID).getView(
                 context, recycled, mSuggestedWidth, mSuggestedHeight,
-                mPlaceHolderResourceId, this, /* inProgress */ false);
+                mPlaceHolderResourceId, this, /* inProgress */ false, actionCallback);
     }
 
     @Override
@@ -178,7 +180,7 @@ public class CameraDataAdapter implements LocalDataAdapter {
         int pos = findDataByContentUri(uri);
         if (pos != -1) {
             // a duplicate one, just do a substitute.
-            Log.v(TAG, "found duplicate data");
+            Log.v(TAG, "found duplicate data: " + uri);
             updateData(pos, newData);
             return false;
         } else {
@@ -337,6 +339,7 @@ public class CameraDataAdapter implements LocalDataAdapter {
         @Override
         protected List<LocalData> doInBackground(ContentResolver... contentResolvers) {
             if (mMinPhotoId != LocalMediaData.QUERY_ALL_MEDIA_ID) {
+                Log.v(TAG, "updating media metadata with photos newer than id: " + mMinPhotoId);
                 final ContentResolver cr = contentResolvers[0];
                 return LocalMediaData.PhotoData.query(cr, LocalMediaData.PhotoData.CONTENT_URI,
                         mMinPhotoId);
@@ -346,11 +349,19 @@ public class CameraDataAdapter implements LocalDataAdapter {
 
         @Override
         protected void onPostExecute(List<LocalData> newPhotoData) {
+            if (newPhotoData == null) {
+                Log.w(TAG, "null data returned from new photos query");
+                return;
+            }
+            Log.v(TAG, "new photos query return num items: " + newPhotoData.size());
             if (!newPhotoData.isEmpty()) {
                 LocalData newestPhoto = newPhotoData.get(0);
                 // We may overlap with another load task or a query task, in which case we want
                 // to be sure we never decrement the oldest seen id.
-                mLastPhotoId = Math.max(mLastPhotoId, newestPhoto.getContentId());
+                long newLastPhotoId = newestPhoto.getContentId();
+                Log.v(TAG, "updating last photo id (old:new) " +
+                        mLastPhotoId + ":" + newLastPhotoId);
+                mLastPhotoId = Math.max(mLastPhotoId, newLastPhotoId);
             }
             // We may add data that is already present, but if we do, it will be deduped in addData.
             // addData does not dedupe session items, so we ignore them here
@@ -404,12 +415,27 @@ public class CameraDataAdapter implements LocalDataAdapter {
 
             long lastPhotoId = LocalMediaData.QUERY_ALL_MEDIA_ID;
             if (!photoData.isEmpty()) {
+                // This relies on {@link LocalMediaData.QUERY_ORDER} returning
+                // items sorted descending by ID, as such we can just pull the
+                // ID from the first item in the result to establish the last
+                // (max) photo ID.
                 lastPhotoId = photoData.get(0).getContentId();
             }
 
-            l.addAll(photoData);
-            l.addAll(videoData);
+            if (photoData != null) {
+                Log.v(TAG, "retrieved photo metadata, number of items: " + photoData.size());
+                l.addAll(photoData);
+            }
+            if (videoData != null) {
+                Log.v(TAG, "retrieved video metadata, number of items: " + videoData.size());
+                l.addAll(videoData);
+            }
+            Log.v(TAG, "sorting video/photo metadata");
+            // Photos should be sorted within photo/video by ID, which in most
+            // cases should correlate well to the date taken/modified. This sort
+            // operation makes all photos/videos sorted by date in one list.
             l.sort(new LocalData.NewestFirstComparator());
+            Log.v(TAG, "sorted video/photo metadata");
 
             // Load enough metadata so it's already loaded when we open the filmstrip.
             for (int i = 0; i < MAX_METADATA && i < l.size(); i++) {
index 471fd19..f14a1c8 100644 (file)
@@ -21,6 +21,7 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.view.View;
 
+import com.android.camera.data.LocalData.ActionCallback;
 import com.android.camera.debug.Log;
 import com.android.camera.filmstrip.DataAdapter;
 import com.android.camera.filmstrip.ImageData;
@@ -110,12 +111,12 @@ public class FixedFirstDataAdapter extends AbstractLocalDataAdapterWrapper
     }
 
     @Override
-    public View getView(Context context, View recycled, int dataID) {
+    public View getView(Context context, View recycled, int dataID, ActionCallback actionCallback) {
         if (dataID == 0) {
-            return mFirstData.getView(
-                    context, recycled, mSuggestedWidth, mSuggestedHeight, 0, null, false);
+            return mFirstData.getView(context, recycled, mSuggestedWidth, mSuggestedHeight, 0,
+                    null, false, actionCallback);
         }
-        return mAdapter.getView(context, recycled, dataID - 1);
+        return mAdapter.getView(context, recycled, dataID - 1, actionCallback);
     }
 
     @Override
index 35978d8..a87a2de 100644 (file)
@@ -21,6 +21,7 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.view.View;
 
+import com.android.camera.data.LocalData.ActionCallback;
 import com.android.camera.filmstrip.ImageData;
 
 /**
@@ -66,7 +67,6 @@ public class FixedLastDataAdapter extends AbstractLocalDataAdapterWrapper {
         } else if (dataID == totalNumber) {
             return mLastData;
         }
-
         return null;
     }
 
@@ -112,16 +112,15 @@ public class FixedLastDataAdapter extends AbstractLocalDataAdapterWrapper {
     }
 
     @Override
-    public View getView(Context context, View recycled, int dataID) {
+    public View getView(Context context, View recycled, int dataID, ActionCallback actionCallback) {
         int totalNumber = mAdapter.getTotalNumber();
 
         if (dataID < totalNumber) {
-            return mAdapter.getView(context, recycled, dataID);
+            return mAdapter.getView(context, recycled, dataID, actionCallback);
         } else if (dataID == totalNumber) {
-            return mLastData.getView(context, recycled,
-                    mSuggestedWidth, mSuggestedHeight, 0, null, false);
+            return mLastData.getView(context, recycled, mSuggestedWidth, mSuggestedHeight, 0, null,
+                    false, actionCallback);
         }
-
         return null;
     }
 
@@ -134,7 +133,6 @@ public class FixedLastDataAdapter extends AbstractLocalDataAdapterWrapper {
         } else if (dataId == totalNumber) {
             return mLastData.getItemViewType().ordinal();
         }
-
         return -1;
    }
 
index df2d9c2..d42bf97 100644 (file)
 package com.android.camera.data;
 
 import android.content.Context;
+import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
+
 import com.android.camera.debug.Log;
 import com.android.camera.filmstrip.ImageData;
 
@@ -32,6 +34,14 @@ import java.util.Comparator;
  * can guarantee thread safety for LocalData.
  */
 public interface LocalData extends ImageData {
+    /**
+     * An action callback to be used for actions on the local media data items.
+     */
+    public static interface ActionCallback {
+        /** Plays the video with the given URI and title. */
+        public void playVideo(Uri uri, String title);
+    }
+
     static final Log.Tag TAG = new Log.Tag("LocalData");
 
     public static final String MIME_TYPE_JPEG = "image/jpeg";
@@ -79,7 +89,8 @@ public interface LocalData extends ImageData {
      * @param adapter Data adapter for this data item.
      */
     View getView(Context context, View recycled, int thumbWidth, int thumbHeight,
-        int placeHolderResourceId, LocalDataAdapter adapter, boolean isInProgress);
+            int placeHolderResourceId, LocalDataAdapter adapter, boolean isInProgress,
+            ActionCallback actionCallback);
 
     /** Returns a unique identifier for the view created by this data so that the view
      * can be reused.
index f029f45..00ace49 100644 (file)
@@ -43,7 +43,7 @@ public class LocalDataUtil {
      * @return Whether the MIME is a video type.
      */
     public static boolean isMimeTypeVideo(String mimeType) {
-        return mimeType.startsWith("video/");
+        return mimeType != null && mimeType.startsWith("video/");
     }
 
     /**
@@ -51,7 +51,7 @@ public class LocalDataUtil {
      * @return Whether the MIME is a image type.
      */
     public static boolean isMimeTypeImage(String mimeType) {
-        return mimeType.startsWith("image/");
+        return mimeType != null && mimeType.startsWith("image/");
     }
 
     /**
index bdf03bd..83399e6 100644 (file)
@@ -16,7 +16,6 @@
 
 package com.android.camera.data;
 
-import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.Cursor;
@@ -29,12 +28,13 @@ import android.provider.MediaStore;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
+
 import com.android.camera.Storage;
 import com.android.camera.debug.Log;
-import com.android.camera.util.CameraUtil;
 import com.android.camera2.R;
-import com.bumptech.glide.DrawableRequestBuilder;
+import com.bumptech.glide.BitmapRequestBuilder;
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.BitmapEncoder;
 
 import java.io.File;
 import java.text.DateFormat;
@@ -71,6 +71,10 @@ public abstract class LocalMediaData implements LocalData {
     protected final double mLongitude;
     protected final Bundle mMetaData;
 
+    private static final int JPEG_COMPRESS_QUALITY = 90;
+    private static final BitmapEncoder JPEG_ENCODER =
+            new BitmapEncoder(Bitmap.CompressFormat.JPEG, JPEG_COMPRESS_QUALITY);
+
     /**
      * Used for thumbnail loading optimization. True if this data has a
      * corresponding visible view.
@@ -213,7 +217,8 @@ public abstract class LocalMediaData implements LocalData {
 
     @Override
     public View getView(Context context, View recycled, int thumbWidth, int thumbHeight,
-            int placeHolderResourceId, LocalDataAdapter adapter, boolean isInProgress) {
+            int placeHolderResourceId, LocalDataAdapter adapter, boolean isInProgress,
+            ActionCallback actionCallback) {
         final ImageView imageView;
         if (recycled != null) {
             imageView = (ImageView) recycled;
@@ -328,8 +333,10 @@ public abstract class LocalMediaData implements LocalData {
 
         static final Uri CONTENT_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
 
-        private static final String QUERY_ORDER = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC, "
-                + MediaStore.Images.ImageColumns._ID + " DESC";
+        // Sort all data by ID. This must be aligned with
+        // {@link CameraDataAdapter.QueryTask} which relies on the highest ID
+        // being first in any data returned.
+        private static final String QUERY_ORDER = MediaStore.Images.ImageColumns._ID + " DESC";
         /**
          * These values should be kept in sync with column IDs (COL_*) above.
          */
@@ -530,26 +537,50 @@ public abstract class LocalMediaData implements LocalData {
                 return;
             }
 
-            DrawableRequestBuilder<Uri> request = Glide.with(context)
-                .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds, mOrientation)
-                .placeholder(placeHolderResourceId)
-                .fitCenter();
+            final int overrideWidth;
+            final int overrideHeight;
+            final BitmapRequestBuilder<Uri, Bitmap> thumbnailRequest;
             if (full) {
-                request.thumbnail(Glide.with(context)
-                        .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds,
-                            mOrientation)
-                        .override(thumbWidth, thumbHeight)
-                        .fitCenter())
-                    .override(Math.min(getWidth(), MAXIMUM_TEXTURE_SIZE),
-                        Math.min(getHeight(), MAXIMUM_TEXTURE_SIZE));
+                // Load up to the maximum size Bitmap we can render.
+                overrideWidth = Math.min(getWidth(), MAXIMUM_TEXTURE_SIZE);
+                overrideHeight = Math.min(getHeight(), MAXIMUM_TEXTURE_SIZE);
+
+                // Load two thumbnails, first the small low quality thumb from the media store,
+                // then a medium quality thumbWidth/thumbHeight image. Using two thumbnails ensures
+                // we don't flicker to grey while we load the maximum size image.
+                thumbnailRequest = loadUri(context)
+                    .override(thumbWidth, thumbHeight)
+                    .fitCenter()
+                    .thumbnail(loadMediaStoreThumb(context));
             } else {
-                request.thumbnail(Glide.with(context)
-                        .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds,
-                            mOrientation)
-                        .override(MEDIASTORE_THUMB_WIDTH, MEDIASTORE_THUMB_HEIGHT))
-                    .override(thumbWidth, thumbHeight);
+                // Load a medium quality thumbWidth/thumbHeight image.
+                overrideWidth = thumbWidth;
+                overrideHeight = thumbHeight;
+
+                // Load a single small low quality thumbnail from the media store.
+                thumbnailRequest = loadMediaStoreThumb(context);
             }
-            request.into(imageView);
+
+            loadUri(context)
+                .placeholder(placeHolderResourceId)
+                .fitCenter()
+                .override(overrideWidth, overrideHeight)
+                .thumbnail(thumbnailRequest)
+                .into(imageView);
+        }
+
+        /** Loads a thumbnail with a size targeted to use MediaStore.Images.Thumbnails. */
+        private BitmapRequestBuilder<Uri, Bitmap> loadMediaStoreThumb(Context context) {
+            return loadUri(context)
+                .override(MEDIASTORE_THUMB_WIDTH, MEDIASTORE_THUMB_HEIGHT);
+        }
+
+        /** Loads an image using a MediaStore Uri with our default options. */
+        private BitmapRequestBuilder<Uri, Bitmap> loadUri(Context context) {
+            return Glide.with(context)
+                .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds, mOrientation)
+                .asBitmap()
+                .encoder(JPEG_ENCODER);
         }
 
         @Override
@@ -791,8 +822,12 @@ public abstract class LocalMediaData implements LocalData {
 
             Glide.with(context)
                 .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds, 0)
+                .asBitmap()
+                .encoder(JPEG_ENCODER)
                 .thumbnail(Glide.with(context)
                     .loadFromMediaStore(getUri(), mMimeType, mDateModifiedInSeconds, 0)
+                    .asBitmap()
+                    .encoder(JPEG_ENCODER)
                     .override(MEDIASTORE_THUMB_WIDTH, MEDIASTORE_THUMB_HEIGHT))
                 .placeholder(placeHolderResourceId)
                 .fitCenter()
@@ -808,7 +843,8 @@ public abstract class LocalMediaData implements LocalData {
         @Override
         public View getView(final Context context, View recycled,
                 int thumbWidth, int thumbHeight, int placeHolderResourceId,
-                LocalDataAdapter adapter, boolean isInProgress) {
+                LocalDataAdapter adapter, boolean isInProgress,
+                final ActionCallback actionCallback) {
 
             final VideoViewHolder viewHolder;
             final View result;
@@ -831,9 +867,7 @@ public abstract class LocalMediaData implements LocalData {
             viewHolder.mPlayButton.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    // TODO: refactor this into activities to avoid this class
-                    // conversion.
-                    CameraUtil.playVideo((Activity) context, getUri(), mTitle);
+                    actionCallback.playVideo(getUri(), mTitle);
                 }
             });
 
index 84efd03..8a5d6c6 100644 (file)
@@ -22,6 +22,7 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.ImageView;
+
 import com.android.camera.Storage;
 import com.android.camera2.R;
 import com.bumptech.glide.Glide;
@@ -35,9 +36,9 @@ import java.util.concurrent.TimeUnit;
  */
 public class LocalSessionData implements LocalData {
 
-    private Uri mUri;
+    private final Uri mUri;
     // Units are GMT epoch milliseconds.
-    private long mDateTaken;
+    private final long mDateTaken;
     protected final Bundle mMetaData;
     private int mWidth;
     private int mHeight;
@@ -57,7 +58,8 @@ public class LocalSessionData implements LocalData {
 
     @Override
     public View getView(Context context, View recycled, int thumbWidth, int thumbHeight,
-            int placeholderResourcedId, LocalDataAdapter adapter, boolean isInProgress) {
+            int placeholderResourcedId, LocalDataAdapter adapter, boolean isInProgress,
+            ActionCallback actionCallback) {
         final ImageView imageView;
         if (recycled != null) {
             imageView = (ImageView) recycled;
@@ -70,6 +72,7 @@ public class LocalSessionData implements LocalData {
         int currentVersion = Storage.getJpegVersionForSession(mUri);
         Glide.with(context)
             .loadFromImage(jpegData, mUri.toString() + currentVersion)
+            .skipDiskCache(true)
             .fitCenter()
             .into(imageView);
 
index 74f1073..3b60958 100644 (file)
@@ -17,7 +17,6 @@
 package com.android.camera.data;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
@@ -135,8 +134,9 @@ public class SimpleViewData implements LocalData {
     }
 
     @Override
-    public View getView(Context context, View recycled, int width, int height, int placeHolderResourceId,
-            LocalDataAdapter adapter, boolean isInProgressSession) {
+    public View getView(Context context, View recycled, int width, int height,
+            int placeHolderResourceId, LocalDataAdapter adapter, boolean isInProgressSession,
+            ActionCallback actionCallback) {
         return mView;
     }
 
index cf6952c..05e8229 100644 (file)
@@ -66,6 +66,12 @@ public class DebugCameraProxy extends CameraAgent.CameraProxy {
     }
 
     @Override
+    public CameraAgent getAgent() {
+        log("getAgent");
+        return mProxy.getAgent();
+    }
+
+    @Override
     public CameraCapabilities getCapabilities() {
         log("getCapabilities");
         return mProxy.getCapabilities();
@@ -210,12 +216,6 @@ public class DebugCameraProxy extends CameraAgent.CameraProxy {
     }
 
     @Override
-    public void setErrorCallback(Handler handler, CameraAgent.CameraErrorCallback cb) {
-        log("setErrorCallback");
-        mProxy.setErrorCallback(handler, cb);
-    }
-
-    @Override
     public void setParameters(Camera.Parameters params) {
         log("setParameters");
         mProxy.setParameters(params);
index 122738f..d04e163 100644 (file)
@@ -19,8 +19,8 @@ package com.android.camera.debug;
 import com.android.camera.util.SystemProperties;
 
 public class DebugPropertyHelper {
-    /** Override for 3A properties. */
-    private static final boolean ALL_3A_DEBUG_ON = false;
+    /** Make app start with CaptureModule + ZSL. */
+    private static final boolean FORCE_ZSL_APP = false;
 
     private static final String OFF_VALUE = "0";
     private static final String ON_VALUE = "1";
@@ -29,10 +29,16 @@ public class DebugPropertyHelper {
 
     /** Switch between PhotoModule and the new CaptureModule. */
     private static final String PROP_ENABLE_CAPTURE_MODULE = PREFIX + ".newcapture";
-    /** Enable additional focus logging. */
-    private static final String PROP_FOCUS_DEBUG_LOG = PREFIX + ".frame_log";
-    /** Enable additional debug UI to show AE, AF, Face detection states */
-    private static final String PROP_3A_DEBUG_UI = PREFIX + ".debug_ui";
+    /** Enable frame-by-frame focus logging. */
+    private static final String PROP_FRAME_LOG = PREFIX + ".frame_log";
+    /**
+     * Enable additional capture debug UI.
+     * For API1/Photomodule: show faces.
+     * For API2/Capturemodule: show faces, AF state, AE/AF precise regions.
+     */
+    private static final String PROP_CAPTURE_DEBUG_UI = PREFIX + ".debug_ui";
+    /** Switch between OneCameraImpl and OneCameraZslImpl. */
+    private static final String PROP_ENABLE_ZSL = PREFIX + ".zsl";
     /** Write data about each capture request to disk. */
     private static final String PROP_WRITE_CAPTURE_DATA = PREFIX + ".capture_write";
 
@@ -41,19 +47,19 @@ public class DebugPropertyHelper {
     }
 
     public static boolean isCaptureModuleEnabled() {
-        return ALL_3A_DEBUG_ON || isPropertyOn(PROP_ENABLE_CAPTURE_MODULE);
+        return isPropertyOn(PROP_ENABLE_CAPTURE_MODULE) || FORCE_ZSL_APP;
     }
 
-    public static boolean showFocusDebugLog() {
-        return ALL_3A_DEBUG_ON || isPropertyOn(PROP_FOCUS_DEBUG_LOG);
+    public static boolean isZslEnabled() {
+        return isPropertyOn(PROP_ENABLE_ZSL) || FORCE_ZSL_APP;
     }
 
-    public static boolean showFocusDebugUI() {
-        return ALL_3A_DEBUG_ON || isPropertyOn(PROP_3A_DEBUG_UI);
+    public static boolean showFrameDebugLog() {
+        return isPropertyOn(PROP_FRAME_LOG);
     }
 
-    public static boolean showFaceDebugUI() {
-        return ALL_3A_DEBUG_ON || isPropertyOn(PROP_3A_DEBUG_UI);
+    public static boolean showCaptureDebugUI() {
+        return isPropertyOn(PROP_CAPTURE_DEBUG_UI);
     }
 
     public static boolean writeCaptureData() {
index b6a8e8c..1b3c98c 100644 (file)
 
 package com.android.camera.debug;
 
+import android.os.Build;
+
+import com.android.camera.util.ReleaseHelper;
+
 public class Log {
     /**
      * All Camera logging using this class will use this tag prefix.
@@ -123,13 +127,22 @@ public class Log {
                 // than the desired output level. This applies to all tags.
                 return LogHelper.getOverrideLevel() <= level;
             } else {
-                // The prefix can be used as an override tag to see all camera logs
-                return android.util.Log.isLoggable(CAMERA_LOGTAG_PREFIX, level)
-                        || android.util.Log.isLoggable(tag.toString(), level);
+                return ReleaseHelper.shouldLogVerbose() ||
+                        isDebugOsBuild() || shouldLog(tag, level);
             }
         } catch (IllegalArgumentException ex) {
             e(TAG, "Tag too long:" + tag);
             return false;
         }
     }
+
+    private static boolean shouldLog(Tag tag, int level) {
+        // The prefix can be used as an override tag to see all camera logs
+        return android.util.Log.isLoggable(CAMERA_LOGTAG_PREFIX, level)
+                || android.util.Log.isLoggable(tag.toString(), level);
+    }
+
+    private static boolean isDebugOsBuild() {
+        return "userdebug".equals(Build.TYPE) || "eng".equals(Build.TYPE);
+    }
 }
index e1ca61d..65ae48a 100644 (file)
@@ -19,6 +19,8 @@ package com.android.camera.filmstrip;
 import android.content.Context;
 import android.view.View;
 
+import com.android.camera.data.LocalData.ActionCallback;
+
 /**
  * An interface which defines the interactions between the
  * {@link ImageData} and the
@@ -85,7 +87,7 @@ public interface DataAdapter {
      * @return The view representing the image data. Null if unavailable or
      *         the {@code dataID} is out of range.
      */
-    public View getView(Context context, View recycled, int dataID);
+    public View getView(Context context, View recycled, int dataID, ActionCallback actionCallback);
 
     /** Returns a unique identifier for the view created by this data so that the view
      * can be reused.
index 132d5ec..62ad8e5 100644 (file)
@@ -58,7 +58,7 @@ public class ModulesInfo {
             registerRefocusModule(moduleManager, context.getResources()
                     .getInteger(R.integer.camera_mode_refocus));
         }
-        if (GcamHelper.hasGcamCapture()) {
+        if (GcamHelper.hasGcamAsSeparateModule()) {
             registerGcamModule(moduleManager, context.getResources()
                     .getInteger(R.integer.camera_mode_gcam));
         }
index 25848b6..9b473a7 100644 (file)
@@ -17,6 +17,9 @@
 package com.android.camera.one;
 
 import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
 
 /**
  * A common abstract {@link OneCamera} implementation that contains some utility
@@ -29,6 +32,12 @@ public abstract class AbstractOneCamera implements OneCamera {
     protected FocusStateListener mFocusStateListener;
     protected ReadyStateChangedListener mReadyStateChangedListener;
 
+    /**
+     * Number of characters from the end of the device serial number used to
+     * construct folder names for debugging output.
+     */
+    static final int DEBUG_FOLDER_SERIAL_LENGTH = 4;
+
     @Override
     public final void setCameraErrorListener(CameraErrorListener listener) {
         mCameraErrorListener = listener;
@@ -47,6 +56,10 @@ public abstract class AbstractOneCamera implements OneCamera {
     /**
      * Create a directory we can use to store debugging information during Gcam
      * captures.
+     * <br />
+     * The directory created is [root]/[folderName]/SSSS_YYYYMMDD_HHMMSS_XXX,
+     * where 'SSSS' are the last 'DEBUG_FOLDER_SERIAL_LENGTH' digits of the
+     * devices serial number, and 'XXX' are milliseconds of the timestamp.
      *
      * @param root the root into which we put a session-specific sub-directory.
      * @param folderName the sub-folder within 'root' where the data should be
@@ -62,8 +75,25 @@ public abstract class AbstractOneCamera implements OneCamera {
             throw new RuntimeException("Gcam debug directory not valid or doesn't exist: "
                     + root.getAbsolutePath());
         }
-        File destFolder = (new File(new File(root, folderName),
-                String.valueOf(System.currentTimeMillis())));
+
+        String serialSubstring = "";
+        String serial = android.os.Build.SERIAL;
+        if (serial != null) {
+            int length = serial.length();
+
+            if (length > DEBUG_FOLDER_SERIAL_LENGTH) {
+                serialSubstring = serial.substring(length - DEBUG_FOLDER_SERIAL_LENGTH, length);
+            } else {
+                serialSubstring = serial;
+            }
+        }
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS");
+        simpleDateFormat.setTimeZone(TimeZone.getDefault());
+        String currentDateAndTime = simpleDateFormat.format(new Date());
+
+        String burstFolderName = String.format("%s_%s", serialSubstring, currentDateAndTime);
+        File destFolder = new File(new File(root, folderName), burstFolderName);
         if (!destFolder.mkdirs()) {
             throw new RuntimeException("Could not create Gcam debug data folder.");
         }
index f06be7e..743be37 100644 (file)
@@ -16,7 +16,8 @@
 
 package com.android.camera.one;
 
-import android.graphics.Bitmap;
+import android.content.Context;
+import android.location.Location;
 import android.net.Uri;
 import android.view.Surface;
 
@@ -38,23 +39,32 @@ public interface OneCamera {
     }
 
     /**
-     * Auto focus system status.
+     * Auto focus system status; 1:1 mapping from camera2 AF_STATE.
      * <ul>
      * <li>{@link #INACTIVE}</li>
-     * <li>{@link #SCANNING}</li>
-     * <li>{@link #STOPPED_FOCUSED}</li>
-     * <li>{@link #STOPPED_UNFOCUSED}</li>
+     * <li>{@link #ACTIVE_SCAN}</li>
+     * <li>{@link #ACTIVE_FOCUSED}</li>
+     * <li>{@link #ACTIVE_UNFOCUSED}</li>
+     * <li>{@link #PASSIVE_SCAN}</li>
+     * <li>{@link #PASSIVE_FOCUSED}</li>
+     * <li>{@link #PASSIVE_UNFOCUSED}</li>
      * </ul>
      */
     public static enum AutoFocusState {
         /** Indicates AF system is inactive for some reason (could be an error). */
         INACTIVE,
-        /** Indicates scan in progress. */
-        SCANNING,
-        /** Indicates scan success (camera in focus). */
-        STOPPED_FOCUSED,
-        /** Indicates scan or other failure. */
-        STOPPED_UNFOCUSED
+        /** Indicates active scan in progress. */
+        ACTIVE_SCAN,
+        /** Indicates active scan success (in focus). */
+        ACTIVE_FOCUSED,
+        /** Indicates active scan failure (not in focus). */
+        ACTIVE_UNFOCUSED,
+        /** Indicates passive scan in progress. */
+        PASSIVE_SCAN,
+        /** Indicates passive scan success (in focus). */
+        PASSIVE_FOCUSED,
+        /** Indicates passive scan failure (not in focus). */
+        PASSIVE_UNFOCUSED
     }
 
     /**
@@ -87,6 +97,12 @@ public interface OneCamera {
          * Called if opening the camera failed.
          */
         public void onFailure();
+
+        /**
+         * Called if the camera is closed or disconnected while attempting to
+         * open.
+         */
+        public void onCameraClosed();
     }
 
     /**
@@ -132,10 +148,17 @@ public interface OneCamera {
      */
     public static interface PictureCallback {
         /**
+         * Called near the the when an image is being exposed for cameras which
+         * are exposing a single frame, so that a UI can be presented for the
+         * capture.
+         */
+        public void onQuickExpose();
+
+        /**
          * Called when a thumbnail image is provided before the final image is
          * finished.
          */
-        public void onThumbnailResult(Bitmap bitmap);
+        public void onThumbnailResult(byte[] jpegData);
 
         /**
          * Called when the final picture is done taking
@@ -183,12 +206,12 @@ public interface OneCamera {
      */
     public static interface FocusStateListener {
         /**
-         * Called when mode or state of auto focus system changes.
+         * Called when state of auto focus system changes.
          *
-         * @param mode Is manual AF trigger cycle active.
-         * @param state Current state: scanning, focused, not focused, inactive.
+         * @param state Current auto focus state.
+         * @param frameNumber Frame number if available.
          */
-        public void onFocusStatusUpdate(AutoFocusMode mode, AutoFocusState state);
+        public void onFocusStatusUpdate(AutoFocusState state, long frameNumber);
     }
 
     /**
@@ -214,7 +237,12 @@ public interface OneCamera {
         public int heading = Integer.MIN_VALUE;
         /** Flash mode for this capture. */
         public Flash flashMode = Flash.AUTO;
-        // TODO: Add Location
+        /** The location of this capture. */
+        public Location location = null;
+        /** Zoom value. */
+        public float zoom = 1f;
+        /** Timer duration in seconds or null for no timer. */
+        public Float timerSeconds = null;
 
         /** Set this to provide a debug folder for this capture. */
         public File debugDataFolder;
@@ -244,18 +272,13 @@ public interface OneCamera {
     }
 
     /**
-     * Triggers auto focus scan for default ROI.
-     */
-    public void triggerAutoFocus();
-
-    /**
      * Meters and triggers auto focus scan with ROI around tap point.
      * <p/>
-     * Normalized coordinates are referenced to portrait preview window with 0,0
-     * top left and 1,1 bottom right. Rotation has no effect.
+     * Normalized coordinates are referenced to portrait preview window with
+     * (0, 0) top left and (1, 1) bottom right. Rotation has no effect.
      *
      * @param nx normalized x coordinate.
-     * @param nx normalized y coordinate.
+     * @param ny normalized y coordinate.
      */
     public void triggerFocusAndMeterAtPoint(float nx, float ny);
 
@@ -296,7 +319,7 @@ public interface OneCamera {
      * The preview size requested from the camera device will depend on this as
      * well as the requested photo/video aspect ratio.
      */
-    public void setViewFinderSize(int width, int height);
+    public void setViewfinderSize(int width, int height);
 
     /**
      * @return Whether this camera supports flash.
@@ -327,7 +350,7 @@ public interface OneCamera {
      * @return The aspect ratio of the full size capture (usually the native
      *         resolution of the camera).
      */
-    public double getFullSizeAspectRatio();
+    public float getFullSizeAspectRatio();
 
     /**
      * @return Whether this camera is facing to the back.
@@ -355,4 +378,17 @@ public interface OneCamera {
      * @param zoom Zoom ratio value passed to scaler.
      */
     public void setZoom(float zoom);
+
+    /**
+     * Based on the selected picture size, this returns the best preview size.
+     *
+     * @param pictureSize the picture size as selected by the user. A camera
+     *            might choose not to obey these and therefore the returned
+     *            preview size might not match the aspect ratio of the given
+     *            size.
+     * @param context the android application context
+     * @return The preview size that best matches the picture aspect ratio that
+     *         will be taken.
+     */
+    public Size pickPreviewSize(Size pictureSize, Context context);
 }
diff --git a/src/com/android/camera/one/OneCameraException.java b/src/com/android/camera/one/OneCameraException.java
new file mode 100644 (file)
index 0000000..154acbe
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 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.one;
+
+/**
+ * Used for exceptions thrown by OneCamera API. Use this for severe,
+ * irrecoverable errors only.
+ */
+public class OneCameraException extends Exception {
+    private static final long serialVersionUID = 1L;
+
+    public OneCameraException(String message) {
+        super(message);
+    }
+}
index ec2a5be..607e6a0 100644 (file)
@@ -20,6 +20,7 @@ import android.content.Context;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraManager;
+import android.os.Handler;
 import android.util.DisplayMetrics;
 import android.view.WindowManager;
 
@@ -28,6 +29,7 @@ import com.android.camera.debug.Log;
 import com.android.camera.debug.Log.Tag;
 import com.android.camera.one.OneCamera.Facing;
 import com.android.camera.one.OneCamera.OpenCallback;
+import com.android.camera.util.ApiHelper;
 import com.android.camera.util.Size;
 
 /**
@@ -41,14 +43,20 @@ public abstract class OneCameraManager {
      * Attempts to open the camera facing the given direction with the given
      * capture size.
      *
+     * Exactly one call will always be made to a single method in the provided
+     * {@link OpenCallback}.
+     *
      * @param facing which camera to open. The first camera found in the given
      *            direction will be opened.
+     * @param enableHdr if an HDR feature exists, open a camera that supports it
      * @param captureSize the capture size. This must be one of the supported
      *            sizes.
      * @param callback this listener is called when the camera was opened or
      *            when it failed to open.
+     * @param handler the handler on which callback methods are invoked.
      */
-    public abstract void open(Facing facing, Size captureSize, OpenCallback callback);
+    public abstract void open(Facing facing, boolean enableHdr, Size captureSize,
+            OpenCallback callback, Handler handler);
 
     /**
      * Returns whether the device has a camera facing the given direction.
@@ -56,57 +64,74 @@ public abstract class OneCameraManager {
     public abstract boolean hasCameraFacing(Facing facing);
 
     /**
-     * Singleton camera manager to be used throughout the app.
-     */
-    private static OneCameraManager sCameraManager;
-
-    /**
-     * Returns a camera manager that is based on Camera2 API, if available, or
+     * Creates a camera manager that is based on Camera2 API, if available, or
      * otherwise uses the portability layer API.
-     * <p>
-     * The instance is created the first time this method is called and cached
-     * in a singleton thereafter, so successive calls are cheap.
+     *
+     * @throws OneCameraException Thrown if an error occurred while trying to
+     *             access the camera.
      */
-    public static OneCameraManager get(CameraActivity activity) {
-        if (sCameraManager == null) {
-            sCameraManager = create(activity);
-        }
-        return sCameraManager;
+    public static OneCameraManager get(CameraActivity activity) throws OneCameraException {
+        return create(activity);
     }
 
     /**
      * Creates a new camera manager that is based on Camera2 API, if available,
      * or otherwise uses the portability API.
+     *
+     * @throws OneCameraException Thrown if an error occurred while trying to
+     *             access the camera.
      */
-    private static OneCameraManager create(CameraActivity activity) {
+    private static OneCameraManager create(CameraActivity activity) throws OneCameraException {
         DisplayMetrics displayMetrics = getDisplayMetrics(activity);
-        CameraManager cameraManager = (CameraManager) activity
-                .getSystemService(Context.CAMERA_SERVICE);
-        int maxMemoryMB = activity.getServices().getMemoryManager()
-                .getMaxAllowedNativeMemoryAllocation();
-        if (cameraManager != null && isCamera2FullySupported(cameraManager)) {
-            return new com.android.camera.one.v2.OneCameraManagerImpl(cameraManager, maxMemoryMB,
-                    displayMetrics);
+        CameraManager cameraManager = null;
+
+        try {
+            cameraManager = ApiHelper.HAS_CAMERA_2_API ? (CameraManager) activity
+                    .getSystemService(Context.CAMERA_SERVICE) : null;
+        } catch (IllegalStateException ex) {
+            cameraManager = null;
+            Log.e(TAG, "Could not get camera service v2", ex);
+        }
+        if (cameraManager != null && isCamera2Supported(cameraManager)) {
+            int maxMemoryMB = activity.getServices().getMemoryManager()
+                    .getMaxAllowedNativeMemoryAllocation();
+            return new com.android.camera.one.v2.OneCameraManagerImpl(
+                    activity.getAndroidContext(), cameraManager, maxMemoryMB,
+                    displayMetrics, activity.getSoundPlayer());
         } else {
             return new com.android.camera.one.v1.OneCameraManagerImpl();
         }
     }
 
     /**
-     * Returns whether the device fully supports API2,
+     * Returns whether the device fully supports API2
      *
      * @param cameraManager the Camera2 API manager.
      * @return If this device is only emulating Camera2 API on top of an older
      *         HAL (such as the Nexus 4, 7 or 10), this method returns false. It
      *         only returns true, if Camera2 is fully supported through newer
      *         HALs.
+     * @throws OneCameraException Thrown if an error occurred while trying to
+     *             access the camera.
      */
-    private static boolean isCamera2FullySupported(CameraManager cameraManager) {
+    private static boolean isCamera2Supported(CameraManager cameraManager)
+            throws OneCameraException {
+        if (!ApiHelper.HAS_CAMERA_2_API) {
+            return false;
+        }
         try {
-            final String id = cameraManager.getCameraIdList()[0];
+            String[] cameraIds = cameraManager.getCameraIdList();
+            if (cameraIds.length == 0) {
+                throw new OneCameraException("Camera 2 API supported but no devices available.");
+            }
+            final String id = cameraIds[0];
+            // TODO: We should check for all the flags we need to ensure the
+            // device is capable of taking Camera2 API shots. For now, let's
+            // accept all device that are either 'partial' or 'full' devices
+            // (but not legacy).
             return cameraManager.getCameraCharacteristics(id).get(
                     CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
-                == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
+                != CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;
         } catch (CameraAccessException ex) {
             Log.e(TAG, "Could not access camera to determine hardware-level API support.");
             return false;
diff --git a/src/com/android/camera/one/Settings3A.java b/src/com/android/camera/one/Settings3A.java
new file mode 100644 (file)
index 0000000..cdfaa52
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2014 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.one;
+
+/**
+ * Contains 3A parameters common to all camera flavors.
+ * TODO: Move to GservicesHelper.
+ */
+public class Settings3A {
+
+    /**
+     * Width of touch AF region in [0,1] relative to shorter edge of the current
+     * crop region. Multiply this number by the number of pixels along the
+     * shorter edge of the current crop region's width to get a value in pixels.
+     *
+     * <p>
+     * This value has been tested on Nexus 5 and Shamu, but will need to be
+     * tuned per device depending on how its ISP interprets the metering box and weight.
+     * </p>
+     *
+     * <p>
+     * Values prior to L release:
+     * Normal mode: 0.125 * longest edge
+     * Gcam: Fixed at 300px x 300px.
+     * </p>
+     */
+    private static final float AF_REGION_BOX = 0.2f;
+
+    /**
+     * Width of touch metering region in [0,1] relative to shorter edge of the
+     * current crop region. Multiply this number by the number of pixels along
+     * shorter edge of the current crop region's width to get a value in pixels.
+     *
+     * <p>
+     * This value has been tested on Nexus 5 and Shamu, but will need to be
+     * tuned per device depending on how its ISP interprets the metering box and weight.
+     * </p>
+     *
+     * <p>
+     * Values prior to L release:
+     * Normal mode: 0.1875 * longest edge
+     * Gcam: Fixed at 300px x 300px.
+     * </p>
+     */
+    private static final float AE_REGION_BOX = 0.3f;
+
+    /** Metering region weight between 0 and 1.
+     *
+     * <p>
+     * This value has been tested on Nexus 5 and Shamu, but will need to be
+     * tuned per device depending on how its ISP interprets the metering box and weight.
+     * </p>
+     */
+    private static final float REGION_WEIGHT = 0.022f;
+
+    /** Duration to hold after manual tap to focus. */
+    private static final int FOCUS_HOLD_MILLIS = 3000;
+
+    /**
+     * The number of milliseconds to hold tap-to-expose/metering after the
+     * last payload frame is received before returning to continuous 3A.
+     */
+    private static final int GCAM_POST_SHOT_FOCUS_HOLD_MILLIS = 1000;
+
+    /**
+     * Width of touch metering region in [0,1] relative to shorter edge of the
+     * current crop region. Multiply this number by the number of pixels along
+     * shorter edge of the current crop region's width to get a value in pixels.
+     *
+     * <p>
+     * This value has been tested on Nexus 5 and Shamu, but will need to be
+     * tuned per device depending on how its ISP interprets the metering box and weight.
+     * </p>
+     *
+     * <p>
+     * Was fixed at 300px x 300px prior to L release.
+     * </p>
+     */
+    private static final float GCAM_METERING_REGION_FRACTION = 0.1225f;
+
+    /**
+     * Weight of a touch metering region, in [0, \inf).
+     *
+     * <p>
+     * This value has been tested on Nexus 5 and Shamu, but will need to be
+     * tuned per device.
+     * </p>
+     *
+     * <p>
+     * Was fixed at 15.0f prior to L release.
+     * </p>
+     */
+    private static final float GCAM_METERING_REGION_WEIGHT = 45.0f;
+
+    public static float getAutoFocusRegionWidth() {
+        return AF_REGION_BOX;
+    }
+
+    public static float getMeteringRegionWidth() {
+        return AE_REGION_BOX;
+    }
+
+    public static float getMeteringRegionWeight() {
+        return REGION_WEIGHT;
+    }
+
+    public static float getGcamMeteringRegionFraction() {
+        return GCAM_METERING_REGION_FRACTION;
+    }
+
+    public static float getGcamMeteringRegionWeight() {
+        return GCAM_METERING_REGION_WEIGHT;
+    }
+
+    public static int getFocusHoldMillis() {
+        return FOCUS_HOLD_MILLIS;
+    }
+
+    public static int getGcamPostShotFocusHoldMillis() {
+        return GCAM_POST_SHOT_FOCUS_HOLD_MILLIS;
+    }
+}
index 054aead..839ca5a 100644 (file)
@@ -16,6 +16,8 @@
 
 package com.android.camera.one.v1;
 
+import android.os.Handler;
+
 import com.android.camera.one.OneCamera.Facing;
 import com.android.camera.one.OneCamera.OpenCallback;
 import com.android.camera.one.OneCameraManager;
@@ -28,7 +30,7 @@ import com.android.camera.util.Size;
 public class OneCameraManagerImpl extends OneCameraManager {
 
     @Override
-    public void open(Facing facing, Size pictureSize, OpenCallback callback) {
+    public void open(Facing facing, boolean enableHdr, Size pictureSize, OpenCallback callback, Handler handler) {
         throw new RuntimeException("Not implemented yet.");
     }
 
index e06f3e6..6416d70 100644 (file)
 
 package com.android.camera.one.v2;
 
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.params.MeteringRectangle;
 
 import com.android.camera.debug.Log;
 import com.android.camera.one.OneCamera;
+import com.android.camera.one.Settings3A;
+import com.android.camera.util.CameraUtil;
 
 /**
- * Helper class to implement autofocus and 3A in camera2-based
+ * Helper class to implement auto focus and 3A in camera2-based
  * {@link com.android.camera.one.OneCamera} implementations.
  */
 public class AutoFocusHelper {
-
     private static final Log.Tag TAG = new Log.Tag("OneCameraAFHelp");
 
+    /** camera2 API metering region weight. */
+    private static final int CAMERA2_REGION_WEIGHT = (int)
+        (CameraUtil.lerp(MeteringRectangle.METERING_WEIGHT_MIN, MeteringRectangle.METERING_WEIGHT_MAX,
+                        Settings3A.getMeteringRegionWeight()));
+
+    /** Zero weight 3A region, to reset regions per API. */
+    private static final MeteringRectangle[] ZERO_WEIGHT_3A_REGION = new MeteringRectangle[]{
+            new MeteringRectangle(0, 0, 0, 0, 0)
+    };
+
+    public static MeteringRectangle[] getZeroWeightRegion() {
+        return ZERO_WEIGHT_3A_REGION;
+    }
+
     /**
      * Convert reported camera2 AF state to OneCamera AutoFocusState.
      */
     public static OneCamera.AutoFocusState stateFromCamera2State(int state) {
         switch (state) {
             case CaptureResult.CONTROL_AF_STATE_ACTIVE_SCAN:
+                return OneCamera.AutoFocusState.ACTIVE_SCAN;
             case CaptureResult.CONTROL_AF_STATE_PASSIVE_SCAN:
-                return OneCamera.AutoFocusState.SCANNING;
+                return OneCamera.AutoFocusState.PASSIVE_SCAN;
             case CaptureResult.CONTROL_AF_STATE_PASSIVE_FOCUSED:
+                return OneCamera.AutoFocusState.PASSIVE_FOCUSED;
             case CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED:
-                return OneCamera.AutoFocusState.STOPPED_FOCUSED;
+                return OneCamera.AutoFocusState.ACTIVE_FOCUSED;
             case CaptureResult.CONTROL_AF_STATE_PASSIVE_UNFOCUSED:
+                return OneCamera.AutoFocusState.PASSIVE_UNFOCUSED;
             case CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED:
-                return OneCamera.AutoFocusState.STOPPED_UNFOCUSED;
+                return OneCamera.AutoFocusState.ACTIVE_UNFOCUSED;
             default:
                 return OneCamera.AutoFocusState.INACTIVE;
         }
     }
 
     /**
-     * Convert reported camera2 AF state to OneCamera AutoFocusMode.
+     * Complain if CONTROL_AF_STATE is not present in result.
+     * Could indicate bug in API implementation.
      */
-    public static OneCamera.AutoFocusMode modeFromCamera2Mode(int mode) {
-        if (mode == CaptureResult.CONTROL_AF_MODE_AUTO) {
-            return OneCamera.AutoFocusMode.AUTO;
-        } else {
-            // CONTROL_AF_MODE_CONTINUOUS_PICTURE is the other mode used.
-            return OneCamera.AutoFocusMode.CONTINUOUS_PICTURE;
+    public static boolean checkControlAfState(CaptureResult result) {
+        boolean missing = result.get(CaptureResult.CONTROL_AF_STATE) == null;
+        if (missing) {
+            // throw new IllegalStateException("CaptureResult missing CONTROL_AF_STATE.");
+            Log.e(TAG, "\n!!!! TotalCaptureResult missing CONTROL_AF_STATE. !!!!\n ");
         }
+        return !missing;
     }
 
-    public static void logExtraFocusInfo(CaptureResult result) {
-        // Nexus 5 has a bug where CONTROL_AF_STATE is missing sometimes.
-        if (result.get(CaptureResult.CONTROL_AF_STATE) == null) {
-            // throw new
-            // IllegalStateException("CaptureResult missing CONTROL_AF_STATE.");
-            Log.e(TAG, "\n!!!! TotalCaptureResult missing CONTROL_AF_STATE. !!!!\n ");
-            return;
-        }
-        if (result.get(CaptureResult.LENS_STATE) == null) {
-            // throw new
-            // IllegalStateException("CaptureResult missing LENS_STATE.");
+    /**
+     * Complain if LENS_STATE is not present in result.
+     * Could indicate bug in API implementation.
+     */
+    public static boolean checkLensState(CaptureResult result) {
+        boolean missing = result.get(CaptureResult.LENS_STATE) == null;
+        if (missing) {
+            // throw new IllegalStateException("CaptureResult missing LENS_STATE.");
             Log.e(TAG, "\n!!!! TotalCaptureResult missing LENS_STATE. !!!!\n ");
+        }
+        return !missing;
+    }
+
+
+    public static void logExtraFocusInfo(CaptureResult result) {
+        if(!checkControlAfState(result) || !checkLensState(result)) {
             return;
         }
 
@@ -85,6 +112,110 @@ public class AutoFocusHelper {
         ));
     }
 
+    /** Compute 3A regions for a sensor-referenced touch coordinate.
+     * Returns a MeteringRectangle[] with length 1.
+     *
+     * @param nx x coordinate of the touch point, in normalized portrait coordinates.
+     * @param ny y coordinate of the touch point, in normalized portrait coordinates.
+     * @param fraction Fraction in [0,1]. Multiplied by min(cropRegion.width(), cropRegion.height())
+     *             to determine the side length of the square MeteringRectangle.
+     * @param cropRegion Crop region of the image.
+     * @param sensorOrientation sensor orientation as defined by
+     *             CameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION).
+     */
+    private static MeteringRectangle[] regionsForNormalizedCoord(float nx, float ny,
+        float fraction, final Rect cropRegion, int sensorOrientation) {
+        // Compute half side length in pixels.
+        int minCropEdge = Math.min(cropRegion.width(), cropRegion.height());
+        int halfSideLength = (int) (0.5f * fraction * minCropEdge);
+
+        // Compute the output MeteringRectangle in sensor space.
+        // nx, ny is normalized to the screen.
+        // Crop region itself is specified in sensor coordinates.
+
+        // Normalized coordinates, now rotated into sensor space.
+        PointF nsc = CameraUtil.normalizedSensorCoordsForNormalizedDisplayCoords(
+            nx, ny, sensorOrientation);
+
+        int xCenterSensor = (int)(cropRegion.left + nsc.x * cropRegion.width());
+        int yCenterSensor = (int)(cropRegion.top + nsc.y * cropRegion.height());
+
+        Rect meteringRegion = new Rect(xCenterSensor - halfSideLength,
+            yCenterSensor - halfSideLength,
+            xCenterSensor + halfSideLength,
+            yCenterSensor + halfSideLength);
+
+        // Clamp meteringRegion to cropRegion.
+        meteringRegion.left = CameraUtil.clamp(meteringRegion.left, cropRegion.left, cropRegion.right);
+        meteringRegion.top = CameraUtil.clamp(meteringRegion.top, cropRegion.top, cropRegion.bottom);
+        meteringRegion.right = CameraUtil.clamp(meteringRegion.right, cropRegion.left, cropRegion.right);
+        meteringRegion.bottom = CameraUtil.clamp(meteringRegion.bottom, cropRegion.top, cropRegion.bottom);
+
+        return new MeteringRectangle[]{new MeteringRectangle(meteringRegion, CAMERA2_REGION_WEIGHT)};
+    }
+
+    /**
+     * Return AF region(s) for a sensor-referenced touch coordinate.
+     *
+     * <p>
+     * Normalized coordinates are referenced to portrait preview window with
+     * (0, 0) top left and (1, 1) bottom right. Rotation has no effect.
+     * </p>
+     *
+     * @return AF region(s).
+     */
+    public static MeteringRectangle[] afRegionsForNormalizedCoord(float nx,
+        float ny, final Rect cropRegion, int sensorOrientation) {
+        return regionsForNormalizedCoord(nx, ny, Settings3A.getAutoFocusRegionWidth(),
+            cropRegion, sensorOrientation);
+    }
+
+    /**
+     * Return AE region(s) for a sensor-referenced touch coordinate.
+     *
+     * <p>
+     * Normalized coordinates are referenced to portrait preview window with
+     * (0, 0) top left and (1, 1) bottom right. Rotation has no effect.
+     * </p>
+     *
+     * @return AE region(s).
+     */
+    public static MeteringRectangle[] aeRegionsForNormalizedCoord(float nx,
+        float ny, final Rect cropRegion, int sensorOrientation) {
+        return regionsForNormalizedCoord(nx, ny, Settings3A.getMeteringRegionWidth(),
+            cropRegion, sensorOrientation);
+    }
+
+    /**
+     * [Gcam mode only]: Return AE region(s) for a sensor-referenced touch coordinate.
+     *
+     * <p>
+     * Normalized coordinates are referenced to portrait preview window with
+     * (0, 0) top left and (1, 1) bottom right. Rotation has no effect.
+     * </p>
+     *
+     * @return AE region(s).
+     */
+    public static MeteringRectangle[] gcamAERegionsForNormalizedCoord(float nx,
+        float ny, final Rect cropRegion, int sensorOrientation) {
+        return regionsForNormalizedCoord(nx, ny, Settings3A.getGcamMeteringRegionFraction(),
+            cropRegion, sensorOrientation);
+    }
+
+    /**
+     * Calculates sensor crop region for a zoom level (zoom >= 1.0).
+     *
+     * @return Crop region.
+     */
+    public static Rect cropRegionForZoom(CameraCharacteristics characteristics, float zoom) {
+        Rect sensor = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
+        int xCenter = sensor.width() / 2;
+        int yCenter = sensor.height() / 2;
+        int xDelta = (int) (0.5f * sensor.width() / zoom);
+        int yDelta = (int) (0.5f * sensor.height() / zoom);
+        return new Rect(xCenter - xDelta, yCenter - yDelta, xCenter + xDelta, yCenter + yDelta);
+    }
+
     /**
      * Utility function: converts CaptureResult.CONTROL_AF_STATE to String.
      */
diff --git a/src/com/android/camera/one/v2/ImageCaptureManager.java b/src/com/android/camera/one/v2/ImageCaptureManager.java
new file mode 100644 (file)
index 0000000..0687071
--- /dev/null
@@ -0,0 +1,695 @@
+/*
+ * Copyright (C) 2014 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.one.v2;
+
+import android.annotation.TargetApi;
+import android.hardware.camera2.CameraCaptureSession;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.CaptureResult.Key;
+import android.hardware.camera2.TotalCaptureResult;
+import android.media.Image;
+import android.media.ImageReader;
+import android.os.Build;
+import android.os.Handler;
+import android.os.SystemClock;
+import android.util.Pair;
+
+import com.android.camera.debug.Log;
+import com.android.camera.debug.Log.Tag;
+import com.android.camera.util.ConcurrentSharedRingBuffer;
+import com.android.camera.util.ConcurrentSharedRingBuffer.PinStateListener;
+import com.android.camera.util.ConcurrentSharedRingBuffer.Selector;
+import com.android.camera.util.ConcurrentSharedRingBuffer.SwapTask;
+import com.android.camera.util.Task;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Implements {@link android.media.ImageReader.OnImageAvailableListener} and
+ * {@link android.hardware.camera2.CameraCaptureSession.CaptureListener} to
+ * store the results of capture requests (both {@link Image}s and
+ * {@link TotalCaptureResult}s in a ring-buffer from which they may be saved.
+ * <br>
+ * This also manages the lifecycle of {@link Image}s within the application as
+ * they are passed in from the lower-level camera2 API.
+ */
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+public class ImageCaptureManager extends CameraCaptureSession.CaptureCallback implements
+        ImageReader.OnImageAvailableListener {
+    /**
+     * Callback to listen for changes to the ability to capture an existing
+     * image from the internal ring-buffer.
+     */
+    public interface CaptureReadyListener {
+        /**
+         * Called whenever the ability to capture an existing image from the
+         * ring-buffer changes. Calls to {@link #tryCaptureExistingImage} are
+         * more likely to succeed or fail depending on the value passed in to
+         * this function.
+         *
+         * @param capturePossible true if capture is more-likely to be possible,
+         *            false if capture is less-likely to be possible.
+         */
+        public void onReadyStateChange(boolean capturePossible);
+    }
+
+    /**
+     * Callback for listening to changes to individual metadata values.
+     */
+    public static interface MetadataChangeListener {
+        /**
+         * This will be called whenever a metadata value changes.
+         * Implementations should not take too much time to execute since this
+         * will be called faster than the camera's frame rate.
+         *
+         * @param key the {@link CaptureResult} key this listener listens for.
+         * @param second the previous value, or null if no such value existed.
+         *            The type will be that associated with the
+         *            {@link android.hardware.camera2.CaptureResult.Key} this
+         *            listener is bound to.
+         * @param newValue the new value. The type will be that associated with
+         *            the {@link android.hardware.camera2.CaptureResult.Key}
+         *            this listener is bound to.
+         * @param result the CaptureResult containing the new value
+         */
+        public void onImageMetadataChange(Key<?> key, Object second, Object newValue,
+                CaptureResult result);
+    }
+
+    /**
+     * Callback for saving an image.
+     */
+    public interface ImageCaptureListener {
+         /**
+         * Called with the {@link Image} and associated
+         * {@link TotalCaptureResult}. A typical implementation would save this
+         * to disk.
+         * <p>
+         * Note: Implementations must be thread-safe and must not close the
+         * image.
+         * </p>
+         */
+        public void onImageCaptured(Image image, TotalCaptureResult captureResult);
+    }
+
+    /**
+     * Callback for placing constraints on which images to capture. See
+     * {@link #tryCaptureExistingImage} and {@link #captureNextImage}.
+     */
+    public static interface CapturedImageConstraint {
+        /**
+         * Implementations should return true if the provided
+         * TotalCaptureResults satisfies constraints necessary for the intended
+         * image capture. For example, a constraint may return false if
+         * {@captureResult} indicates that the lens was moving during image
+         * capture.
+         *
+         * @param captureResult The metadata associated with the image.
+         * @return true if this image satisfies the constraint and can be
+         *         captured, false otherwise.
+         */
+        boolean satisfiesConstraint(TotalCaptureResult captureResult);
+    }
+
+    /**
+     * Holds an {@link Image} and {@link TotalCaptureResult} pair which may be
+     * added asynchronously.
+     */
+    private class CapturedImage {
+        /**
+         * The Image and TotalCaptureResult may be received at different times
+         * (via the onImageAvailableListener and onCaptureProgressed callbacks,
+         * respectively).
+         */
+        private Image mImage = null;
+        private TotalCaptureResult mMetadata = null;
+
+        /**
+         * Resets the object, closing and removing any existing image and
+         * metadata.
+         */
+        public void reset() {
+            if (mImage != null) {
+                mImage.close();
+                int numOpenImages = mNumOpenImages.decrementAndGet();
+                if (DEBUG_PRINT_OPEN_IMAGE_COUNT) {
+                    Log.v(TAG, "Closed an image. Number of open images = " + numOpenImages);
+                }
+            }
+
+            mImage = null;
+
+            mMetadata = null;
+        }
+
+        /**
+         * @return true if both the image and metadata are present, false
+         *         otherwise.
+         */
+        public boolean isComplete() {
+            return mImage != null && mMetadata != null;
+        }
+
+        /**
+         * Adds the image. Note that this can only be called once before a
+         * {@link #reset()} is necessary.
+         *
+         * @param image the {@Link Image} to add.
+         */
+        public void addImage(Image image) {
+            if (mImage != null) {
+                throw new IllegalArgumentException(
+                        "Unable to add an Image when one already exists.");
+            }
+            mImage = image;
+        }
+
+        /**
+         * Retrieves the {@link Image} if it has been added, returns null if it
+         * is not available yet.
+         */
+        public Image tryGetImage() {
+            return mImage;
+        }
+
+        /**
+         * Adds the metadata. Note that this can only be called once before a
+         * {@link #reset()} is necessary.
+         *
+         * @param metadata the {@Link TotalCaptureResult} to add.
+         */
+        public void addMetadata(TotalCaptureResult metadata) {
+            if (mMetadata != null) {
+                throw new IllegalArgumentException(
+                        "Unable to add a TotalCaptureResult when one already exists.");
+            }
+            mMetadata = metadata;
+        }
+
+        /**
+         * Retrieves the {@link TotalCaptureResult} if it has been added,
+         * returns null if it is not available yet.
+         */
+        public TotalCaptureResult tryGetMetadata() {
+            return mMetadata;
+        }
+    }
+
+    private static final Tag TAG = new Tag("ZSLImageListener");
+
+    /**
+     * If true, the number of open images will be printed to LogCat every time
+     * an image is opened or closed.
+     */
+    private static final boolean DEBUG_PRINT_OPEN_IMAGE_COUNT = false;
+
+    /**
+     * The maximum duration for an onImageAvailable() callback before debugging
+     * output is printed. This is a little under 1/30th of a second to enable
+     * detecting jank in the preview stream caused by {@link #onImageAvailable}
+     * taking too long to return.
+     */
+    private static final long DEBUG_MAX_IMAGE_CALLBACK_DUR = 25;
+
+    /**
+     * If spacing between onCaptureCompleted() callbacks is lower than this
+     * value, camera operations at the Java level have stalled, and are now
+     * catching up. In milliseconds.
+     */
+    private static final long DEBUG_INTERFRAME_STALL_WARNING = 5;
+
+    /**
+     * Last called to onCaptureCompleted() in SystemClock.uptimeMillis().
+     */
+    private long mDebugLastOnCaptureCompletedMillis = 0;
+
+    /**
+     * Number of frames in a row exceeding DEBUG_INTERFRAME_STALL_WARNING.
+     */
+    private long mDebugStalledFrameCount = 0;
+
+    /**
+     * Stores the ring-buffer of captured images.<br>
+     * Note that this takes care of thread-safe reference counting of images to
+     * ensure that they are never leaked by the app.
+     */
+    private final ConcurrentSharedRingBuffer<CapturedImage> mCapturedImageBuffer;
+
+    /** Track the number of open images for debugging purposes. */
+    private final AtomicInteger mNumOpenImages = new AtomicInteger(0);
+
+    /**
+     * The handler used to invoke light-weight listeners:
+     * {@link CaptureReadyListener} and {@link MetadataChangeListener}.
+     */
+    private final Handler mListenerHandler;
+
+    /**
+     * The executor used to invoke {@link ImageCaptureListener}. Note that this
+     * is different from mListenerHandler because a typical ImageCaptureListener
+     * will compress the image to jpeg, and we may wish to execute these tasks
+     * on multiple threads.
+     */
+    private final Executor mImageCaptureListenerExecutor;
+
+    /**
+     * The set of constraints which must be satisfied for a newly acquired image
+     * to be captured and sent to {@link #mPendingImageCaptureCallback}. null if
+     * there is no pending capture request.
+     */
+    private List<ImageCaptureManager.CapturedImageConstraint> mPendingImageCaptureConstraints;
+
+    /**
+     * The callback to be invoked upon successfully capturing a newly-acquired
+     * image which satisfies {@link #mPendingImageCaptureConstraints}. null if
+     * there is no pending capture request.
+     */
+    private ImageCaptureManager.ImageCaptureListener mPendingImageCaptureCallback;
+
+    /**
+     * Map from CaptureResult key to the frame number of the capture result
+     * containing the most recent value for this key and the most recent value
+     * of the key.
+     */
+    private final Map<Key<?>, Pair<Long, Object>>
+            mMetadata = new ConcurrentHashMap<CaptureResult.Key<?>, Pair<Long, Object>>();
+
+    /**
+     * The set of callbacks to be invoked when an entry in {@link #mMetadata} is
+     * changed.
+     */
+    private final Map<Key<?>, Set<MetadataChangeListener>>
+            mMetadataChangeListeners = new ConcurrentHashMap<Key<?>, Set<MetadataChangeListener>>();
+
+    /**
+     * @param maxImages the maximum number of images provided by the
+     *            {@link ImageReader}. This must be greater than 2.
+     * @param listenerHandler the handler on which to invoke listeners. Note
+     *            that this should probably be on a different thread than the
+     *            one used for camera operations, such as capture requests and
+     *            OnImageAvailable listeners, to avoid stalling the preview.
+     * @param imageCaptureListenerExecutor the executor on which to invoke image
+     *            capture listeners, {@link ImageCaptureListener}.
+     */
+    ImageCaptureManager(int maxImages, Handler listenerHandler,
+            Executor imageCaptureListenerExecutor) {
+        // Ensure that there are always 2 images available for the framework to
+        // continue processing frames.
+        // TODO Could we make this tighter?
+        mCapturedImageBuffer = new ConcurrentSharedRingBuffer<ImageCaptureManager.CapturedImage>(
+                maxImages - 2);
+
+        mListenerHandler = listenerHandler;
+        mImageCaptureListenerExecutor = imageCaptureListenerExecutor;
+    }
+
+    /**
+     * See {@link CaptureReadyListener}.
+     */
+    public void setCaptureReadyListener(final CaptureReadyListener listener) {
+        mCapturedImageBuffer.setListener(mListenerHandler,
+                new PinStateListener() {
+                @Override
+                    public void onPinStateChange(boolean pinsAvailable) {
+                        listener.onReadyStateChange(pinsAvailable);
+                    }
+                });
+    }
+
+    /**
+     * Adds a metadata stream listener associated with the given key.
+     *
+     * @param key the key of the metadata to track.
+     * @param listener the listener to be invoked when the value associated with
+     *            key changes.
+     */
+    public <T> void addMetadataChangeListener(Key<T> key, MetadataChangeListener listener) {
+        if (!mMetadataChangeListeners.containsKey(key)) {
+            // Listeners may be added to this set from a different thread than
+            // that which must iterate over this set to invoke the listeners.
+            // Therefore, we need a thread save hash set.
+            mMetadataChangeListeners.put(key,
+                    Collections.newSetFromMap(new ConcurrentHashMap<
+                            ImageCaptureManager.MetadataChangeListener, Boolean>()));
+        }
+        mMetadataChangeListeners.get(key).add(listener);
+    }
+
+    /**
+     * Removes the metadata stream listener associated with the given key.
+     *
+     * @param key the key associated with the metadata to track.
+     * @param listener the listener to be invoked when the value associated with
+     *            key changes.
+     * @return true if the listener was removed, false if no such listener had
+     *         been added.
+     */
+    public <T> boolean removeMetadataChangeListener(Key<T> key, MetadataChangeListener listener) {
+        if (!mMetadataChangeListeners.containsKey(key)) {
+            return false;
+        } else {
+            return mMetadataChangeListeners.get(key).remove(listener);
+        }
+    }
+
+    @Override
+    public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
+            final CaptureResult partialResult) {
+        long frameNumber = partialResult.getFrameNumber();
+
+        // Update mMetadata for whichever keys are present, if this frame is
+        // supplying newer values.
+        for (final Key<?> key : partialResult.getKeys()) {
+            Pair<Long, Object> oldEntry = mMetadata.get(key);
+            final Object oldValue = (oldEntry != null) ? oldEntry.second : null;
+
+            boolean newerValueAlreadyExists = oldEntry != null
+                    && frameNumber < oldEntry.first;
+            if (newerValueAlreadyExists) {
+                continue;
+            }
+
+            final Object newValue = partialResult.get(key);
+            mMetadata.put(key, new Pair<Long, Object>(frameNumber, newValue));
+
+            // If the value has changed, call the appropriate listeners, if
+            // any exist.
+            if (oldValue == newValue || !mMetadataChangeListeners.containsKey(key)) {
+                continue;
+            }
+
+            for (final MetadataChangeListener listener :
+                    mMetadataChangeListeners.get(key)) {
+                Log.v(TAG, "Dispatching to metadata change listener for key: "
+                        + key.toString());
+                mListenerHandler.post(new Runnable() {
+                        @Override
+                    public void run() {
+                        listener.onImageMetadataChange(key, oldValue, newValue,
+                                partialResult);
+                    }
+                });
+            }
+        }
+    }
+
+    @Override
+    public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
+            final TotalCaptureResult result) {
+        final long timestamp = result.get(TotalCaptureResult.SENSOR_TIMESTAMP);
+
+        // Detect camera thread stall.
+        long now = SystemClock.uptimeMillis();
+        if (now - mDebugLastOnCaptureCompletedMillis < DEBUG_INTERFRAME_STALL_WARNING) {
+            Log.e(TAG, "Camera thread has stalled for " + ++mDebugStalledFrameCount +
+                    " frames at # " + result.getFrameNumber() + ".");
+        } else {
+            mDebugStalledFrameCount = 0;
+        }
+        mDebugLastOnCaptureCompletedMillis = now;
+
+        // Find the CapturedImage in the ring-buffer and attach the
+        // TotalCaptureResult to it.
+        // See documentation for swapLeast() for details.
+        boolean swapSuccess = mCapturedImageBuffer.swapLeast(timestamp,
+                new SwapTask<CapturedImage>() {
+                @Override
+                    public CapturedImage create() {
+                        CapturedImage image = new CapturedImage();
+                        image.addMetadata(result);
+                        return image;
+                    }
+
+                @Override
+                    public CapturedImage swap(CapturedImage oldElement) {
+                        oldElement.reset();
+                        oldElement.addMetadata(result);
+                        return oldElement;
+                    }
+
+                @Override
+                    public void update(CapturedImage existingElement) {
+                        existingElement.addMetadata(result);
+                    }
+                });
+
+        if (!swapSuccess) {
+            // Do nothing on failure to swap in.
+            Log.v(TAG, "Unable to add new image metadata to ring-buffer.");
+        }
+
+        tryExecutePendingCaptureRequest(timestamp);
+    }
+
+    @Override
+    public void onImageAvailable(ImageReader reader) {
+        long startTime = SystemClock.currentThreadTimeMillis();
+
+        final Image img = reader.acquireLatestImage();
+
+        if (img != null) {
+            int numOpenImages = mNumOpenImages.incrementAndGet();
+            if (DEBUG_PRINT_OPEN_IMAGE_COUNT) {
+                Log.v(TAG, "Acquired an image. Number of open images = " + numOpenImages);
+            }
+
+            // Try to place the newly-acquired image into the ring buffer.
+            boolean swapSuccess = mCapturedImageBuffer.swapLeast(
+                    img.getTimestamp(), new SwapTask<CapturedImage>() {
+                            @Override
+                        public CapturedImage create() {
+                            CapturedImage image = new CapturedImage();
+                            image.addImage(img);
+                            return image;
+                        }
+
+                            @Override
+                        public CapturedImage swap(CapturedImage oldElement) {
+                            oldElement.reset();
+                            oldElement.addImage(img);
+                            return oldElement;
+                        }
+
+                            @Override
+                        public void update(CapturedImage existingElement) {
+                            existingElement.addImage(img);
+                        }
+                    });
+
+            if (!swapSuccess) {
+                // If we were unable to save the image to the ring buffer, we
+                // must close it now.
+                // We should only get here if the ring buffer is closed.
+                img.close();
+                numOpenImages = mNumOpenImages.decrementAndGet();
+                if (DEBUG_PRINT_OPEN_IMAGE_COUNT) {
+                    Log.v(TAG, "Closed an image. Number of open images = " + numOpenImages);
+                }
+            }
+
+            tryExecutePendingCaptureRequest(img.getTimestamp());
+
+            long endTime = SystemClock.currentThreadTimeMillis();
+            long totTime = endTime - startTime;
+            if (totTime > DEBUG_MAX_IMAGE_CALLBACK_DUR) {
+                // If it takes too long to swap elements, we will start skipping
+                // preview frames, resulting in visible jank.
+                Log.v(TAG, "onImageAvailable() took " + totTime + "ms");
+            }
+        }
+    }
+
+    /**
+     * Closes the listener, eventually freeing all currently-held {@link Image}
+     * s.
+     */
+    public void close() {
+        try {
+            mCapturedImageBuffer.close(new Task<CapturedImage>() {
+                    @Override
+                public void run(CapturedImage e) {
+                    e.reset();
+                }
+            });
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Sets the pending image capture request, overriding any previous calls to
+     * {@link #captureNextImage} which have not yet been resolved. When the next
+     * available image which satisfies the given constraints can be captured,
+     * onImageCaptured will be invoked.
+     *
+     * @param onImageCaptured the callback which will be invoked with the
+     *            captured image.
+     * @param constraints the set of constraints which must be satisfied in
+     *            order for the image to be captured.
+     */
+    public void captureNextImage(final ImageCaptureListener onImageCaptured,
+            final List<CapturedImageConstraint> constraints) {
+        mPendingImageCaptureCallback = onImageCaptured;
+        mPendingImageCaptureConstraints = constraints;
+    }
+
+    /**
+     * Tries to resolve any pending image capture requests.
+     *
+     * @param newImageTimestamp the timestamp of a newly-acquired image which
+     *            should be captured if appropriate and possible.
+     */
+    private void tryExecutePendingCaptureRequest(long newImageTimestamp) {
+        if (mPendingImageCaptureCallback != null) {
+            final Pair<Long, CapturedImage> pinnedImage = mCapturedImageBuffer.tryPin(
+                    newImageTimestamp);
+            if (pinnedImage != null) {
+                CapturedImage image = pinnedImage.second;
+
+                if (!image.isComplete()) {
+                    mCapturedImageBuffer.release(pinnedImage.first);
+                    return;
+                }
+
+                // Check to see if the image satisfies all constraints.
+                TotalCaptureResult captureResult = image.tryGetMetadata();
+
+                if (mPendingImageCaptureConstraints != null) {
+                    for (CapturedImageConstraint constraint : mPendingImageCaptureConstraints) {
+                        if (!constraint.satisfiesConstraint(captureResult)) {
+                            mCapturedImageBuffer.release(pinnedImage.first);
+                            return;
+                        }
+                    }
+                }
+
+                // If we get here, the image satisfies all the necessary
+                // constraints.
+
+                if (tryExecuteCaptureOrRelease(pinnedImage, mPendingImageCaptureCallback)) {
+                    // If we successfully handed the image off to the callback,
+                    // remove the pending
+                    // capture request.
+                    mPendingImageCaptureCallback = null;
+                    mPendingImageCaptureConstraints = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Tries to capture an existing image from the ring-buffer, if one exists
+     * that satisfies the given constraint and can be pinned.
+     *
+     * @return true if the image could be captured, false otherwise.
+     */
+    public boolean tryCaptureExistingImage(final ImageCaptureListener onImageCaptured,
+            final List<CapturedImageConstraint> constraints) {
+        // The selector to use in choosing the image to capture.
+        Selector<ImageCaptureManager.CapturedImage> selector;
+
+        if (constraints == null || constraints.isEmpty()) {
+            // If there are no constraints, use a trivial Selector.
+            selector = new Selector<ImageCaptureManager.CapturedImage>() {
+                    @Override
+                public boolean select(CapturedImage image) {
+                    return true;
+                }
+            };
+        } else {
+            // If there are constraints, create a Selector which will return
+            // true if all constraints
+            // are satisfied.
+            selector = new Selector<ImageCaptureManager.CapturedImage>() {
+                    @Override
+                public boolean select(CapturedImage e) {
+                    // If this image already has metadata associated with it,
+                    // then use it.
+                    // Otherwise, we can't block until it's available, so assume
+                    // it doesn't
+                    // satisfy the required constraints.
+                    TotalCaptureResult captureResult = e.tryGetMetadata();
+
+                    if (captureResult == null || e.tryGetImage() == null) {
+                        return false;
+                    }
+
+                    for (CapturedImageConstraint constraint : constraints) {
+                        if (!constraint.satisfiesConstraint(captureResult)) {
+                            return false;
+                        }
+                    }
+                    return true;
+                }
+            };
+        }
+
+        // Acquire a lock (pin) on the most recent (greatest-timestamp) image in
+        // the ring buffer which satisfies our constraints.
+        // Note that this must be released as soon as we are done with it.
+        final Pair<Long, CapturedImage> toCapture = mCapturedImageBuffer.tryPinGreatestSelected(
+                selector);
+
+        return tryExecuteCaptureOrRelease(toCapture, onImageCaptured);
+    }
+
+    /**
+     * Tries to execute the image capture callback with the pinned CapturedImage
+     * provided.
+     *
+     * @param toCapture The pinned CapturedImage to pass to the callback, or
+     *            release on failure.
+     * @param callback The callback to execute.
+     * @return true upon success, false upon failure and the release of the
+     *         pinned image.
+     */
+    private boolean tryExecuteCaptureOrRelease(final Pair<Long, CapturedImage> toCapture,
+            final ImageCaptureListener callback) {
+        if (toCapture == null) {
+            return false;
+        } else {
+            try {
+                mImageCaptureListenerExecutor.execute(new Runnable() {
+                        @Override
+                    public void run() {
+                        try {
+                            CapturedImage img = toCapture.second;
+                            callback.onImageCaptured(img.tryGetImage(),
+                                    img.tryGetMetadata());
+                        } finally {
+                            mCapturedImageBuffer.release(toCapture.first);
+                        }
+                    }
+                });
+            } catch (RejectedExecutionException e) {
+                // We may get here if the thread pool has been closed.
+                mCapturedImageBuffer.release(toCapture.first);
+                return false;
+            }
+
+            return true;
+        }
+    }
+}
index 931b3b5..8f7dc44 100644 (file)
@@ -16,8 +16,8 @@
 
 package com.android.camera.one.v2;
 
+import android.content.Context;
 import android.graphics.ImageFormat;
-import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCaptureSession;
@@ -37,6 +37,7 @@ import android.os.HandlerThread;
 import android.os.SystemClock;
 import android.view.Surface;
 
+import com.android.camera.CaptureModuleUtil;
 import com.android.camera.Exif;
 import com.android.camera.app.MediaSaver.OnMediaSavedListener;
 import com.android.camera.debug.DebugPropertyHelper;
@@ -47,7 +48,7 @@ import com.android.camera.exif.ExifTag;
 import com.android.camera.exif.Rational;
 import com.android.camera.one.AbstractOneCamera;
 import com.android.camera.one.OneCamera;
-import com.android.camera.one.OneCamera.PhotoCaptureParameters.Flash;
+import com.android.camera.one.Settings3A;
 import com.android.camera.session.CaptureSession;
 import com.android.camera.util.CameraUtil;
 import com.android.camera.util.CaptureDataSerializer;
@@ -83,7 +84,7 @@ public class OneCameraImpl extends AbstractOneCamera {
     /** If true, will write data about each capture request to disk. */
     private static final boolean DEBUG_WRITE_CAPTURE_DATA = DebugPropertyHelper.writeCaptureData();
     /** If true, will log per-frame AF info. */
-    private static final boolean DEBUG_FOCUS_LOG = DebugPropertyHelper.showFocusDebugLog();
+    private static final boolean DEBUG_FOCUS_LOG = DebugPropertyHelper.showFrameDebugLog();
 
     /** Default JPEG encoding quality. */
     private static final Byte JPEG_QUALITY = 90;
@@ -95,16 +96,10 @@ public class OneCameraImpl extends AbstractOneCamera {
      */
     private static final int sCaptureImageFormat = ImageFormat.YUV_420_888;
 
-    /** Width and height of touch metering region as fraction of longest edge. */
-    private static final float METERING_REGION_EDGE = 0.1f;
-    /** Metering region weight between 0 and 1. */
-    private static final float METERING_REGION_WEIGHT = 0.25f;
     /** Duration to hold after manual focus tap. */
-    private static final int FOCUS_HOLD_MILLIS = 3000;
+    private static final int FOCUS_HOLD_MILLIS = Settings3A.getFocusHoldMillis();
     /** Zero weight 3A region, to reset regions per API. */
-    MeteringRectangle[] ZERO_WEIGHT_3A_REGION = new MeteringRectangle[]{
-            new MeteringRectangle(0, 0, 1, 1, 0)
-    };
+    MeteringRectangle[] ZERO_WEIGHT_3A_REGION = AutoFocusHelper.getZeroWeightRegion();
 
     /**
      * CaptureRequest tags.
@@ -126,21 +121,20 @@ public class OneCameraImpl extends AbstractOneCamera {
     private int mControlAFMode = CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;
     /** Last OneCamera.AutoFocusState reported. */
     private AutoFocusState mLastResultAFState = AutoFocusState.INACTIVE;
-    /** Last OneCamera.AutoFocusMode reported. */
-    private AutoFocusMode mLastResultAFMode = AutoFocusMode.CONTINUOUS_PICTURE;
-    /** Flag to take a picture when in AUTO mode and the lens is stopped. */
-    private boolean mTakePictureWhenLensStoppedAndAuto = false;
     /** Flag to take a picture when the lens is stopped. */
     private boolean mTakePictureWhenLensIsStopped = false;
     /** Takes a (delayed) picture with appropriate parameters. */
     private Runnable mTakePictureRunnable;
+    /** Keep PictureCallback for last requested capture. */
+    private PictureCallback mLastPictureCallback = null;
     /** Last time takePicture() was called in uptimeMillis. */
     private long mTakePictureStartMillis;
     /** Runnable that returns to CONTROL_AF_MODE = AF_CONTINUOUS_PICTURE. */
     private final Runnable mReturnToContinuousAFRunnable = new Runnable() {
         @Override
         public void run() {
-            m3ARegions = ZERO_WEIGHT_3A_REGION;
+            mAFRegions = ZERO_WEIGHT_3A_REGION;
+            mAERegions = ZERO_WEIGHT_3A_REGION;
             mControlAFMode = CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;
             repeatingPreview(null);
         }
@@ -150,32 +144,32 @@ public class OneCameraImpl extends AbstractOneCamera {
     private float mZoomValue = 1f;
     /** Current crop region: set from mZoomValue. */
     private Rect mCropRegion;
-    /** Current AE and AF regions */
-    private MeteringRectangle[] m3ARegions = ZERO_WEIGHT_3A_REGION;
-    /** If partial results was OK, don't need to process total result. */
-    private boolean mAutoFocusStateListenerPartialOK = false;
+    /** Current AF and AE regions */
+    private MeteringRectangle[] mAFRegions = ZERO_WEIGHT_3A_REGION;
+    private MeteringRectangle[] mAERegions = ZERO_WEIGHT_3A_REGION;
+    /** Last frame for which CONTROL_AF_STATE was received. */
+    private long mLastControlAfStateFrameNumber = 0;
 
     /**
      * Common listener for preview frame metadata.
      */
-    private final CameraCaptureSession.CaptureListener mAutoFocusStateListener = new
-            CameraCaptureSession.CaptureListener() {
+    private final CameraCaptureSession.CaptureCallback mAutoFocusStateListener = new
+            CameraCaptureSession.CaptureCallback() {
+                @Override
+                public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request,
+                                             long timestamp, long frameNumber) {
+                    if (request.getTag() == RequestTag.CAPTURE && mLastPictureCallback != null) {
+                        mLastPictureCallback.onQuickExpose();
+                    }
+                }
+
                 // AF state information is sometimes available 1 frame before
                 // onCaptureCompleted(), so we take advantage of that.
                 @Override
                 public void onCaptureProgressed(CameraCaptureSession session,
                         CaptureRequest request,
                         CaptureResult partialResult) {
-
-                    if (partialResult.get(CaptureResult.CONTROL_AF_STATE) != null) {
-                        mAutoFocusStateListenerPartialOK = true;
-                        autofocusStateChangeDispatcher(partialResult);
-                        if (DEBUG_FOCUS_LOG) {
-                            //AutoFocusHelper.logExtraFocusInfo(partialResult);
-                        }
-                    } else {
-                        mAutoFocusStateListenerPartialOK = false;
-                    }
+                    autofocusStateChangeDispatcher(partialResult);
                     super.onCaptureProgressed(session, request, partialResult);
                 }
 
@@ -183,8 +177,11 @@ public class OneCameraImpl extends AbstractOneCamera {
                 public void onCaptureCompleted(CameraCaptureSession session,
                         CaptureRequest request,
                         TotalCaptureResult result) {
-                    if (!mAutoFocusStateListenerPartialOK) {
-                        autofocusStateChangeDispatcher(result);
+                    autofocusStateChangeDispatcher(result);
+                    // This checks for a HAL implementation error where TotalCaptureResult
+                    // is missing CONTROL_AF_STATE.  This should not happen.
+                    if (result.get(CaptureResult.CONTROL_AF_STATE) == null) {
+                        AutoFocusHelper.checkControlAfState(result);
                     }
                     if (DEBUG_FOCUS_LOG) {
                         AutoFocusHelper.logExtraFocusInfo(result);
@@ -205,7 +202,7 @@ public class OneCameraImpl extends AbstractOneCamera {
      * The aspect ratio (width/height) of the full resolution for this camera.
      * Usually the native aspect ratio of this camera.
      */
-    private final double mFullSizeAspectRatio;
+    private final float mFullSizeAspectRatio;
     /** The Camera2 API capture session currently active. */
     private CameraCaptureSession mCaptureSession;
     /** The surface onto which to render the preview. */
@@ -268,13 +265,12 @@ public class OneCameraImpl extends AbstractOneCamera {
      */
     @Override
     public void takePicture(final PhotoCaptureParameters params, final CaptureSession session) {
-        if (mTakePictureWhenLensStoppedAndAuto || mTakePictureWhenLensIsStopped) {
-            // Do not do anything when a picture is already in progress
-            // that is waiting for a 3A to finish.
+        // Do not do anything when a picture is already requested.
+        if (mTakePictureWhenLensIsStopped) {
             return;
         }
 
-        // Wait until the picture comes back.
+        // Not ready until the picture comes back.
         broadcastReadyState(false);
 
         mTakePictureRunnable = new Runnable() {
@@ -283,29 +279,17 @@ public class OneCameraImpl extends AbstractOneCamera {
                 takePictureNow(params, session);
             }
         };
+        mLastPictureCallback = params.callback;
         mTakePictureStartMillis = SystemClock.uptimeMillis();
 
-        // TODO: First, check to see if we need to run pre-capture (flash).
-
-        if (false /*a picture is available from the ZSL ring buffer*/) {
-
-            // Process the ZSL picture and return that.
-            // TODO: Insert ZSL code here.
-
-        } else if (mLastResultAFMode == AutoFocusMode.CONTINUOUS_PICTURE
-                && mLastResultAFState == AutoFocusState.STOPPED_UNFOCUSED) {
-            // If in CONTINUOUS_PICTURE + unfocused, trigger an AF scan then
-            // take a picture.
-            Log.v(TAG, "Unfocused: Triggering auto focus scan.");
-            mTakePictureWhenLensStoppedAndAuto = true;
-            m3ARegions = ZERO_WEIGHT_3A_REGION;
-            sendAutoFocusTriggerCaptureRequest(RequestTag.PRESHOT_TRIGGERED_AF);
-        } else if (mLastResultAFState == AutoFocusState.SCANNING) {
-            // If scanning, wait until the scan is done, then take the picture.
+        // This class implements a very simple version of AF, which
+        // only delays capture if the lens is scanning.
+        if (mLastResultAFState == AutoFocusState.ACTIVE_SCAN) {
             Log.v(TAG, "Waiting until scan is done before taking shot.");
             mTakePictureWhenLensIsStopped = true;
         } else {
-            // TODO: Run CONTROL_AF_TRIGGER_START and wait until lens locks.
+            // We could do CONTROL_AF_TRIGGER_START and wait until lens locks,
+            // but this would slow down the capture.
             takePictureNow(params, session);
         }
     }
@@ -333,8 +317,6 @@ public class OneCameraImpl extends AbstractOneCamera {
 
             builder.addTarget(mPreviewSurface);
             builder.addTarget(mCaptureImageReader.getSurface());
-            // TODO: Fix this.
-            applyFlashMode(params.flashMode, builder);
             CaptureRequest request = builder.build();
 
             if (DEBUG_WRITE_CAPTURE_DATA) {
@@ -362,7 +344,7 @@ public class OneCameraImpl extends AbstractOneCamera {
     }
 
     @Override
-    public void setViewFinderSize(int width, int height) {
+    public void setViewfinderSize(int width, int height) {
         throw new RuntimeException("Not implemented yet.");
     }
 
@@ -401,7 +383,7 @@ public class OneCameraImpl extends AbstractOneCamera {
     }
 
     @Override
-    public double getFullSizeAspectRatio() {
+    public float getFullSizeAspectRatio() {
         return mFullSizeAspectRatio;
     }
 
@@ -492,7 +474,7 @@ public class OneCameraImpl extends AbstractOneCamera {
             outputSurfaces.add(previewSurface);
             outputSurfaces.add(mCaptureImageReader.getSurface());
 
-            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateListener() {
+            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
 
                 @Override
                 public void onConfigureFailed(CameraCaptureSession session) {
@@ -502,7 +484,8 @@ public class OneCameraImpl extends AbstractOneCamera {
                 @Override
                 public void onConfigured(CameraCaptureSession session) {
                     mCaptureSession = session;
-                    m3ARegions = ZERO_WEIGHT_3A_REGION;
+                    mAFRegions = ZERO_WEIGHT_3A_REGION;
+                    mAERegions = ZERO_WEIGHT_3A_REGION;
                     mZoomValue = 1f;
                     mCropRegion = cropRegionForZoom(mZoomValue);
                     boolean success = repeatingPreview(null);
@@ -533,11 +516,16 @@ public class OneCameraImpl extends AbstractOneCamera {
      * @param builder Build for the CaptureRequest
      */
     private void addBaselineCaptureKeysToRequest(CaptureRequest.Builder builder) {
-        builder.set(CaptureRequest.CONTROL_AF_REGIONS, m3ARegions);
-        builder.set(CaptureRequest.CONTROL_AE_REGIONS, m3ARegions);
+        builder.set(CaptureRequest.CONTROL_AF_REGIONS, mAFRegions);
+        builder.set(CaptureRequest.CONTROL_AE_REGIONS, mAERegions);
         builder.set(CaptureRequest.SCALER_CROP_REGION, mCropRegion);
         builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
         builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_IDLE);
+        // Enable face detection
+        builder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE,
+                CaptureRequest.STATISTICS_FACE_DETECT_MODE_FULL);
+        builder.set(CaptureRequest.CONTROL_SCENE_MODE,
+                CaptureRequest.CONTROL_SCENE_MODE_FACE_PRIORITY);
     }
 
     /**
@@ -599,96 +587,46 @@ public class OneCameraImpl extends AbstractOneCamera {
      * This method takes appropriate action if camera2 AF state changes.
      * <ol>
      * <li>Reports changes in camera2 AF state to OneCamera.FocusStateListener.</li>
-     * <li>Take picture after AF scan.</li>
-     * <li>TODO: Take picture after AE_PRECAPTURE sequence for flash.</li>
+     * <li>Take picture after AF scan if mTakePictureWhenLensIsStopped true.</li>
      * </ol>
      */
     private void autofocusStateChangeDispatcher(CaptureResult result) {
-        Integer nativeAFControlState = result.get(CaptureResult.CONTROL_AF_STATE);
-        Integer nativeAFControlMode = result.get(CaptureResult.CONTROL_AF_MODE);
-        Object tag = result.getRequest().getTag();
+        if (result.getFrameNumber() < mLastControlAfStateFrameNumber ||
+                result.get(CaptureResult.CONTROL_AF_STATE) == null) {
+            return;
+        }
+        mLastControlAfStateFrameNumber = result.getFrameNumber();
 
         // Convert to OneCamera mode and state.
-        AutoFocusMode resultAFMode = AutoFocusHelper.modeFromCamera2Mode(nativeAFControlMode);
-        AutoFocusState resultAFState = AutoFocusHelper.stateFromCamera2State(nativeAFControlState);
+        AutoFocusState resultAFState = AutoFocusHelper.
+                stateFromCamera2State(result.get(CaptureResult.CONTROL_AF_STATE));
+
+        // TODO: Consider using LENS_STATE.
+        boolean lensIsStopped = resultAFState == AutoFocusState.ACTIVE_FOCUSED ||
+                resultAFState == AutoFocusState.ACTIVE_UNFOCUSED ||
+                resultAFState == AutoFocusState.PASSIVE_FOCUSED ||
+                resultAFState == AutoFocusState.PASSIVE_UNFOCUSED;
 
-        boolean lensIsStopped = (resultAFState == AutoFocusState.STOPPED_FOCUSED ||
-                resultAFState == AutoFocusState.STOPPED_UNFOCUSED);
-        if (tag == RequestTag.PRESHOT_TRIGGERED_AF && lensIsStopped &&
-                mTakePictureWhenLensStoppedAndAuto) {
-            // Take the shot.
-            mCameraHandler.post(mTakePictureRunnable);
-            // Return to passive scanning.
-            mCameraHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    m3ARegions = ZERO_WEIGHT_3A_REGION;
-                    mControlAFMode = CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;
-                    repeatingPreview(null);
-                }
-            });
-            mTakePictureWhenLensStoppedAndAuto = false;
-        }
         if (mTakePictureWhenLensIsStopped && lensIsStopped) {
             // Take the shot.
             mCameraHandler.post(mTakePictureRunnable);
             mTakePictureWhenLensIsStopped = false;
         }
 
-        // Report state change when mode or state has changed.
-        if (resultAFState != mLastResultAFState || resultAFMode != mLastResultAFMode
-                && mFocusStateListener != null) {
-            mFocusStateListener.onFocusStatusUpdate(resultAFMode, resultAFState);
+        // Report state change when AF state has changed.
+        if (resultAFState != mLastResultAFState && mFocusStateListener != null) {
+            mFocusStateListener.onFocusStatusUpdate(resultAFState, result.getFrameNumber());
         }
         mLastResultAFState = resultAFState;
-        mLastResultAFMode = resultAFMode;
-    }
-
-    @Override
-    public void triggerAutoFocus() {
-        Log.v(TAG, "triggerAutoFocus()");
-        m3ARegions = ZERO_WEIGHT_3A_REGION;
-        sendAutoFocusTriggerCaptureRequest(null);
     }
 
     @Override
     public void triggerFocusAndMeterAtPoint(float nx, float ny) {
-        Log.v(TAG, "triggerFocusAndMeterAtPoint(" + nx + "," + ny + ")");
-        float points[] = new float[] {
-                nx, ny
-        };
-        // Make sure the points are in [0,1] range.
-        points[0] = CameraUtil.clamp(points[0], 0f, 1f);
-        points[1] = CameraUtil.clamp(points[1], 0f, 1f);
-
-        // Shrink points towards center if zoomed.
-        if (mZoomValue > 1f) {
-            Matrix zoomMatrix = new Matrix();
-            zoomMatrix.postScale(1f / mZoomValue, 1f / mZoomValue, 0.5f, 0.5f);
-            zoomMatrix.mapPoints(points);
-        }
+        int sensorOrientation = mCharacteristics.get(
+            CameraCharacteristics.SENSOR_ORIENTATION);
+        mAERegions = AutoFocusHelper.aeRegionsForNormalizedCoord(nx, ny, mCropRegion, sensorOrientation);
+        mAFRegions = AutoFocusHelper.afRegionsForNormalizedCoord(nx, ny, mCropRegion, sensorOrientation);
 
-        // TODO: Make this work when preview aspect ratio != sensor aspect
-        // ratio.
-        Rect sensor = mCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
-        int edge = (int) (METERING_REGION_EDGE * Math.max(sensor.width(), sensor.height()));
-        // x0 and y0 in sensor coordinate system, rotated 90 degrees from
-        // portrait.
-        int x0 = (int) (sensor.width() * points[1]);
-        int y0 = (int) (sensor.height() * (1f - points[0]));
-        int x1 = x0 + edge;
-        int y1 = y0 + edge;
-
-        // Make sure regions are inside the sensor area.
-        x0 = CameraUtil.clamp(x0, 0, sensor.width() - 1);
-        x1 = CameraUtil.clamp(x1, 0, sensor.width() - 1);
-        y0 = CameraUtil.clamp(y0, 0, sensor.height() - 1);
-        y1 = CameraUtil.clamp(y1, 0, sensor.height() - 1);
-        int wt = (int) ((1 - METERING_REGION_WEIGHT) * MeteringRectangle.METERING_WEIGHT_MIN
-                + METERING_REGION_WEIGHT * MeteringRectangle.METERING_WEIGHT_MAX);
-
-        Log.v(TAG, "sensor 3A @ x0=" + x0 + " y0=" + y0 + " dx=" + (x1 - x0) + " dy=" + (y1 - y0));
-        m3ARegions = new MeteringRectangle[]{new MeteringRectangle(x0, y0, x1 - x0, y1 - y0, wt)};
         sendAutoFocusTriggerCaptureRequest(RequestTag.TAP_TO_FOCUS);
     }
 
@@ -704,14 +642,15 @@ public class OneCameraImpl extends AbstractOneCamera {
         repeatingPreview(null);
     }
 
+    @Override
+    public Size pickPreviewSize(Size pictureSize, Context context) {
+        float pictureAspectRatio = pictureSize.getWidth() / (float) pictureSize.getHeight();
+        return CaptureModuleUtil.getOptimalPreviewSize(context, getSupportedSizes(),
+                pictureAspectRatio);
+    }
+
     private Rect cropRegionForZoom(float zoom) {
-        Rect sensor = mCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
-        float zoomWidth = sensor.width() / zoom;
-        float zoomHeight = sensor.height() / zoom;
-        float zoomLeft = (sensor.width() - zoomWidth) / 2;
-        float zoomTop = (sensor.height() - zoomHeight) / 2;
-        return new Rect((int) zoomLeft, (int) zoomTop, (int) (zoomLeft + zoomWidth),
-                (int) (zoomTop + zoomHeight));
+        return AutoFocusHelper.cropRegionForZoom(mCharacteristics, zoom);
     }
 
     /**
@@ -721,10 +660,10 @@ public class OneCameraImpl extends AbstractOneCamera {
      * @return The aspect ration, in terms of width/height of the full capture
      *         size.
      */
-    private static double calculateFullSizeAspectRatio(CameraCharacteristics characteristics) {
+    private static float calculateFullSizeAspectRatio(CameraCharacteristics characteristics) {
         Rect activeArraySize =
                 characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
-        return (double) activeArraySize.width() / activeArraySize.height();
+        return ((float)(activeArraySize.width())) / activeArraySize.height();
     }
 
     /**
@@ -763,27 +702,4 @@ public class OneCameraImpl extends AbstractOneCamera {
         img.close();
         return imageBytes;
     }
-
-    private void applyFlashMode(Flash flashMode, CaptureRequest.Builder requestBuilder) {
-        switch (flashMode) {
-            case ON:
-                Log.d(TAG, "Flash mode ON");
-                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
-                        CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
-                requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
-                break;
-            case OFF:
-                Log.d(TAG, "Flash mode OFF");
-                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
-                        CaptureRequest.CONTROL_AE_MODE_ON);
-                requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
-                break;
-            case AUTO:
-            default:
-                Log.d(TAG, "Flash mode AUTO");
-                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
-                        CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
-                break;
-        }
-    }
 }
index 32e2d6b..249e4ec 100644 (file)
 
 package com.android.camera.one.v2;
 
+import android.content.Context;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
 import android.hardware.camera2.CameraManager;
+import android.os.Handler;
 import android.util.DisplayMetrics;
 
+import com.android.camera.SoundPlayer;
 import com.android.camera.debug.Log;
 import com.android.camera.debug.Log.Tag;
 import com.android.camera.one.OneCamera;
@@ -35,9 +38,12 @@ import com.android.camera.util.Size;
  */
 public class OneCameraManagerImpl extends OneCameraManager {
     private static final Tag TAG = new Tag("OneCameraMgrImpl2");
+
+    private final Context mContext;
     private final CameraManager mCameraManager;
     private final int mMaxMemoryMB;
     private final DisplayMetrics mDisplayMetrics;
+    private final SoundPlayer mSoundPlayer;
 
     /**
      * Instantiates a new {@link OneCameraManager} for Camera2 API.
@@ -46,51 +52,92 @@ public class OneCameraManagerImpl extends OneCameraManager {
      * @param maxMemoryMB maximum amount of memory opened cameras should consume
      *            during capture and processing, in megabytes.
      */
-    public OneCameraManagerImpl(CameraManager cameraManager, int maxMemoryMB,
-            DisplayMetrics displayMetrics) {
+    public OneCameraManagerImpl(Context context, CameraManager cameraManager, int maxMemoryMB,
+            DisplayMetrics displayMetrics, SoundPlayer soundPlayer) {
+        mContext = context;
         mCameraManager = cameraManager;
         mMaxMemoryMB = maxMemoryMB;
         mDisplayMetrics = displayMetrics;
+        mSoundPlayer = soundPlayer;
     }
 
     @Override
-    public void open(Facing facing, final Size pictureSize, final OpenCallback openCallback) {
+    public void open(Facing facing, final boolean useHdr, final Size pictureSize,
+            final OpenCallback openCallback, Handler handler) {
         try {
             final String cameraId = getCameraId(facing);
             Log.i(TAG, "Opening Camera ID " + cameraId);
-            mCameraManager.openCamera(cameraId, new CameraDevice.StateListener() {
+            mCameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
+                // We may get multiple calls to StateCallback, but only the
+                // first callback indicates the status of the camera-opening
+                // operation.  For example, we may receive onOpened() and later
+                // onClosed(), but only the first should be relayed to
+                // openCallback.
+                private boolean isFirstCallback = true;
 
                 @Override
                 public void onDisconnected(CameraDevice device) {
-                    // TODO, Re-route through the camera instance?
+                    if (isFirstCallback) {
+                        isFirstCallback = false;
+                        // If the camera is disconnected before it is opened
+                        // then we must call close.
+                        device.close();
+                        openCallback.onCameraClosed();
+                    }
+                }
+
+                @Override
+                public void onClosed(CameraDevice device) {
+                    if (isFirstCallback) {
+                        isFirstCallback = false;
+                        openCallback.onCameraClosed();
+                    }
                 }
 
                 @Override
                 public void onError(CameraDevice device, int error) {
-                    openCallback.onFailure();
+                    if (isFirstCallback) {
+                        isFirstCallback = false;
+                        device.close();
+                        openCallback.onFailure();
+                    }
                 }
 
                 @Override
                 public void onOpened(CameraDevice device) {
-                    try {
-                        CameraCharacteristics characteristics = mCameraManager
-                                .getCameraCharacteristics(device.getId());
-                        // TODO: Set boolean based on whether HDR+ is enabled.
-                        OneCamera oneCamera = OneCameraCreator.create(true, device,
-                                characteristics, pictureSize, mMaxMemoryMB, mDisplayMetrics);
-                        openCallback.onCameraOpened(oneCamera);
-                    } catch (CameraAccessException e) {
-                        Log.d(TAG, "Could not get camera characteristics");
-                        openCallback.onFailure();
+                    if (isFirstCallback) {
+                        isFirstCallback = false;
+                        try {
+                            CameraCharacteristics characteristics = mCameraManager
+                                    .getCameraCharacteristics(device.getId());
+                            // TODO: Set boolean based on whether HDR+ is enabled.
+                            OneCamera oneCamera = OneCameraCreator.create(mContext, useHdr, device,
+                                    characteristics, pictureSize, mMaxMemoryMB, mDisplayMetrics,
+                                    mSoundPlayer);
+                            openCallback.onCameraOpened(oneCamera);
+                        } catch (CameraAccessException e) {
+                            Log.d(TAG, "Could not get camera characteristics");
+                            openCallback.onFailure();
+                        }
                     }
                 }
-            }, null);
+            }, handler);
         } catch (CameraAccessException ex) {
             Log.e(TAG, "Could not open camera. " + ex.getMessage());
-            openCallback.onFailure();
+            handler.post(new Runnable() {
+                @Override
+                public void run() {
+                    openCallback.onFailure();
+                }
+            });
         } catch (UnsupportedOperationException ex) {
             Log.e(TAG, "Could not open camera. " + ex.getMessage());
-            openCallback.onFailure();
+            handler.post(new Runnable() {
+                @Override
+                public void run() {
+                    openCallback.onFailure();
+                }
+            });
         }
     }
 
@@ -110,7 +157,7 @@ public class OneCameraManagerImpl extends OneCameraManager {
     }
 
     /** Returns the ID of the first back-facing camera. */
-    private String getFirstBackCameraId() {
+    public String getFirstBackCameraId() {
         Log.d(TAG, "Getting First BACK Camera");
         String cameraId = getFirstCameraFacing(CameraCharacteristics.LENS_FACING_BACK);
         if (cameraId == null) {
@@ -120,7 +167,7 @@ public class OneCameraManagerImpl extends OneCameraManager {
     }
 
     /** Returns the ID of the first front-facing camera. */
-    private String getFirstFrontCameraId() {
+    public String getFirstFrontCameraId() {
         Log.d(TAG, "Getting First FRONT Camera");
         String cameraId = getFirstCameraFacing(CameraCharacteristics.LENS_FACING_FRONT);
         if (cameraId == null) {
diff --git a/src/com/android/camera/one/v2/OneCameraZslImpl.java b/src/com/android/camera/one/v2/OneCameraZslImpl.java
new file mode 100644 (file)
index 0000000..63f6a90
--- /dev/null
@@ -0,0 +1,1037 @@
+/*
+ * Copyright (C) 2014 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.one.v2;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.graphics.ImageFormat;
+import android.graphics.Rect;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraCaptureSession;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraDevice;
+import android.hardware.camera2.CameraMetadata;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.CaptureResult.Key;
+import android.hardware.camera2.TotalCaptureResult;
+import android.hardware.camera2.params.MeteringRectangle;
+import android.hardware.camera2.params.StreamConfigurationMap;
+import android.media.CameraProfile;
+import android.media.Image;
+import android.media.ImageReader;
+import android.media.MediaActionSound;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.SystemClock;
+import android.support.v4.util.Pools;
+import android.view.Surface;
+
+import com.android.camera.CaptureModuleUtil;
+import com.android.camera.app.MediaSaver.OnMediaSavedListener;
+import com.android.camera.debug.Log;
+import com.android.camera.debug.Log.Tag;
+import com.android.camera.exif.ExifInterface;
+import com.android.camera.exif.ExifTag;
+import com.android.camera.exif.Rational;
+import com.android.camera.one.AbstractOneCamera;
+import com.android.camera.one.OneCamera;
+import com.android.camera.one.OneCamera.PhotoCaptureParameters.Flash;
+import com.android.camera.one.Settings3A;
+import com.android.camera.one.v2.ImageCaptureManager.ImageCaptureListener;
+import com.android.camera.one.v2.ImageCaptureManager.MetadataChangeListener;
+import com.android.camera.session.CaptureSession;
+import com.android.camera.util.CameraUtil;
+import com.android.camera.util.ConjunctionListenerMux;
+import com.android.camera.util.JpegUtilNative;
+import com.android.camera.util.Size;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * {@link OneCamera} implementation directly on top of the Camera2 API with zero
+ * shutter lag.<br>
+ * TODO: Determine what the maximum number of full YUV capture frames is.
+ */
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+public class OneCameraZslImpl extends AbstractOneCamera {
+    private static final Tag TAG = new Tag("OneCameraZslImpl2");
+
+    /** Default JPEG encoding quality. */
+    private static final int JPEG_QUALITY = CameraProfile.getJpegEncodingQualityParameter(
+            CameraProfile.QUALITY_HIGH);
+    /**
+     * The maximum number of images to store in the full-size ZSL ring buffer.
+     * <br>
+     * TODO: Determine this number dynamically based on available memory and the
+     * size of frames.
+     */
+    private static final int MAX_CAPTURE_IMAGES = 10;
+    /**
+     * True if zero-shutter-lag images should be captured. Some devices produce
+     * lower-quality images for the high-frequency stream, so we may wish to
+     * disable ZSL in that case.
+     */
+    private static final boolean ZSL_ENABLED = true;
+
+    /**
+     * Tags which may be used in CaptureRequests.
+     */
+    private static enum RequestTag {
+        /**
+         * Indicates that the request was explicitly sent for a single
+         * high-quality still capture. Unlike other requests, such as the
+         * repeating (ZSL) stream and AF/AE triggers, requests with this tag
+         * should always be saved.
+         */
+        EXPLICIT_CAPTURE
+    }
+
+    /**
+     * Set to ImageFormat.JPEG to use the hardware encoder, or
+     * ImageFormat.YUV_420_888 to use the software encoder. No other image
+     * formats are supported.
+     */
+    private static final int sCaptureImageFormat = ImageFormat.YUV_420_888;
+    /**
+     * Token for callbacks posted to {@link #mCameraHandler} to resume
+     * continuous AF.
+     */
+    private static final String FOCUS_RESUME_CALLBACK_TOKEN = "RESUME_CONTINUOUS_AF";
+
+    /** Zero weight 3A region, to reset regions per API. */
+    /*package*/ MeteringRectangle[] ZERO_WEIGHT_3A_REGION = AutoFocusHelper.getZeroWeightRegion();
+
+    /**
+     * Thread on which high-priority camera operations, such as grabbing preview
+     * frames for the viewfinder, are running.
+     */
+    private final HandlerThread mCameraThread;
+    /** Handler of the {@link #mCameraThread}. */
+    private final Handler mCameraHandler;
+
+    /** Thread on which low-priority camera listeners are running. */
+    private final HandlerThread mCameraListenerThread;
+    private final Handler mCameraListenerHandler;
+
+    /** The characteristics of this camera. */
+    private final CameraCharacteristics mCharacteristics;
+    /** The underlying Camera2 API camera device. */
+    private final CameraDevice mDevice;
+
+    /**
+     * The aspect ratio (width/height) of the full resolution for this camera.
+     * Usually the native aspect ratio of this camera.
+     */
+    private final float mFullSizeAspectRatio;
+    /** The Camera2 API capture session currently active. */
+    private CameraCaptureSession mCaptureSession;
+    /** The surface onto which to render the preview. */
+    private Surface mPreviewSurface;
+    /** Whether closing of this device has been requested. */
+    private volatile boolean mIsClosed = false;
+    /** A callback that is called when the device is fully closed. */
+    private CloseCallback mCloseCallback = null;
+
+    /** Receives the normal captured images. */
+    private final ImageReader mCaptureImageReader;
+
+    /**
+     * Maintains a buffer of images and their associated {@link CaptureResult}s.
+     */
+    private ImageCaptureManager mCaptureManager;
+
+    /**
+     * The sensor timestamp (which may not be relative to the system time) of
+     * the most recently captured image.
+     */
+    private final AtomicLong mLastCapturedImageTimestamp = new AtomicLong(0);
+
+    /** Thread pool for performing slow jpeg encoding and saving tasks. */
+    private final ThreadPoolExecutor mImageSaverThreadPool;
+
+    /** Pool of native byte buffers on which to store jpeg-encoded images. */
+    private final Pools.SynchronizedPool<ByteBuffer> mJpegByteBufferPool = new
+            Pools.SynchronizedPool<ByteBuffer>(64);
+
+    /** Current zoom value. 1.0 is no zoom. */
+    private float mZoomValue = 1f;
+    /** Current crop region: set from mZoomValue. */
+    private Rect mCropRegion;
+    /** Current AE, AF, and AWB regions */
+    private MeteringRectangle[] mAFRegions = ZERO_WEIGHT_3A_REGION;
+    private MeteringRectangle[] mAERegions = ZERO_WEIGHT_3A_REGION;
+
+    private MediaActionSound mMediaActionSound = new MediaActionSound();
+
+    /**
+     * Ready state (typically displayed by the UI shutter-button) depends on two
+     * things:<br>
+     * <ol>
+     * <li>{@link #mCaptureManager} must be ready.</li>
+     * <li>We must not be in the process of capturing a single, high-quality,
+     * image.</li>
+     * </ol>
+     * See {@link ConjunctionListenerMux} and {@link #mReadyStateManager} for
+     * details of how this is managed.
+     */
+    private static enum ReadyStateRequirement {
+        CAPTURE_MANAGER_READY,
+        CAPTURE_NOT_IN_PROGRESS
+    }
+
+    /**
+     * Handles the thread-safe logic of dispatching whenever the logical AND of
+     * these constraints changes.
+     */
+    private final ConjunctionListenerMux<ReadyStateRequirement>
+            mReadyStateManager = new ConjunctionListenerMux<ReadyStateRequirement>(
+                    ReadyStateRequirement.class, new ConjunctionListenerMux.OutputChangeListener() {
+                            @Override
+                        public void onOutputChange(boolean state) {
+                            broadcastReadyState(state);
+                        }
+                    });
+
+    /**
+     * An {@link ImageCaptureListener} which will compress and save an image to
+     * disk.
+     */
+    private class ImageCaptureTask implements ImageCaptureListener {
+        private final PhotoCaptureParameters mParams;
+        private final CaptureSession mSession;
+
+        public ImageCaptureTask(PhotoCaptureParameters parameters,
+                CaptureSession session) {
+            mParams = parameters;
+            mSession = session;
+        }
+
+        @Override
+        public void onImageCaptured(Image image, TotalCaptureResult
+                captureResult) {
+            long timestamp = captureResult.get(CaptureResult.SENSOR_TIMESTAMP);
+
+            // We should only capture the image if it's more recent than the
+            // latest one. Synchronization is necessary since this method is
+            // called on {@link #mImageSaverThreadPool}.
+            synchronized (mLastCapturedImageTimestamp) {
+                if (timestamp > mLastCapturedImageTimestamp.get()) {
+                    mLastCapturedImageTimestamp.set(timestamp);
+                } else {
+                    // There was a more recent (or identical) image which has
+                    // begun being saved, so abort.
+                    return;
+                }
+            }
+
+            mReadyStateManager.setInput(
+                    ReadyStateRequirement.CAPTURE_NOT_IN_PROGRESS, true);
+
+            mSession.startEmpty();
+            savePicture(image, mParams, mSession);
+            mParams.callback.onPictureTaken(mSession);
+            Log.v(TAG, "Image saved.  Frame number = " + captureResult.getFrameNumber());
+        }
+    }
+
+    /**
+     * Instantiates a new camera based on Camera 2 API.
+     *
+     * @param device The underlying Camera 2 device.
+     * @param characteristics The device's characteristics.
+     * @param pictureSize the size of the final image to be taken.
+     */
+    OneCameraZslImpl(CameraDevice device, CameraCharacteristics characteristics, Size pictureSize) {
+        Log.v(TAG, "Creating new OneCameraZslImpl");
+
+        mDevice = device;
+        mCharacteristics = characteristics;
+        mFullSizeAspectRatio = calculateFullSizeAspectRatio(characteristics);
+
+        mCameraThread = new HandlerThread("OneCamera2");
+        // If this thread stalls, it will delay viewfinder frames.
+        mCameraThread.setPriority(Thread.MAX_PRIORITY);
+        mCameraThread.start();
+        mCameraHandler = new Handler(mCameraThread.getLooper());
+
+        mCameraListenerThread = new HandlerThread("OneCamera2-Listener");
+        mCameraListenerThread.start();
+        mCameraListenerHandler = new Handler(mCameraListenerThread.getLooper());
+
+        // TODO: Encoding on multiple cores results in preview jank due to
+        // excessive GC.
+        int numEncodingCores = CameraUtil.getNumCpuCores();
+        mImageSaverThreadPool = new ThreadPoolExecutor(numEncodingCores, numEncodingCores, 10,
+                TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+
+        mCaptureManager = new ImageCaptureManager(MAX_CAPTURE_IMAGES, mCameraListenerHandler,
+                mImageSaverThreadPool);
+        mCaptureManager.setCaptureReadyListener(new ImageCaptureManager.CaptureReadyListener() {
+                @Override
+            public void onReadyStateChange(boolean capturePossible) {
+                mReadyStateManager.setInput(ReadyStateRequirement.CAPTURE_MANAGER_READY,
+                        capturePossible);
+            }
+        });
+
+        // Listen for changes to auto focus state and dispatch to
+        // mFocusStateListener.
+        mCaptureManager.addMetadataChangeListener(CaptureResult.CONTROL_AF_STATE,
+                new ImageCaptureManager.MetadataChangeListener() {
+                @Override
+                    public void onImageMetadataChange(Key<?> key, Object oldValue, Object newValue,
+                            CaptureResult result) {
+                        mFocusStateListener.onFocusStatusUpdate(
+                                AutoFocusHelper.stateFromCamera2State(
+                                        result.get(CaptureResult.CONTROL_AF_STATE)),
+                                result.getFrameNumber());
+                    }
+                });
+
+        // Allocate the image reader to store all images received from the
+        // camera.
+        if (pictureSize == null) {
+            // TODO The default should be selected by the caller, and
+            // pictureSize should never be null.
+            pictureSize = getDefaultPictureSize();
+        }
+        mCaptureImageReader = ImageReader.newInstance(pictureSize.getWidth(),
+                pictureSize.getHeight(),
+                sCaptureImageFormat, MAX_CAPTURE_IMAGES);
+
+        mCaptureImageReader.setOnImageAvailableListener(mCaptureManager, mCameraHandler);
+        mMediaActionSound.load(MediaActionSound.SHUTTER_CLICK);
+    }
+
+    /**
+     * @return The largest supported picture size.
+     */
+    public Size getDefaultPictureSize() {
+        StreamConfigurationMap configs = mCharacteristics.get(
+                CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+        android.util.Size[] supportedSizes = configs.getOutputSizes(sCaptureImageFormat);
+
+        // Find the largest supported size.
+        android.util.Size largestSupportedSize = supportedSizes[0];
+        long largestSupportedSizePixels = largestSupportedSize.getWidth()
+                * largestSupportedSize.getHeight();
+        for (int i = 0; i < supportedSizes.length; i++) {
+            long numPixels = supportedSizes[i].getWidth() * supportedSizes[i].getHeight();
+            if (numPixels > largestSupportedSizePixels) {
+                largestSupportedSize = supportedSizes[i];
+                largestSupportedSizePixels = numPixels;
+            }
+        }
+
+        return new Size(largestSupportedSize.getWidth(),
+                largestSupportedSize.getHeight());
+    }
+
+    private void onShutterInvokeUI(final PhotoCaptureParameters params) {
+        // Tell CaptureModule shutter has occurred so it can flash the screen.
+        params.callback.onQuickExpose();
+        // Play shutter click sound.
+        mMediaActionSound.play(MediaActionSound.SHUTTER_CLICK);
+    }
+
+    /**
+     * Take a picture.
+     */
+    @Override
+    public void takePicture(final PhotoCaptureParameters params, final CaptureSession session) {
+        params.checkSanity();
+
+        mReadyStateManager.setInput(
+                ReadyStateRequirement.CAPTURE_NOT_IN_PROGRESS, false);
+
+        boolean useZSL = ZSL_ENABLED;
+
+        // We will only capture images from the zsl ring-buffer which satisfy
+        // this constraint.
+        ArrayList<ImageCaptureManager.CapturedImageConstraint> zslConstraints = new ArrayList<
+                ImageCaptureManager.CapturedImageConstraint>();
+        zslConstraints.add(new ImageCaptureManager.CapturedImageConstraint() {
+                @Override
+            public boolean satisfiesConstraint(TotalCaptureResult captureResult) {
+                Long timestamp = captureResult.get(CaptureResult.SENSOR_TIMESTAMP);
+                Integer lensState = captureResult.get(CaptureResult.LENS_STATE);
+                Integer flashState = captureResult.get(CaptureResult.FLASH_STATE);
+                Integer flashMode = captureResult.get(CaptureResult.FLASH_MODE);
+                Integer aeState = captureResult.get(CaptureResult.CONTROL_AE_STATE);
+                Integer afState = captureResult.get(CaptureResult.CONTROL_AF_STATE);
+                Integer awbState = captureResult.get(CaptureResult.CONTROL_AWB_STATE);
+
+                if (timestamp <= mLastCapturedImageTimestamp.get()) {
+                    // Don't save frames older than the most
+                    // recently-captured frame.
+                    // TODO This technically has a race condition in which
+                    // duplicate frames may be saved, but if a user is
+                    // tapping at >30Hz, duplicate images may be what they
+                    // expect.
+                    return false;
+                }
+
+                if (lensState == CaptureResult.LENS_STATE_MOVING) {
+                    // If we know the lens was moving, don't use this image.
+                    return false;
+                }
+
+                if (aeState == CaptureResult.CONTROL_AE_STATE_SEARCHING
+                        || aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
+                    return false;
+                }
+                switch (params.flashMode) {
+                    case OFF:
+                        break;
+                    case ON:
+                        if (flashState != CaptureResult.FLASH_STATE_FIRED
+                                || flashMode != CaptureResult.FLASH_MODE_SINGLE) {
+                            return false;
+                        }
+                        break;
+                    case AUTO:
+                        if (aeState == CaptureResult.CONTROL_AE_STATE_FLASH_REQUIRED
+                                && flashState != CaptureResult.FLASH_STATE_FIRED) {
+                            return false;
+                        }
+                        break;
+                }
+
+                if (afState == CaptureResult.CONTROL_AF_STATE_ACTIVE_SCAN
+                        || afState == CaptureResult.CONTROL_AF_STATE_PASSIVE_SCAN) {
+                    return false;
+                }
+
+                if (awbState == CaptureResult.CONTROL_AWB_STATE_SEARCHING) {
+                    return false;
+                }
+
+                return true;
+            }
+        });
+        // This constraint lets us capture images which have been explicitly
+        // requested. See {@link RequestTag.EXPLICIT_CAPTURE}.
+        ArrayList<ImageCaptureManager.CapturedImageConstraint> singleCaptureConstraint = new ArrayList<
+                ImageCaptureManager.CapturedImageConstraint>();
+        singleCaptureConstraint.add(new ImageCaptureManager.CapturedImageConstraint() {
+                @Override
+            public boolean satisfiesConstraint(TotalCaptureResult captureResult) {
+                Object tag = captureResult.getRequest().getTag();
+                return tag == RequestTag.EXPLICIT_CAPTURE;
+            }
+        });
+
+        // If we can use ZSL, try to save a previously-captured frame, if an
+        // acceptable one exists in the buffer.
+        if (useZSL) {
+            boolean capturedPreviousFrame = mCaptureManager.tryCaptureExistingImage(
+                    new ImageCaptureTask(params, session), zslConstraints);
+            if (capturedPreviousFrame) {
+                Log.v(TAG, "Saving previous frame");
+                onShutterInvokeUI(params);
+            } else {
+                Log.v(TAG, "No good image Available.  Capturing next available good image.");
+                // If there was no good frame available in the ring buffer
+                // already, capture the next good image.
+                // TODO Disable the shutter button until this image is captured.
+
+                if (params.flashMode == Flash.ON || params.flashMode == Flash.AUTO) {
+                    // We must issue a request for a single capture using the
+                    // flash, including an AE precapture trigger.
+
+                    // The following sets up a sequence of events which will
+                    // occur in reverse order to the associated method
+                    // calls:
+                    // 1. Send a request to trigger the Auto Exposure Precapture
+                    // 2. Wait for the AE_STATE to leave the PRECAPTURE state,
+                    // and then send a request for a single image, with the
+                    // appropriate flash settings.
+                    // 3. Capture the next appropriate image, which should be
+                    // the one we requested in (2).
+
+                    mCaptureManager.captureNextImage(new ImageCaptureTask(params, session),
+                            singleCaptureConstraint);
+
+                    mCaptureManager.addMetadataChangeListener(CaptureResult.CONTROL_AE_STATE,
+                            new MetadataChangeListener() {
+                            @Override
+                                public void onImageMetadataChange(Key<?> key, Object oldValue,
+                                        Object newValue, CaptureResult result) {
+                                    Log.v(TAG, "AE State Changed");
+                                    if (oldValue.equals(
+                                            Integer.valueOf(
+                                                    CaptureResult.CONTROL_AE_STATE_PRECAPTURE))) {
+                                        mCaptureManager.removeMetadataChangeListener(key, this);
+                                        sendSingleRequest(params);
+                                        // TODO: Delay this until onCaptureStarted().
+                                        onShutterInvokeUI(params);
+                                    }
+                                }
+                            });
+
+                    sendAutoExposureTriggerRequest(params.flashMode);
+                } else {
+                    // We may get here if, for example, the auto focus is in the
+                    // middle of a scan.
+                    // If the flash is off, we should just wait for the next
+                    // image that arrives. This will have minimal delay since we
+                    // do not need to send a new capture request.
+                    mCaptureManager.captureNextImage(new ImageCaptureTask(params, session),
+                            zslConstraints);
+                }
+            }
+        } else {
+            // TODO If we can't save a previous frame, create a new capture
+            // request to do what we need (e.g. flash) and call
+            // captureNextImage().
+            throw new UnsupportedOperationException("Non-ZSL capture not yet supported");
+        }
+    }
+
+    @Override
+    public void startPreview(Surface previewSurface, CaptureReadyCallback listener) {
+        mPreviewSurface = previewSurface;
+        setupAsync(mPreviewSurface, listener);
+    }
+
+    @Override
+    public void setViewfinderSize(int width, int height) {
+        throw new RuntimeException("Not implemented yet.");
+    }
+
+    @Override
+    public boolean isFlashSupported(boolean enhanced) {
+        throw new RuntimeException("Not implemented yet.");
+    }
+
+    @Override
+    public boolean isSupportingEnhancedMode() {
+        throw new RuntimeException("Not implemented yet.");
+    }
+
+    @Override
+    public void close(CloseCallback closeCallback) {
+        if (mIsClosed) {
+            Log.w(TAG, "Camera is already closed.");
+            return;
+        }
+        try {
+            mCaptureSession.abortCaptures();
+        } catch (CameraAccessException e) {
+            Log.e(TAG, "Could not abort captures in progress.");
+        }
+        mIsClosed = true;
+        mCloseCallback = closeCallback;
+        mCameraThread.quitSafely();
+        mDevice.close();
+        mCaptureManager.close();
+    }
+
+    @Override
+    public Size[] getSupportedSizes() {
+        StreamConfigurationMap config = mCharacteristics
+                .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+        return Size.convert(config.getOutputSizes(sCaptureImageFormat));
+    }
+
+    @Override
+    public float getFullSizeAspectRatio() {
+        return mFullSizeAspectRatio;
+    }
+
+    @Override
+    public boolean isFrontFacing() {
+        return mCharacteristics.get(CameraCharacteristics.LENS_FACING)
+                == CameraMetadata.LENS_FACING_FRONT;
+    }
+
+    @Override
+    public boolean isBackFacing() {
+        return mCharacteristics.get(CameraCharacteristics.LENS_FACING)
+                == CameraMetadata.LENS_FACING_BACK;
+    }
+
+    private void savePicture(Image image, final PhotoCaptureParameters captureParams,
+            CaptureSession session) {
+        int heading = captureParams.heading;
+
+        int width = image.getWidth();
+        int height = image.getHeight();
+        int rotation = 0;
+        ExifInterface exif = null;
+
+        exif = new ExifInterface();
+        // TODO: Add more exif tags here.
+
+        exif.setTag(exif.buildTag(ExifInterface.TAG_PIXEL_X_DIMENSION, width));
+        exif.setTag(exif.buildTag(ExifInterface.TAG_PIXEL_Y_DIMENSION, height));
+
+        // TODO: Handle rotation correctly.
+
+        // Set GPS heading direction based on sensor, if location is on.
+        if (heading >= 0) {
+            ExifTag directionRefTag = exif.buildTag(
+                    ExifInterface.TAG_GPS_IMG_DIRECTION_REF,
+                    ExifInterface.GpsTrackRef.MAGNETIC_DIRECTION);
+            ExifTag directionTag = exif.buildTag(
+                    ExifInterface.TAG_GPS_IMG_DIRECTION,
+                    new Rational(heading, 1));
+            exif.setTag(directionRefTag);
+            exif.setTag(directionTag);
+        }
+
+        session.saveAndFinish(acquireJpegBytes(image), width, height, rotation, exif,
+                new OnMediaSavedListener() {
+                @Override
+                    public void onMediaSaved(Uri uri) {
+                        captureParams.callback.onPictureSaved(uri);
+                    }
+                });
+    }
+
+    /**
+     * Asynchronously sets up the capture session.
+     *
+     * @param previewSurface the surface onto which the preview should be
+     *            rendered.
+     * @param listener called when setup is completed.
+     */
+    private void setupAsync(final Surface previewSurface, final CaptureReadyCallback listener) {
+        mCameraHandler.post(new Runnable() {
+                @Override
+            public void run() {
+                setup(previewSurface, listener);
+            }
+        });
+    }
+
+    /**
+     * Configures and attempts to create a capture session.
+     *
+     * @param previewSurface the surface onto which the preview should be
+     *            rendered.
+     * @param listener called when the setup is completed.
+     */
+    private void setup(Surface previewSurface, final CaptureReadyCallback listener) {
+        try {
+            if (mCaptureSession != null) {
+                mCaptureSession.abortCaptures();
+                mCaptureSession = null;
+            }
+            List<Surface> outputSurfaces = new ArrayList<Surface>(2);
+            outputSurfaces.add(previewSurface);
+            outputSurfaces.add(mCaptureImageReader.getSurface());
+
+            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
+                    @Override
+                public void onConfigureFailed(CameraCaptureSession session) {
+                    listener.onSetupFailed();
+                }
+
+                    @Override
+                public void onConfigured(CameraCaptureSession session) {
+                    mCaptureSession = session;
+                    mAFRegions = ZERO_WEIGHT_3A_REGION;
+                    mAERegions = ZERO_WEIGHT_3A_REGION;
+                    mZoomValue = 1f;
+                    mCropRegion = cropRegionForZoom(mZoomValue);
+                    boolean success = sendRepeatingCaptureRequest();
+                    if (success) {
+                        mReadyStateManager.setInput(ReadyStateRequirement.CAPTURE_NOT_IN_PROGRESS,
+                                true);
+                        mReadyStateManager.notifyListeners();
+                        listener.onReadyForCapture();
+                    } else {
+                        listener.onSetupFailed();
+                    }
+                }
+
+                    @Override
+                public void onClosed(CameraCaptureSession session) {
+                    super.onClosed(session);
+                    if (mCloseCallback != null) {
+                        mCloseCallback.onCameraClosed();
+                    }
+                }
+            }, mCameraHandler);
+        } catch (CameraAccessException ex) {
+            Log.e(TAG, "Could not set up capture session", ex);
+            listener.onSetupFailed();
+        }
+    }
+
+    private void addRegionsToCaptureRequestBuilder(CaptureRequest.Builder builder) {
+        builder.set(CaptureRequest.CONTROL_AE_REGIONS, mAERegions);
+        builder.set(CaptureRequest.CONTROL_AF_REGIONS, mAFRegions);
+        builder.set(CaptureRequest.SCALER_CROP_REGION, mCropRegion);
+    }
+
+    private void addFlashToCaptureRequestBuilder(CaptureRequest.Builder builder, Flash flashMode) {
+        switch (flashMode) {
+            case ON:
+                builder.set(CaptureRequest.CONTROL_AE_MODE,
+                        CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
+                builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
+                break;
+            case OFF:
+                builder.set(CaptureRequest.CONTROL_AE_MODE,
+                        CaptureRequest.CONTROL_AE_MODE_ON);
+                builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
+                break;
+            case AUTO:
+                builder.set(CaptureRequest.CONTROL_AE_MODE,
+                        CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
+                break;
+        }
+    }
+
+    /**
+     * Request a stream of images.
+     *
+     * @return true if successful, false if there was an error submitting the
+     *         capture request.
+     */
+    private boolean sendRepeatingCaptureRequest() {
+        Log.v(TAG, "sendRepeatingCaptureRequest()");
+        try {
+            CaptureRequest.Builder builder;
+            if (ZSL_ENABLED) {
+                builder = mDevice.
+                        createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+            } else {
+                builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+            }
+
+            builder.addTarget(mPreviewSurface);
+
+            if (ZSL_ENABLED) {
+                builder.addTarget(mCaptureImageReader.getSurface());
+            }
+
+            builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
+
+            builder.set(CaptureRequest.CONTROL_AF_MODE,
+                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+            builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
+
+            builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
+            builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
+
+            addRegionsToCaptureRequestBuilder(builder);
+
+            mCaptureSession.setRepeatingRequest(builder.build(), mCaptureManager,
+                    mCameraHandler);
+            return true;
+        } catch (CameraAccessException e) {
+            if (ZSL_ENABLED) {
+                Log.v(TAG, "Could not execute zero-shutter-lag repeating request.", e);
+            } else {
+                Log.v(TAG, "Could not execute preview request.", e);
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Request a single image.
+     *
+     * @return true if successful, false if there was an error submitting the
+     *         capture request.
+     */
+    private boolean sendSingleRequest(OneCamera.PhotoCaptureParameters params) {
+        Log.v(TAG, "sendSingleRequest()");
+        try {
+            CaptureRequest.Builder builder;
+            builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
+
+            builder.addTarget(mPreviewSurface);
+
+            // Always add this surface for single image capture requests.
+            builder.addTarget(mCaptureImageReader.getSurface());
+
+            builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
+
+            addFlashToCaptureRequestBuilder(builder, params.flashMode);
+            addRegionsToCaptureRequestBuilder(builder);
+
+            builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
+            builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
+
+            // Tag this as a special request which should be saved.
+            builder.setTag(RequestTag.EXPLICIT_CAPTURE);
+
+            if (sCaptureImageFormat == ImageFormat.JPEG) {
+                builder.set(CaptureRequest.JPEG_QUALITY, (byte) (JPEG_QUALITY));
+                builder.set(CaptureRequest.JPEG_ORIENTATION,
+                        CameraUtil.getJpegRotation(params.orientation, mCharacteristics));
+            }
+
+            mCaptureSession.capture(builder.build(), mCaptureManager,
+                    mCameraHandler);
+            return true;
+        } catch (CameraAccessException e) {
+            Log.v(TAG, "Could not execute single still capture request.", e);
+            return false;
+        }
+    }
+
+    private boolean sendAutoExposureTriggerRequest(Flash flashMode) {
+        Log.v(TAG, "sendAutoExposureTriggerRequest()");
+        try {
+            CaptureRequest.Builder builder;
+            if (ZSL_ENABLED) {
+                builder = mDevice.
+                        createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+            } else {
+                builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+            }
+
+            builder.addTarget(mPreviewSurface);
+
+            if (ZSL_ENABLED) {
+                builder.addTarget(mCaptureImageReader.getSurface());
+            }
+
+            builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
+
+            builder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
+                    CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
+
+            addRegionsToCaptureRequestBuilder(builder);
+            addFlashToCaptureRequestBuilder(builder, flashMode);
+
+            mCaptureSession.capture(builder.build(), mCaptureManager,
+                    mCameraHandler);
+
+            return true;
+        } catch (CameraAccessException e) {
+            Log.v(TAG, "Could not execute auto exposure trigger request.", e);
+            return false;
+        }
+    }
+
+    /**
+     */
+    private boolean sendAutoFocusTriggerRequest() {
+        Log.v(TAG, "sendAutoFocusTriggerRequest()");
+        try {
+            CaptureRequest.Builder builder;
+            if (ZSL_ENABLED) {
+                builder = mDevice.
+                        createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+            } else {
+                builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+            }
+
+            builder.addTarget(mPreviewSurface);
+
+            if (ZSL_ENABLED) {
+                builder.addTarget(mCaptureImageReader.getSurface());
+            }
+
+            builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
+
+            addRegionsToCaptureRequestBuilder(builder);
+
+            builder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
+            builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);
+
+            mCaptureSession.capture(builder.build(), mCaptureManager,
+                    mCameraHandler);
+
+            return true;
+        } catch (CameraAccessException e) {
+            Log.v(TAG, "Could not execute auto focus trigger request.", e);
+            return false;
+        }
+    }
+
+    /**
+     * Like {@link #sendRepeatingCaptureRequest()}, but with the focus held
+     * constant.
+     *
+     * @return true if successful, false if there was an error submitting the
+     *         capture request.
+     */
+    private boolean sendAutoFocusHoldRequest() {
+        Log.v(TAG, "sendAutoFocusHoldRequest()");
+        try {
+            CaptureRequest.Builder builder;
+            if (ZSL_ENABLED) {
+                builder = mDevice.
+                        createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+            } else {
+                builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+            }
+
+            builder.addTarget(mPreviewSurface);
+
+            if (ZSL_ENABLED) {
+                builder.addTarget(mCaptureImageReader.getSurface());
+            }
+
+            builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
+
+            builder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
+            builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
+
+            addRegionsToCaptureRequestBuilder(builder);
+            // TODO: This should fire the torch, if appropriate.
+
+            mCaptureSession.setRepeatingRequest(builder.build(), mCaptureManager, mCameraHandler);
+
+            return true;
+        } catch (CameraAccessException e) {
+            Log.v(TAG, "Could not execute auto focus hold request.", e);
+            return false;
+        }
+    }
+
+    /**
+     * Calculate the aspect ratio of the full size capture on this device.
+     *
+     * @param characteristics the characteristics of the camera device.
+     * @return The aspect ration, in terms of width/height of the full capture
+     *         size.
+     */
+    private static float calculateFullSizeAspectRatio(CameraCharacteristics characteristics) {
+        Rect activeArraySize =
+                characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
+        return ((float) activeArraySize.width()) / activeArraySize.height();
+    }
+
+    /**
+     * Given an image reader, extracts the JPEG image bytes and then closes the
+     * reader.
+     *
+     * @param img the image from which to extract jpeg bytes or compress to
+     *            jpeg.
+     * @return The bytes of the JPEG image. Newly allocated.
+     */
+    private byte[] acquireJpegBytes(Image img) {
+        ByteBuffer buffer;
+
+        if (img.getFormat() == ImageFormat.JPEG) {
+            Image.Plane plane0 = img.getPlanes()[0];
+            buffer = plane0.getBuffer();
+
+            byte[] imageBytes = new byte[buffer.remaining()];
+            buffer.get(imageBytes);
+            buffer.rewind();
+            return imageBytes;
+        } else if (img.getFormat() == ImageFormat.YUV_420_888) {
+            buffer = mJpegByteBufferPool.acquire();
+            if (buffer == null) {
+                buffer = ByteBuffer.allocateDirect(img.getWidth() * img.getHeight() * 3);
+            }
+
+            int numBytes = JpegUtilNative.compressJpegFromYUV420Image(img, buffer, JPEG_QUALITY);
+
+            if (numBytes < 0) {
+                throw new RuntimeException("Error compressing jpeg.");
+            }
+
+            buffer.limit(numBytes);
+
+            byte[] imageBytes = new byte[buffer.remaining()];
+            buffer.get(imageBytes);
+
+            buffer.clear();
+            mJpegByteBufferPool.release(buffer);
+
+            return imageBytes;
+        } else {
+            throw new RuntimeException("Unsupported image format.");
+        }
+    }
+
+    private void startAFCycle() {
+        // Clean up any existing AF cycle's pending callbacks.
+        mCameraHandler.removeCallbacksAndMessages(FOCUS_RESUME_CALLBACK_TOKEN);
+
+        // Send a single CONTROL_AF_TRIGGER_START capture request.
+        sendAutoFocusTriggerRequest();
+
+        // Immediately send a request for a regular preview stream, but with
+        // CONTROL_AF_MODE_AUTO set so that the focus remains constant after the
+        // AF cycle completes.
+        sendAutoFocusHoldRequest();
+
+        // Waits Settings3A.getFocusHoldMillis() milliseconds before sending
+        // a request for a regular preview stream to resume.
+        mCameraHandler.postAtTime(new Runnable() {
+                @Override
+            public void run() {
+                mAERegions = ZERO_WEIGHT_3A_REGION;
+                mAFRegions = ZERO_WEIGHT_3A_REGION;
+                sendRepeatingCaptureRequest();
+            }
+        }, FOCUS_RESUME_CALLBACK_TOKEN,
+                SystemClock.uptimeMillis() + Settings3A.getFocusHoldMillis());
+    }
+
+    /**
+     * @see com.android.camera.one.OneCamera#triggerFocusAndMeterAtPoint(float,
+     *      float)
+     */
+    @Override
+    public void triggerFocusAndMeterAtPoint(float nx, float ny) {
+        int sensorOrientation = mCharacteristics.get(
+            CameraCharacteristics.SENSOR_ORIENTATION);
+        mAERegions = AutoFocusHelper.aeRegionsForNormalizedCoord(nx, ny, mCropRegion, sensorOrientation);
+        mAFRegions = AutoFocusHelper.afRegionsForNormalizedCoord(nx, ny, mCropRegion, sensorOrientation);
+
+        startAFCycle();
+    }
+
+    @Override
+    public Size pickPreviewSize(Size pictureSize, Context context) {
+        if (pictureSize == null) {
+            // TODO The default should be selected by the caller, and
+            // pictureSize should never be null.
+            pictureSize = getDefaultPictureSize();
+        }
+        float pictureAspectRatio = pictureSize.getWidth() / (float) pictureSize.getHeight();
+        return CaptureModuleUtil.getOptimalPreviewSize(context, getSupportedSizes(),
+                pictureAspectRatio);
+    }
+
+    @Override
+    public float getMaxZoom() {
+        return mCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);
+    }
+
+    @Override
+    public void setZoom(float zoom) {
+        mZoomValue = zoom;
+        mCropRegion = cropRegionForZoom(zoom);
+        sendRepeatingCaptureRequest();
+    }
+
+    private Rect cropRegionForZoom(float zoom) {
+        return AutoFocusHelper.cropRegionForZoom(mCharacteristics, zoom);
+    }
+}
index a4cc0bb..9ff3dfa 100644 (file)
@@ -43,6 +43,7 @@ public class AppUpgrader extends SettingsUpgrader {
     private static final String OLD_CAMERA_PREFERENCES_PREFIX = "_preferences_";
     private static final String OLD_MODULE_PREFERENCES_PREFIX = "_preferences_module_";
     private static final String OLD_GLOBAL_PREFERENCES_FILENAME = "_preferences_camera";
+    private static final String OLD_KEY_UPGRADE_VERSION = "pref_strict_upgrade_version";
 
     /**
      * With this version everyone was forced to choose their location settings
@@ -60,8 +61,13 @@ public class AppUpgrader extends SettingsUpgrader {
     /**
      * With this version, the names of the files storing camera specific and
      * module specific settings changed.
+     * <p>
+     * NOTE: changed this from 4 to 6 to re-run on latest Glacier upgrade.
+     * Initial upgraders to Glacier will run conversion once as of the change.
+     * When re-run for early dogfooders, values will get overwritten but will
+     * all work.
      */
-    private static final int CAMERA_MODULE_SETTINGS_FILES_RENAMED_VERSION = 4;
+    private static final int CAMERA_MODULE_SETTINGS_FILES_RENAMED_VERSION = 6;
 
     /**
      * With this version, timelapse mode was removed and mode indices need to be
@@ -70,9 +76,15 @@ public class AppUpgrader extends SettingsUpgrader {
     private static final int CAMERA_SETTINGS_SELECTED_MODULE_INDEX = 5;
 
     /**
+     * With this version internal storage is changed to use only Strings, and
+     * a type conversion process should execute.
+     */
+    private static final int CAMERA_SETTINGS_STRINGS_UPGRADE = 5;
+
+    /**
      * Increment this value whenever new AOSP UpgradeSteps need to be executed.
      */
-    public static final int APP_UPGRADE_VERSION = 5;
+    public static final int APP_UPGRADE_VERSION = 6;
 
     private final AppController mAppController;
 
@@ -83,28 +95,35 @@ public class AppUpgrader extends SettingsUpgrader {
 
     @Override
     protected int getLastVersion(SettingsManager settingsManager) {
-        // Prior appwide versions were stored in the default preferences. If
-        // current
-        // state indicates this is still the case, port the version and then
-        // process
-        // all other known app settings to the new SettingsManager string
-        // scheme.
-        try {
-            return super.getLastVersion(settingsManager);
-        } catch (ClassCastException e) {
-            // We infer that a ClassCastException here means we have pre-String
-            // settings that need to be upgraded, so we hack in a full upgrade
-            // here.
-            upgradeTypesToStrings(settingsManager);
-            // Retrieve version as default now that we're sure it is converted
-            return super.getLastVersion(settingsManager);
+        // Prior upgrade versions were stored in the default preferences as int
+        // and String. We create a new version location for migration to String.
+        // If we don't have a version persisted in the new location, check for
+        // the prior value from the old location. We expect the old value to be
+        // processed during {@link #upgradeTypesToStrings}.
+        SharedPreferences defaultPreferences = settingsManager.getDefaultPreferences();
+        if (defaultPreferences.contains(OLD_KEY_UPGRADE_VERSION)) {
+            Map<String, ?> allPrefs = defaultPreferences.getAll();
+            Object oldVersion = allPrefs.get(OLD_KEY_UPGRADE_VERSION);
+            defaultPreferences.edit().remove(OLD_KEY_UPGRADE_VERSION).apply();
+            if (oldVersion instanceof Integer) {
+                return (Integer) oldVersion;
+            } else if (oldVersion instanceof String) {
+                return SettingsManager.convertToInt((String) oldVersion);
+            }
         }
+        return super.getLastVersion(settingsManager);
     }
 
     @Override
     public void upgrade(SettingsManager settingsManager, int lastVersion, int currentVersion) {
         Context context = mAppController.getAndroidContext();
 
+        // Do strings upgrade first before 'earlier' upgrades, since they assume
+        // valid storage of values.
+        if (lastVersion < CAMERA_SETTINGS_STRINGS_UPGRADE) {
+            upgradeTypesToStrings(settingsManager);
+        }
+
         if (lastVersion < FORCE_LOCATION_CHOICE_VERSION) {
             forceLocationChoice(settingsManager);
         }
@@ -117,14 +136,17 @@ public class AppUpgrader extends SettingsUpgrader {
                     SettingsUtil.CAMERA_FACING_FRONT);
             upgradeCameraSizeSetting(settingsManager, context, infos,
                     SettingsUtil.CAMERA_FACING_BACK);
+            // We changed size handling and aspect ratio placement, put user
+            // back into Camera mode this time to ensure they see the ratio
+            // chooser if applicable.
+            settingsManager.remove(SettingsManager.SCOPE_GLOBAL,
+                    Keys.KEY_STARTUP_MODULE_INDEX);
         }
 
         if (lastVersion < CAMERA_MODULE_SETTINGS_FILES_RENAMED_VERSION) {
             upgradeCameraSettingsFiles(settingsManager, context);
             upgradeModuleSettingsFiles(settingsManager, context,
                     mAppController);
-            settingsManager.remove(SettingsManager.SCOPE_GLOBAL,
-                    Keys.KEY_STARTUP_MODULE_INDEX);
         }
 
         if (lastVersion < CAMERA_SETTINGS_SELECTED_MODULE_INDEX) {
@@ -145,11 +167,6 @@ public class AppUpgrader extends SettingsUpgrader {
         SharedPreferences oldGlobalPreferences =
                 settingsManager.openPreferences(OLD_GLOBAL_PREFERENCES_FILENAME);
 
-        // Strict upgrade version: Integer -> String, from default.
-        int strictUpgradeVersion = removeInteger(defaultPreferences, Keys.KEY_UPGRADE_VERSION);
-        settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_UPGRADE_VERSION,
-                strictUpgradeVersion);
-
         // Location: boolean -> String, from default.
         if (defaultPreferences.contains(Keys.KEY_RECORD_LOCATION)) {
             boolean location = removeBoolean(defaultPreferences, Keys.KEY_RECORD_LOCATION);
@@ -206,14 +223,6 @@ public class AppUpgrader extends SettingsUpgrader {
             }
         }
 
-        // Request return to HDR+: boolean -> String, from module.
-        if (defaultPreferences.contains(Keys.KEY_REQUEST_RETURN_HDR_PLUS)) {
-            boolean requestReturnHdrPlus = removeBoolean(defaultPreferences,
-                    Keys.KEY_REQUEST_RETURN_HDR_PLUS);
-            settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_REQUEST_RETURN_HDR_PLUS,
-                    requestReturnHdrPlus);
-        }
-
         // Should show refocus viewer cling: boolean -> String, from default.
         if (defaultPreferences.contains(Keys.KEY_SHOULD_SHOW_REFOCUS_VIEWER_CLING)) {
             boolean shouldShowRefocusViewer = removeBoolean(defaultPreferences,
@@ -229,6 +238,31 @@ public class AppUpgrader extends SettingsUpgrader {
             settingsManager.set(SettingsManager.SCOPE_GLOBAL,
                     Keys.KEY_SHOULD_SHOW_SETTINGS_BUTTON_CLING, shouldShowSettingsButtonCling);
         }
+
+        // HDR plus on setting: String on/off -> String, from old global.
+        if (oldGlobalPreferences.contains(Keys.KEY_CAMERA_HDR_PLUS)) {
+            String hdrPlus = removeString(oldGlobalPreferences, Keys.KEY_CAMERA_HDR_PLUS);
+            if (OLD_SETTINGS_VALUE_ON.equals(hdrPlus)) {
+                settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR_PLUS, true);
+            }
+        }
+
+        // HDR on setting: String on/off -> String, from old global.
+        if (oldGlobalPreferences.contains(Keys.KEY_CAMERA_HDR)) {
+            String hdrPlus = removeString(oldGlobalPreferences, Keys.KEY_CAMERA_HDR);
+            if (OLD_SETTINGS_VALUE_ON.equals(hdrPlus)) {
+                settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR, true);
+            }
+        }
+
+        // Grid on setting: String on/off -> String, from old global.
+        if (oldGlobalPreferences.contains(Keys.KEY_CAMERA_GRID_LINES)) {
+            String hdrPlus = removeString(oldGlobalPreferences, Keys.KEY_CAMERA_GRID_LINES);
+            if (OLD_SETTINGS_VALUE_ON.equals(hdrPlus)) {
+                settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_GRID_LINES,
+                        true);
+            }
+        }
     }
 
     /**
@@ -236,7 +270,9 @@ public class AppUpgrader extends SettingsUpgrader {
      * again if it was originally set to false.
      */
     private void forceLocationChoice(SettingsManager settingsManager) {
-        // Show the location dialog on upgrade if
+        SharedPreferences oldGlobalPreferences =
+                settingsManager.openPreferences(OLD_GLOBAL_PREFERENCES_FILENAME);
+       // Show the location dialog on upgrade if
         // (a) the user has never set this option (status quo).
         // (b) the user opt'ed out previously.
         if (settingsManager.isSet(SettingsManager.SCOPE_GLOBAL,
@@ -247,6 +283,14 @@ public class AppUpgrader extends SettingsUpgrader {
                     Keys.KEY_RECORD_LOCATION)) {
                 settingsManager.remove(SettingsManager.SCOPE_GLOBAL, Keys.KEY_RECORD_LOCATION);
             }
+        } else if (oldGlobalPreferences.contains(Keys.KEY_RECORD_LOCATION)) {
+            // Location is not set, check to see if we're upgrading from
+            // a different source file.
+            String location = removeString(oldGlobalPreferences, Keys.KEY_RECORD_LOCATION);
+            if (OLD_SETTINGS_VALUE_ON.equals(location)) {
+                    settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_RECORD_LOCATION,
+                            true);
+            }
         }
     }
 
@@ -290,14 +334,48 @@ public class AppUpgrader extends SettingsUpgrader {
     /**
      * Part of the AOSP upgrade path, copies all of the keys and values in a
      * SharedPreferences file to another SharedPreferences file, as Strings.
+     * Settings that are not a known supported format (int/boolean/String)
+     * are dropped with warning.
+     *
+     * This will normally be run only once but was used both for upgrade version
+     * 4 and 6 -- in 6 we repair issues with previous runs of the upgrader. So
+     * we make sure to remove entries from destination if the source isn't valid
+     * like a null or unsupported type.
      */
     private void copyPreferences(SharedPreferences oldPrefs,
             SharedPreferences newPrefs) {
         Map<String, ?> entries = oldPrefs.getAll();
         for (Map.Entry<String, ?> entry : entries.entrySet()) {
             String key = entry.getKey();
-            String value = entry.getValue().toString();
-            newPrefs.edit().putString(key, value).apply();
+            Object value = entry.getValue();
+            if (value == null) {
+                Log.w(TAG, "skipped upgrade and removing entry for null key " + key);
+                newPrefs.edit().remove(key).apply();
+            } else if (value instanceof Boolean) {
+                String boolValue = SettingsManager.convert((Boolean) value);
+                newPrefs.edit().putString(key, boolValue).apply();
+            } else if (value instanceof Integer) {
+                String intValue = SettingsManager.convert((Integer) value);
+                newPrefs.edit().putString(key, intValue).apply();
+            } else if (value instanceof Long){
+                // New SettingsManager only supports int values. Attempt to
+                // recover any longs which happen to be present if they are
+                // within int range.
+                long longValue = (Long) value;
+                if (longValue <= Integer.MAX_VALUE && longValue >= Integer.MIN_VALUE) {
+                    String intValue = SettingsManager.convert((int) longValue);
+                    newPrefs.edit().putString(key, intValue).apply();
+                } else {
+                    Log.w(TAG, "skipped upgrade for out of bounds long key " +
+                            key + " : " + longValue);
+                }
+            } else if (value instanceof String){
+                newPrefs.edit().putString(key, (String) value).apply();
+            } else {
+                Log.w(TAG,"skipped upgrade and removing entry for unrecognized "
+                        + "key type " + key + " : " + value.getClass());
+                newPrefs.edit().remove(key).apply();
+            }
         }
     }
 
index 3692a75..82b54cd 100644 (file)
@@ -50,6 +50,13 @@ import java.util.List;
  * Provides the settings UI for the Camera app.
  */
 public class CameraSettingsActivity extends FragmentActivity {
+    /**
+     * Used to denote a subsection of the preference tree to display in the
+     * Fragment. For instance, if 'Advanced' key is provided, the advanced
+     * preference section will be treated as the root for display. This is used
+     * to enable activity transitions between preference sections, and allows
+     * back/up stack to operate correctly.
+     */
     public static final String PREF_SCREEN_EXTRA = "pref_screen_extra";
 
     @Override
@@ -61,7 +68,10 @@ public class CameraSettingsActivity extends FragmentActivity {
         actionBar.setTitle(R.string.mode_settings);
 
         String prefKey = getIntent().getStringExtra(PREF_SCREEN_EXTRA);
-        CameraSettingsFragment dialog = new CameraSettingsFragment(prefKey);
+        CameraSettingsFragment dialog = new CameraSettingsFragment();
+        Bundle bundle = new Bundle(1);
+        bundle.putString(PREF_SCREEN_EXTRA, prefKey);
+        dialog.setArguments(bundle);
         getFragmentManager().beginTransaction().replace(android.R.id.content, dialog).commit();
     }
 
@@ -85,7 +95,8 @@ public class CameraSettingsActivity extends FragmentActivity {
         private static DecimalFormat sMegaPixelFormat = new DecimalFormat("##0.0");
         private String[] mCamcorderProfileNames;
         private CameraDeviceInfo mInfos;
-        private final String mPrefKey;
+        private String mPrefKey;
+        private boolean mGetSubPrefAsRoot = true;
 
         // Selected resolutions for the different cameras and sizes.
         private SelectedPictureSizes mOldPictureSizesBack;
@@ -95,20 +106,22 @@ public class CameraSettingsActivity extends FragmentActivity {
         private SelectedVideoQualities mVideoQualitiesBack;
         private SelectedVideoQualities mVideoQualitiesFront;
 
-        public CameraSettingsFragment(String prefKey) {
-            mPrefKey = prefKey;
-        }
-
         @Override
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
+            Bundle arguments = getArguments();
+            if (arguments != null) {
+                mPrefKey = arguments.getString(PREF_SCREEN_EXTRA);
+            }
             Context context = this.getActivity().getApplicationContext();
             addPreferencesFromResource(R.xml.camera_preferences);
-            // Only add the additional preferences when in the main settings
-            // view, and not in the sub-preferences screens.
-            if (mPrefKey == null) {
-                CameraSettingsActivityHelper.addAdditionalPreferences(this, context);
-            }
+
+            // Allow the Helper to edit the full preference hierarchy, not the sub
+            // tree we may show as root. See {@link #getPreferenceScreen()}.
+            mGetSubPrefAsRoot = false;
+            CameraSettingsActivityHelper.addAdditionalPreferences(this, context);
+            mGetSubPrefAsRoot = true;
+
             mCamcorderProfileNames = getResources().getStringArray(R.array.camcorder_profile_names);
             mInfos = CameraAgentFactory
                     .getAndroidCameraAgent(context, CameraAgentFactory.CameraApi.API_1)
@@ -170,7 +183,7 @@ public class CameraSettingsActivity extends FragmentActivity {
         @Override
         public PreferenceScreen getPreferenceScreen() {
             PreferenceScreen root = super.getPreferenceScreen();
-            if (mPrefKey == null || root == null) {
+            if (!mGetSubPrefAsRoot || mPrefKey == null || root == null) {
                 return root;
             } else {
                 PreferenceScreen match = findByKey(root, mPrefKey);
@@ -241,6 +254,14 @@ public class CameraSettingsActivity extends FragmentActivity {
          * was found and removed.
          */
         private boolean recursiveDelete(PreferenceGroup group, Preference preference) {
+            if (group == null) {
+                Log.d(TAG, "attempting to delete from null preference group");
+                return false;
+            }
+            if (preference == null) {
+                Log.d(TAG, "attempting to delete null preference");
+                return false;
+            }
             if (group.removePreference(preference)) {
                 // Removal was successful.
                 return true;
index 9490ef3..35d0aca 100644 (file)
@@ -19,6 +19,7 @@ package com.android.camera.settings;
 import android.content.Context;
 
 import com.android.camera.app.LocationManager;
+import com.android.camera.util.ApiHelper;
 import com.android.camera2.R;
 
 /**
@@ -61,7 +62,7 @@ public class Keys {
             "pref_release_dialog_last_shown_version";
     public static final String KEY_FLASH_SUPPORTED_BACK_CAMERA =
             "pref_flash_supported_back_camera";
-    public static final String KEY_UPGRADE_VERSION = "pref_strict_upgrade_version";
+    public static final String KEY_UPGRADE_VERSION = "pref_upgrade_version";
     public static final String KEY_REQUEST_RETURN_HDR_PLUS = "pref_request_return_hdr_plus";
     public static final String KEY_SHOULD_SHOW_REFOCUS_VIEWER_CLING =
             "pref_should_show_refocus_viewer_cling";
@@ -102,13 +103,31 @@ public class Keys {
             context.getString(R.string.pref_camera_focusmode_default),
             context.getResources().getStringArray(R.array.pref_camera_focusmode_entryvalues));
 
-        settingsManager.setDefaults(KEY_VIDEO_QUALITY_BACK,
-            context.getString(R.string.pref_video_quality_large),
+        String videoQualityBackDefaultValue = context.getString(R.string.pref_video_quality_large);
+        // TODO: We tweaked the default setting based on model string which is not ideal. Detecting
+        // CamcorderProfile capability is a better way to get this job done. However,
+        // |CamcorderProfile.hasProfile| needs camera id info. We need a way to provide camera id to
+        // this method. b/17445274
+        // Don't set the default resolution to be large if the device supports 4k video.
+        if (ApiHelper.IS_NEXUS_6) {
+            videoQualityBackDefaultValue = context.getString(R.string.pref_video_quality_medium);
+        }
+        settingsManager.setDefaults(
+            KEY_VIDEO_QUALITY_BACK,
+            videoQualityBackDefaultValue,
             context.getResources().getStringArray(R.array.pref_video_quality_entryvalues));
+        if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL, Keys.KEY_VIDEO_QUALITY_BACK)) {
+            settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
+                                         Keys.KEY_VIDEO_QUALITY_BACK);
+        }
 
         settingsManager.setDefaults(KEY_VIDEO_QUALITY_FRONT,
             context.getString(R.string.pref_video_quality_large),
             context.getResources().getStringArray(R.array.pref_video_quality_entryvalues));
+        if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL, Keys.KEY_VIDEO_QUALITY_FRONT)) {
+            settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
+                                         Keys.KEY_VIDEO_QUALITY_FRONT);
+        }
 
         settingsManager.setDefaults(KEY_JPEG_QUALITY,
             context.getString(R.string.pref_camera_jpeg_quality_normal),
index a44693e..6d90832 100644 (file)
@@ -116,7 +116,7 @@ public class SettingsManager {
      */
     protected SharedPreferences openPreferences(String scope) {
         SharedPreferences preferences = mContext.getSharedPreferences(
-            scope, Context.MODE_PRIVATE);
+            mPackageName + scope, Context.MODE_PRIVATE);
 
         for (OnSharedPreferenceChangeListener listener : mSharedPreferenceListeners) {
             preferences.registerOnSharedPreferenceChangeListener(listener);
@@ -320,7 +320,13 @@ public class SettingsManager {
      */
     public String getString(String scope, String key, String defaultValue) {
         SharedPreferences preferences = getPreferencesFromScope(scope);
-        return preferences.getString(key, defaultValue);
+        try {
+            return preferences.getString(key, defaultValue);
+        } catch (ClassCastException e) {
+            Log.w(TAG, "existing preference with invalid type, removing and returning default", e);
+            preferences.edit().remove(key).apply();
+            return defaultValue;
+        }
     }
 
     /**
@@ -332,13 +338,13 @@ public class SettingsManager {
     }
 
     /**
-     * Retrieve a setting's value as an Integer, manually specifiying
+     * Retrieve a setting's value as an Integer, manually specifying
      * a default value.
      */
     public Integer getInteger(String scope, String key, Integer defaultValue) {
         String defaultValueString = Integer.toString(defaultValue);
         String value = getString(scope, key, defaultValueString);
-        return Integer.parseInt(value);
+        return convertToInt(value);
     }
 
     /**
@@ -356,7 +362,7 @@ public class SettingsManager {
     public boolean getBoolean(String scope, String key, boolean defaultValue) {
         String defaultValueString = defaultValue ? "1" : "0";
         String value = getString(scope, key, defaultValueString);
-        return (Integer.parseInt(value) != 0);
+        return convertToBoolean(value);
     }
 
     /**
@@ -433,7 +439,7 @@ public class SettingsManager {
      * to String occurs before this value is stored in SharedPreferences.
      */
     public void set(String scope, String key, int value) {
-        set(scope, key, Integer.toString(value));
+        set(scope, key, convert(value));
     }
 
     /**
@@ -442,7 +448,7 @@ public class SettingsManager {
      * stored in SharedPreferences.
      */
     public void set(String scope, String key, boolean value) {
-        set(scope, key, value ? "1" : "0");
+        set(scope, key, convert(value));
     }
 
     /**
@@ -502,6 +508,51 @@ public class SettingsManager {
      */
     public void remove(String scope, String key) {
         SharedPreferences preferences = getPreferencesFromScope(scope);
-        preferences.edit().remove(key);
+        preferences.edit().remove(key).apply();
+    }
+
+    /**
+     * Package private conversion method to turn ints into preferred
+     * String storage format.
+     *
+     * @param value int to be stored in Settings
+     * @return String which represents the int
+     */
+    static String convert(int value) {
+        return Integer.toString(value);
+    }
+
+    /**
+     * Package private conversion method to turn String storage format into
+     * ints.
+     *
+     * @param value String to be converted to int
+     * @return int value of stored String
+     */
+    static int convertToInt(String value) {
+        return Integer.parseInt(value);
+    }
+
+    /**
+     * Package private conversion method to turn String storage format into
+     * booleans.
+     *
+     * @param value String to be converted to boolean
+     * @return boolean value of stored String
+     */
+    static boolean convertToBoolean(String value) {
+        return Integer.parseInt(value) != 0;
+    }
+
+
+    /**
+     * Package private conversion method to turn booleans into preferred
+     * String storage format.
+     *
+     * @param value boolean to be stored in Settings
+     * @return String which represents the boolean
+     */
+    static String convert(boolean value) {
+        return value ? "1" : "0";
     }
 }
index 2e6457d..4b38669 100644 (file)
@@ -30,6 +30,15 @@ public abstract class SettingsUpgrader {
     private final String mVersionKey;
     private final int mTargetVersion;
 
+    // These values were in use by the original preferences management, before
+    // SettingsManager, to represent string-based booleans via typed string
+    // resource arrays. We no longer utilize such value arrays, and reference
+    // these constants only within SettingsUpgraders to convert to new string-
+    // based booleans.
+    protected static final String OLD_SETTINGS_VALUE_NONE = "none";
+    protected static final String OLD_SETTINGS_VALUE_ON = "on";
+    protected static final String OLD_SETTINGS_VALUE_OFF = "off";
+
     public SettingsUpgrader(String versionKey, int targetVersion) {
         mVersionKey = versionKey;
         mTargetVersion = targetVersion;
@@ -79,8 +88,13 @@ public abstract class SettingsUpgrader {
      * modules to upgrade their boolean settings to Strings.
      */
     protected boolean removeBoolean(SharedPreferences oldPreferencesLocation, String key) {
-        boolean value = oldPreferencesLocation.getBoolean(key, false);
-        oldPreferencesLocation.edit().remove(key);
+        boolean value = false;
+        try {
+            value = oldPreferencesLocation.getBoolean(key, value);
+        } catch (ClassCastException e) {
+            Log.e(TAG, "error reading old value, removing and returning default", e);
+        }
+        oldPreferencesLocation.edit().remove(key).apply();
         return value;
     }
 
@@ -93,8 +107,32 @@ public abstract class SettingsUpgrader {
      * modules to upgrade their Integer settings to Strings.
      */
     protected int removeInteger(SharedPreferences oldPreferencesLocation, String key) {
-        int value = oldPreferencesLocation.getInt(key, 0);
-        oldPreferencesLocation.edit().remove(key);
+        int value = 0;
+        try {
+            value = oldPreferencesLocation.getInt(key, value);
+        } catch (ClassCastException e) {
+            Log.e(TAG, "error reading old value, removing and returning default", e);
+        }
+        oldPreferencesLocation.edit().remove(key).apply();
+        return value;
+    }
+
+    /**
+     * A helper function that is used to remove a setting stored as a String,
+     * and return the value that was removed.
+     * <p>
+     * This is used in the upgrade path to change all underlying
+     * SharedPreferences values to Strings. It can be used by third party
+     * modules to upgrade their boolean settings to Strings.
+     */
+    protected String removeString(SharedPreferences oldPreferencesLocation, String key) {
+        String value = null;
+        try {
+            value = oldPreferencesLocation.getString(key, value);
+        } catch (ClassCastException e) {
+            Log.e(TAG, "error reading old value, removing and returning default", e);
+        }
+        oldPreferencesLocation.edit().remove(key).apply();
         return value;
     }
 
index d0f9b09..acf8921 100644 (file)
@@ -24,6 +24,7 @@ import android.media.CamcorderProfile;
 import android.util.SparseArray;
 
 import com.android.camera.debug.Log;
+import com.android.camera.util.ApiHelper;
 import com.android.camera.util.Callback;
 import com.android.camera2.R;
 import com.android.ex.camera2.portability.CameraDeviceInfo;
@@ -353,7 +354,8 @@ public class SettingsUtil {
      */
     private static int getNextSupportedVideoQualityIndex(int cameraId, int start) {
         for (int i = start + 1; i < sVideoQualities.length; ++i) {
-            if (CamcorderProfile.hasProfile(cameraId, sVideoQualities[i])) {
+            if (isVideoQualitySupported(sVideoQualities[i])
+                    && CamcorderProfile.hasProfile(cameraId, sVideoQualities[i])) {
                 // We found a new supported quality.
                 return i;
             }
@@ -371,6 +373,19 @@ public class SettingsUtil {
     }
 
     /**
+     * @return Whether the given {@link CamcorderProfile} is supported on the
+     *         current device/OS version.
+     */
+    private static boolean isVideoQualitySupported(int videoQuality) {
+        // 4k is only supported on L or higher but some devices falsely report
+        // to have support for it on K, see b/18172081.
+        if (!ApiHelper.isLOrHigher() && videoQuality == CamcorderProfile.QUALITY_2160P) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * Returns the index of the size within the given list that is closest to
      * the given target pixel count.
      */
index 925cae8..d5fdbf6 100644 (file)
@@ -18,7 +18,7 @@ package com.android.camera.ui;
 
 import android.content.Context;
 import android.content.res.TypedArray;
-import android.graphics.Canvas;
+import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -26,6 +26,7 @@ import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.TransitionDrawable;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.TouchDelegate;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
@@ -33,6 +34,7 @@ import android.widget.ImageButton;
 import com.android.camera.CaptureLayoutHelper;
 import com.android.camera.ShutterButton;
 import com.android.camera.debug.Log;
+import com.android.camera.util.ApiHelper;
 import com.android.camera.util.CameraUtil;
 import com.android.camera2.R;
 
@@ -73,13 +75,9 @@ public class BottomBar extends FrameLayout {
 
     private boolean mDrawCircle;
     private final float mCircleRadius;
-    private final RectF mRect = new RectF();
     private CaptureLayoutHelper mCaptureLayoutHelper = null;
 
-    private final boolean mIsOsVersionL;
-    // for Android L, these backgrounds are RippleDrawables (ISA LayerDrawable)
-    // pre-L, they're plain old LayerDrawables
-    private final LayerDrawable[] mShutterButtonBackgrounds;
+    private final Drawable.ConstantState[] mShutterButtonBackgroundConstantStates;
     // a reference to the shutter background's first contained drawable
     // if it's an animated circle drawable (for video mode)
     private AnimatedCircleDrawable mAnimatedCircleDrawable;
@@ -87,6 +85,8 @@ public class BottomBar extends FrameLayout {
     // if it's a color drawable (for all other modes)
     private ColorDrawable mColorDrawable;
 
+    private RectF mRect = new RectF();
+
     public BottomBar(Context context, AttributeSet attrs) {
         super(context, attrs);
         mCircleRadius = getResources()
@@ -96,31 +96,15 @@ public class BottomBar extends FrameLayout {
         mBackgroundAlphaDefault = getResources()
                 .getInteger(R.integer.bottom_bar_background_alpha);
 
-        mIsOsVersionL = context.getResources().getBoolean(R.bool.is_os_version_l);
-
         // preload all the drawable BGs
         TypedArray ar = context.getResources()
                 .obtainTypedArray(R.array.shutter_button_backgrounds);
         int len = ar.length();
-
-        mShutterButtonBackgrounds = new LayerDrawable[len];
+        mShutterButtonBackgroundConstantStates = new Drawable.ConstantState[len];
         for (int i = 0; i < len; i++) {
             int drawableId = ar.getResourceId(i, -1);
-            LayerDrawable shutterBackground = mShutterButtonBackgrounds[i] =
-                    (LayerDrawable) context.getResources().getDrawable(drawableId).mutate();
-
-            // the background for video has a circle_item drawable placeholder
-            // that gets replaced by an AnimatedCircleDrawable for the cool
-            // shrink-down-to-a-circle effect
-            // all other modes need not do this replace
-            Drawable d = shutterBackground.findDrawableByLayerId(R.id.circle_item);
-            if (d != null) {
-                Drawable animatedCircleDrawable =
-                        new AnimatedCircleDrawable((int) mCircleRadius);
-                animatedCircleDrawable.setLevel(DRAWABLE_MAX_LEVEL);
-                shutterBackground
-                        .setDrawableByLayerId(R.id.circle_item, animatedCircleDrawable);
-            }
+            mShutterButtonBackgroundConstantStates[i] =
+                    context.getResources().getDrawable(drawableId).getConstantState();
         }
         ar.recycle();
     }
@@ -129,11 +113,9 @@ public class BottomBar extends FrameLayout {
         if (mAnimatedCircleDrawable != null) {
             mAnimatedCircleDrawable.setColor(color);
             mAnimatedCircleDrawable.setAlpha(alpha);
-            invalidate();
         } else if (mColorDrawable != null) {
             mColorDrawable.setColor(color);
             mColorDrawable.setAlpha(alpha);
-            invalidate();
         }
 
         if (mIntentReviewLayout != null) {
@@ -150,11 +132,18 @@ public class BottomBar extends FrameLayout {
 
     private void setCancelBackgroundColor(int alpha, int color) {
         LayerDrawable layerDrawable = (LayerDrawable) mCancelButton.getBackground();
-        ColorDrawable colorDrawable = (ColorDrawable) layerDrawable.getDrawable(0);
-        if (!mIsOsVersionL) {
-            colorDrawable.setColor(color);
+        Drawable d = layerDrawable.getDrawable(0);
+        if (d instanceof AnimatedCircleDrawable) {
+            AnimatedCircleDrawable animatedCircleDrawable = (AnimatedCircleDrawable) d;
+            animatedCircleDrawable.setColor(color);
+            animatedCircleDrawable.setAlpha(alpha);
+        } else if (d instanceof ColorDrawable) {
+            ColorDrawable colorDrawable = (ColorDrawable) d;
+            if (!ApiHelper.isLOrHigher()) {
+                colorDrawable.setColor(color);
+            }
+            colorDrawable.setAlpha(alpha);
         }
-        colorDrawable.setAlpha(alpha);
     }
 
     private void setCaptureButtonUp() {
@@ -162,7 +151,7 @@ public class BottomBar extends FrameLayout {
     }
 
     private void setCaptureButtonDown() {
-        if (!mIsOsVersionL) {
+        if (!ApiHelper.isLOrHigher()) {
             setPaintColor(mBackgroundAlpha, mBackgroundPressedColor);
         }
     }
@@ -177,17 +166,17 @@ public class BottomBar extends FrameLayout {
 
     @Override
     public void onFinishInflate() {
-        mCaptureLayout
-        = (FrameLayout) findViewById(R.id.bottombar_capture);
-        mCancelLayout
-        = (FrameLayout) findViewById(R.id.bottombar_cancel);
+        mCaptureLayout =
+                (FrameLayout) findViewById(R.id.bottombar_capture);
+        mCancelLayout =
+                (FrameLayout) findViewById(R.id.bottombar_cancel);
         mCancelLayout.setVisibility(View.GONE);
 
-        mIntentReviewLayout
-        = (TopRightWeightedLayout) findViewById(R.id.bottombar_intent_review);
+        mIntentReviewLayout =
+                (TopRightWeightedLayout) findViewById(R.id.bottombar_intent_review);
 
-        mShutterButton
-        = (ShutterButton) findViewById(R.id.shutter_button);
+        mShutterButton =
+                (ShutterButton) findViewById(R.id.shutter_button);
         mShutterButton.setOnTouchListener(new OnTouchListener() {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
@@ -197,6 +186,7 @@ public class BottomBar extends FrameLayout {
                         MotionEvent.ACTION_CANCEL == event.getActionMasked()) {
                     setCaptureButtonUp();
                 } else if (MotionEvent.ACTION_MOVE == event.getActionMasked()) {
+                    mRect.set(0, 0, getWidth(), getHeight());
                     if (!mRect.contains(event.getX(), event.getY())) {
                         setCaptureButtonUp();
                     }
@@ -205,8 +195,8 @@ public class BottomBar extends FrameLayout {
             }
         });
 
-        mCancelButton
-        = (ImageButton) findViewById(R.id.shutter_cancel_button);
+        mCancelButton =
+                (ImageButton) findViewById(R.id.shutter_cancel_button);
         mCancelButton.setOnTouchListener(new OnTouchListener() {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
@@ -216,6 +206,7 @@ public class BottomBar extends FrameLayout {
                         MotionEvent.ACTION_CANCEL == event.getActionMasked()) {
                     setCancelButtonUp();
                 } else if (MotionEvent.ACTION_MOVE == event.getActionMasked()) {
+                    mRect.set(0, 0, getWidth(), getHeight());
                     if (!mRect.contains(event.getX(), event.getY())) {
                         setCancelButtonUp();
                     }
@@ -224,6 +215,32 @@ public class BottomBar extends FrameLayout {
             }
         });
 
+        extendTouchAreaToMatchParent(R.id.done_button);
+    }
+
+    private void extendTouchAreaToMatchParent(int id) {
+        final View button = findViewById(id);
+        final View parent = (View) button.getParent();
+
+        parent.post(new Runnable() {
+            @Override
+            public void run() {
+                Rect parentRect = new Rect();
+                parent.getHitRect(parentRect);
+                Rect buttonRect = new Rect();
+                button.getHitRect(buttonRect);
+
+                int widthDiff = parentRect.width() - buttonRect.width();
+                int heightDiff = parentRect.height() - buttonRect.height();
+
+                buttonRect.left -= widthDiff/2;
+                buttonRect.right += widthDiff/2;
+                buttonRect.top -= heightDiff/2;
+                buttonRect.bottom += heightDiff/2;
+
+                parent.setTouchDelegate(new TouchDelegate(buttonRect, button));
+            }
+        });
     }
 
     /**
@@ -335,11 +352,6 @@ public class BottomBar extends FrameLayout {
     }
 
     @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-    }
-
-    @Override
     public void setBackgroundColor(int color) {
         mBackgroundColor = color;
         setPaintColor(mBackgroundAlpha, mBackgroundColor);
@@ -347,16 +359,40 @@ public class BottomBar extends FrameLayout {
     }
 
     private void setBackgroundPressedColor(int color) {
-        if (mIsOsVersionL) {
+        if (ApiHelper.isLOrHigher()) {
             // not supported (setting a color on a RippleDrawable is hard =[ )
         } else {
             mBackgroundPressedColor = color;
         }
     }
 
+    private LayerDrawable applyCircleDrawableToShutterBackground(LayerDrawable shutterBackground) {
+        // the background for video has a circle_item drawable placeholder
+        // that gets replaced by an AnimatedCircleDrawable for the cool
+        // shrink-down-to-a-circle effect
+        // all other modes need not do this replace
+        Drawable d = shutterBackground.findDrawableByLayerId(R.id.circle_item);
+        if (d != null) {
+            Drawable animatedCircleDrawable =
+                    new AnimatedCircleDrawable((int) mCircleRadius);
+            animatedCircleDrawable.setLevel(DRAWABLE_MAX_LEVEL);
+            shutterBackground
+                    .setDrawableByLayerId(R.id.circle_item, animatedCircleDrawable);
+        }
+
+        return shutterBackground;
+    }
+
+    private LayerDrawable newDrawableFromConstantState(Drawable.ConstantState constantState) {
+        return (LayerDrawable) constantState.newDrawable(getContext().getResources());
+    }
+
     private void setupShutterBackgroundForModeIndex(int index) {
-        LayerDrawable shutterBackground = mShutterButtonBackgrounds[index];
+        LayerDrawable shutterBackground = applyCircleDrawableToShutterBackground(
+                newDrawableFromConstantState(mShutterButtonBackgroundConstantStates[index]));
         mShutterButton.setBackground(shutterBackground);
+        mCancelButton.setBackground(applyCircleDrawableToShutterBackground(
+                newDrawableFromConstantState(mShutterButtonBackgroundConstantStates[index])));
 
         Drawable d = shutterBackground.getDrawable(0);
         mAnimatedCircleDrawable = null;
index 9a7126d..19a21f1 100644 (file)
@@ -44,13 +44,14 @@ public class CaptureAnimationOverlay extends View
     implements PreviewStatusListener.PreviewAreaChangedListener {
     private final static Log.Tag TAG = new Log.Tag("CaptureAnimOverlay");
 
-    private final static int FLASH_ALPHA_BEFORE_SHRINK = 180;
-    private final static int FLASH_ALPHA_AFTER_SHRINK = 50;
     private final static int FLASH_COLOR = Color.WHITE;
 
     private static final float FLASH_MAX_ALPHA = 0.85f;
     private static final long FLASH_FULL_DURATION_MS = 65;
     private static final long FLASH_DECREASE_DURATION_MS = 150;
+    private static final float SHORT_FLASH_MAX_ALPHA = 0.75f;
+    private static final long SHORT_FLASH_FULL_DURATION_MS = 34;
+    private static final long SHORT_FLASH_DECREASE_DURATION_MS = 100;
 
     private RectF mPreviewArea = new RectF();
 
@@ -97,22 +98,37 @@ public class CaptureAnimationOverlay extends View
 
     /**
      * Start flash animation.
+     *
+     * @param shortFlash show shortest possible flash instead of regular long version.
      */
-    public void startFlashAnimation() {
+    public void startFlashAnimation(boolean shortFlash) {
         if (mFlashAnimation != null && mFlashAnimation.isRunning()) {
             mFlashAnimation.cancel();
         }
+        float maxAlpha;
+
+        if (shortFlash) {
+            maxAlpha = SHORT_FLASH_MAX_ALPHA;
+        } else {
+            maxAlpha = FLASH_MAX_ALPHA;
+        }
+
+        ValueAnimator flashAnim1 = ValueAnimator.ofFloat(maxAlpha, maxAlpha);
+        ValueAnimator flashAnim2 = ValueAnimator.ofFloat(maxAlpha, .0f);
+
+        if (shortFlash) {
+            flashAnim1.setDuration(SHORT_FLASH_FULL_DURATION_MS);
+            flashAnim2.setDuration(SHORT_FLASH_DECREASE_DURATION_MS);
+        } else {
+            flashAnim1.setDuration(FLASH_FULL_DURATION_MS);
+            flashAnim2.setDuration(FLASH_DECREASE_DURATION_MS);
+        }
 
-        ValueAnimator flashAnim1 = ValueAnimator.ofFloat(FLASH_MAX_ALPHA, FLASH_MAX_ALPHA);
-        ValueAnimator flashAnim2 = ValueAnimator.ofFloat(FLASH_MAX_ALPHA, .0f);
-        flashAnim1.setDuration(FLASH_FULL_DURATION_MS);
-        flashAnim2.setDuration(FLASH_DECREASE_DURATION_MS);
         flashAnim1.addUpdateListener(mFlashAnimUpdateListener);
         flashAnim2.addUpdateListener(mFlashAnimUpdateListener);
         flashAnim1.setInterpolator(mFlashAnimInterpolator);
         flashAnim2.setInterpolator(mFlashAnimInterpolator);
 
-
         mFlashAnimation = new AnimatorSet();
         mFlashAnimation.play(flashAnim1).before(flashAnim2);
         mFlashAnimation.addListener(mFlashAnimListener);
index 8d5c292..898e00a 100644 (file)
@@ -53,9 +53,6 @@ public class FaceView extends View
     private Face[] mFaces;
     private Face[] mPendingFaces;
     private int mColor;
-    private final int mFocusingColor;
-    private final int mFocusedColor;
-    private final int mFailColor;
     private Paint mPaint;
     private volatile boolean mBlocked;
 
@@ -79,10 +76,7 @@ public class FaceView extends View
     public FaceView(Context context, AttributeSet attrs) {
         super(context, attrs);
         Resources res = getResources();
-        mFocusingColor = res.getColor(R.color.face_detect_start);
-        mFocusedColor = res.getColor(R.color.face_detect_success);
-        mFailColor = res.getColor(R.color.face_detect_fail);
-        mColor = mFocusingColor;
+        mColor = res.getColor(R.color.face_detect_start);
         mPaint = new Paint();
         mPaint.setAntiAlias(true);
         mPaint.setStyle(Style.STROKE);
@@ -139,21 +133,18 @@ public class FaceView extends View
 
     @Override
     public void showStart() {
-        mColor = mFocusingColor;
         invalidate();
     }
 
     // Ignore the parameter. No autofocus animation for face detection.
     @Override
     public void showSuccess(boolean timeout) {
-        mColor = mFocusedColor;
         invalidate();
     }
 
     // Ignore the parameter. No autofocus animation for face detection.
     @Override
     public void showFail(boolean timeout) {
-        mColor = mFailColor;
         invalidate();
     }
 
@@ -161,7 +152,6 @@ public class FaceView extends View
     public void clear() {
         // Face indicator is displayed during preview. Do not clear the
         // drawable.
-        mColor = mFocusingColor;
         mFaces = null;
         invalidate();
     }
@@ -212,7 +202,7 @@ public class FaceView extends View
                 }
                 mPaint.setColor(mColor);
                 mRect.offset(mPreviewArea.left, mPreviewArea.top);
-                canvas.drawOval(mRect, mPaint);
+                canvas.drawRect(mRect, mPaint);
             }
             canvas.restore();
         }
index 6d95e07..bd913d4 100644 (file)
@@ -18,13 +18,16 @@ package com.android.camera.ui;
 
 import android.animation.ValueAnimator;
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Canvas;
+import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
 
 import com.android.camera.FocusOverlayManager;
+import com.android.camera.debug.DebugPropertyHelper;
 import com.android.camera.debug.Log;
 import com.android.camera2.R;
 
@@ -34,21 +37,34 @@ import com.android.camera2.R;
 public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
     private static final Log.Tag TAG = new Log.Tag("FocusOverlay");
 
+    /** System Properties switch to enable debugging focus UI. */
+    private static final boolean CAPTURE_DEBUG_UI = DebugPropertyHelper.showCaptureDebugUI();
+
     private final static int FOCUS_DURATION_MS = 500;
     private final static int FOCUS_INDICATOR_ROTATION_DEGREES = 50;
 
     private final Drawable mFocusIndicator;
-    private final Drawable mFocusOuterRing;
+    private Drawable mFocusOuterRing;
     private final Rect mBounds = new Rect();
     private final ValueAnimator mFocusAnimation = new ValueAnimator();
 
+    private Paint mDebugSolidPaint;
+    private Paint mDebugCornersPaint;
+    private Paint mDebugTextPaint;
+    private int mDebugStartColor;
+    private int mDebugSuccessColor;
+    private int mDebugFailColor;
+    private Rect mFocusDebugSolidRect;
+    private Rect mFocusDebugCornersRect;
+    private boolean mIsPassiveScan;
+    private String mDebugMessage;
+
     private int mPositionX;
     private int mPositionY;
     private int mAngle;
     private final int mFocusIndicatorSize;
     private boolean mShowIndicator;
     private final int mFocusOuterRingSize;
-    private boolean mCurrentRunIsAutoFocus = true;
 
     public FocusOverlay(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -56,6 +72,25 @@ public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
         mFocusIndicatorSize = getResources().getDimensionPixelSize(R.dimen.focus_inner_ring_size);
         mFocusOuterRing = getResources().getDrawable(R.drawable.focus_ring_touch_outer);
         mFocusOuterRingSize = getResources().getDimensionPixelSize(R.dimen.focus_outer_ring_size);
+
+        if (CAPTURE_DEBUG_UI) {
+            Resources res = getResources();
+            mDebugStartColor = res.getColor(R.color.focus_debug);
+            mDebugSuccessColor = res.getColor(R.color.focus_debug_success);
+            mDebugFailColor = res.getColor(R.color.focus_debug_fail);
+            mDebugTextPaint= new Paint();
+            mDebugTextPaint.setColor(res.getColor(R.color.focus_debug_text));
+            mDebugTextPaint.setStyle(Paint.Style.FILL);
+            mDebugSolidPaint = new Paint();
+            mDebugSolidPaint.setColor(res.getColor(R.color.focus_debug));
+            mDebugSolidPaint.setAntiAlias(true);
+            mDebugSolidPaint.setStyle(Paint.Style.STROKE);
+            mDebugSolidPaint.setStrokeWidth(res.getDimension(R.dimen.focus_debug_stroke));
+            mDebugCornersPaint = new Paint(mDebugSolidPaint);
+            mDebugCornersPaint.setColor(res.getColor(R.color.focus_debug));
+            mFocusDebugSolidRect = new Rect();
+            mFocusDebugCornersRect = new Rect();
+        }
     }
 
     @Override
@@ -67,10 +102,19 @@ public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
     @Override
     public void clearFocus() {
         mShowIndicator = false;
+        if (CAPTURE_DEBUG_UI) {
+            setVisibility(INVISIBLE);
+        }
+    }
+
+    @Override
+    public void setFocusPosition(int x, int y, boolean isPassiveScan) {
+        setFocusPosition(x, y, isPassiveScan, 0, 0);
     }
 
     @Override
-    public void setFocusPosition(int x, int y, boolean isAutoFocus) {
+    public void setFocusPosition(int x, int y, boolean isPassiveScan, int aFsize, int aEsize) {
+        mIsPassiveScan = isPassiveScan;
         mPositionX = x;
         mPositionY = y;
         mBounds.set(x - mFocusIndicatorSize / 2, y - mFocusIndicatorSize / 2,
@@ -78,12 +122,44 @@ public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
         mFocusIndicator.setBounds(mBounds);
         mFocusOuterRing.setBounds(x - mFocusOuterRingSize / 2, y - mFocusOuterRingSize / 2,
                 x + mFocusOuterRingSize / 2, y + mFocusOuterRingSize / 2);
-        mCurrentRunIsAutoFocus = isAutoFocus;
+
+        if (CAPTURE_DEBUG_UI) {
+            mFocusOuterRing.setBounds(0, 0, 0, 0);
+            if (isPassiveScan) {
+                // Use AE rect only.
+                mFocusDebugSolidRect.setEmpty();
+                int avg = (aFsize + aEsize) / 2;
+                mFocusDebugCornersRect.set(x - avg / 2, y - avg / 2, x + avg / 2, y + avg / 2);
+            } else {
+                mFocusDebugSolidRect.set(x - aFsize / 2, y - aFsize / 2, x + aFsize / 2,
+                        y + aFsize / 2);
+                // If AE region is different size than AF region and active scan.
+                if (aFsize != aEsize) {
+                    mFocusDebugCornersRect.set(x - aEsize / 2, y - aEsize / 2, x + aEsize / 2,
+                            y + aEsize / 2);
+                } else {
+                    mFocusDebugCornersRect.setEmpty();
+                }
+            }
+            mDebugSolidPaint.setColor(mDebugStartColor);
+            mDebugCornersPaint.setColor(mDebugStartColor);
+        }
+
         if (getVisibility() != VISIBLE) {
             setVisibility(VISIBLE);
         }
+        invalidate();
     }
 
+    /**
+     * This is called in:
+     * <ul>
+     * <li>API1 non-CAF after autoFocus().</li>
+     * <li>API1 CAF mode for onAutoFocusMoving(true).</li>
+     * <li>API2 for transition to ACTIVE_SCANNING or PASSIVE_SCANNING.</li>
+     * <ul>
+     * TODO after PhotoModule/GcamModule deprecation: Do not use this for CAF.
+     */
     @Override
     public void onFocusStarted() {
         mShowIndicator = true;
@@ -97,22 +173,68 @@ public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
             }
         });
         mFocusAnimation.start();
+        if (CAPTURE_DEBUG_UI) {
+            mDebugMessage = null;
+        }
     }
 
+    /**
+     * This is called in:
+     * <ul>
+     * <li>API1 non-CAF for onAutoFocus(true).</li>
+     * <li>API2 non-CAF for transition to FOCUSED_LOCKED.</li>
+     * <li>API1 CAF mode for onAutoFocusMoving(false).</li>
+     * <ul>
+     * TODO after PhotoModule/GcamModule deprecation: Do not use this for CAF.
+     */
     @Override
     public void onFocusSucceeded() {
         mFocusAnimation.cancel();
         mShowIndicator = false;
+        if (CAPTURE_DEBUG_UI && !mIsPassiveScan) {
+            mDebugSolidPaint.setColor(mDebugSuccessColor);
+        }
         invalidate();
     }
 
+    /**
+     * This is called in:
+     * <ul>
+     * <li>API1 non-CAF for onAutoFocus(false).</li>
+     * <li>API2 non-CAF for transition to NOT_FOCUSED_LOCKED.</li>
+     * <ul>
+     */
     @Override
     public void onFocusFailed() {
         mFocusAnimation.cancel();
         mShowIndicator = false;
+        if (CAPTURE_DEBUG_UI && !mIsPassiveScan) {
+            mDebugSolidPaint.setColor(mDebugFailColor);
+        }
         invalidate();
     }
 
+    /**
+     * This is called in:
+     * API2 for CAF state changes to PASSIVE_FOCUSED or PASSIVE_UNFOCUSED.
+     */
+    @Override
+    public void setPassiveFocusSuccess(boolean success) {
+        mFocusAnimation.cancel();
+        mShowIndicator = false;
+        if (CAPTURE_DEBUG_UI) {
+            mDebugCornersPaint.setColor(success ? mDebugSuccessColor : mDebugFailColor);
+        }
+        invalidate();
+    }
+
+    @Override
+    public void showDebugMessage(String message) {
+        if (CAPTURE_DEBUG_UI) {
+            mDebugMessage = message;
+        }
+    }
+
     @Override
     public void pauseFaceDetection() {
         // TODO: Add face detection support.
@@ -127,12 +249,30 @@ public class FocusOverlay extends View implements FocusOverlayManager.FocusUI {
     public void onDraw(Canvas canvas) {
         super.onDraw(canvas);
 
-        if (mShowIndicator && !mCurrentRunIsAutoFocus) {
+        if (mShowIndicator) {
             mFocusOuterRing.draw(canvas);
             canvas.save();
             canvas.rotate(mAngle, mPositionX, mPositionY);
             mFocusIndicator.draw(canvas);
             canvas.restore();
         }
+        if (CAPTURE_DEBUG_UI) {
+            canvas.drawRect(mFocusDebugSolidRect, mDebugSolidPaint);
+            float delta = 0.1f * mFocusDebugCornersRect.width();
+            float left = mFocusDebugCornersRect.left;
+            float top = mFocusDebugCornersRect.top;
+            float right = mFocusDebugCornersRect.right;
+            float bot = mFocusDebugCornersRect.bottom;
+
+            canvas.drawLines(new float[]{left, top + delta, left, top, left, top, left + delta, top}, mDebugCornersPaint);
+            canvas.drawLines(new float[]{right, top + delta, right, top, right, top, right - delta, top}, mDebugCornersPaint);
+            canvas.drawLines(new float[]{left, bot - delta, left, bot, left, bot, left + delta, bot}, mDebugCornersPaint);
+            canvas.drawLines(new float[]{right, bot - delta, right, bot, right, bot, right - delta, bot}, mDebugCornersPaint);
+
+            if (mDebugMessage != null) {
+                mDebugTextPaint.setTextSize(40);
+                canvas.drawText(mDebugMessage, left - 4, bot + 44, mDebugTextPaint);
+            }
+        }
     }
 }
index e7e2701..a978bc7 100644 (file)
@@ -34,16 +34,13 @@ import com.android.camera2.R;
  * whereas a state list drawable would require a different drawable for each state.
  */
 public class ModeIconView extends View {
-    private boolean mHighlightIsOn = false;
     private final GradientDrawable mBackground;
-    private final GradientDrawable mHoverDrawable;
 
     private final int mIconBackgroundSize;
     private int mHighlightColor;
     private final int mBackgroundDefaultColor;
     private final int mIconDrawableSize;
     private Drawable mIconDrawable = null;
-    private boolean mSelected = false;
 
     public ModeIconView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -53,13 +50,8 @@ public class ModeIconView extends View {
         mBackground = (GradientDrawable) getResources()
                 .getDrawable(R.drawable.mode_icon_background).mutate();
         mBackground.setBounds(0, 0, mIconBackgroundSize, mIconBackgroundSize);
-        mHoverDrawable = (GradientDrawable) getResources()
-                .getDrawable(R.drawable.mode_icon_background).mutate();
-        mHoverDrawable.setBounds(0, 0, mIconBackgroundSize, mIconBackgroundSize);
         mIconDrawableSize = getResources().getDimensionPixelSize(
                 R.dimen.mode_selector_icon_drawable_size);
-
-        mHoverDrawable.setColor(getResources().getColor(R.color.mode_icon_hover_highlight));
     }
 
     /**
@@ -83,11 +75,7 @@ public class ModeIconView extends View {
     @Override
     public void draw(Canvas canvas) {
         super.draw(canvas);
-        if (mHighlightIsOn && !mSelected) {
-            mHoverDrawable.draw(canvas);
-        } else {
-            mBackground.draw(canvas);
-        }
+        mBackground.draw(canvas);
         if (mIconDrawable != null) {
             mIconDrawable.draw(canvas);
         }
@@ -117,24 +105,10 @@ public class ModeIconView extends View {
     public void setSelected(boolean selected) {
         if (selected) {
             mBackground.setColor(mHighlightColor);
-            mHighlightIsOn = false;
         } else {
             mBackground.setColor(mBackgroundDefaultColor);
         }
 
-        mSelected = selected;
-        invalidate();
-    }
-
-    /**
-     * This gets called when the highlighted state is changed. When highlighted,
-     * a ring shaped drawable of a solid pre-defined color will be drawn on top
-     * of the background drawable to indicate highlight state.
-     *
-     * @param highlighted true when highlighted, false otherwise.
-     */
-    public void setHighlighted(boolean highlighted) {
-        mHighlightIsOn = highlighted;
         invalidate();
     }
 
index 78ab986..98c0c2e 100644 (file)
@@ -276,6 +276,15 @@ public class ModeListView extends FrameLayout
             // Do nothing.
         }
 
+        /**
+         * Hide the mode drawer (with animation, if supported)
+         * and switch to fully hidden state.
+         * Default is to simply call {@link #hide()}.
+         */
+        public void hideAnimated() {
+            hide();
+        }
+
         /***************GestureListener implementation*****************/
         @Override
         public boolean onDown(MotionEvent e) {
@@ -742,6 +751,16 @@ public class ModeListView extends FrameLayout
             mCurrentStateManager.setCurrentState(new FullyHiddenState());
         }
 
+        @Override
+        public void hideAnimated() {
+            cancelAnimation();
+            animateListToWidth(0).addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mCurrentStateManager.setCurrentState(new FullyHiddenState());
+                }
+            });
+        }
     }
 
     /**
@@ -826,12 +845,11 @@ public class ModeListView extends FrameLayout
      * be revealed through a pinhole animation. After all the animations finish,
      * mode list will transition into fully hidden state.
      */
-    private class SelectedState extends  ModeListState {
+    private class SelectedState extends ModeListState {
         public SelectedState(ModeSelectorItem selectedItem) {
             final int modeId = selectedItem.getModeId();
             // Un-highlight all the modes.
             for (int i = 0; i < mModeSelectorItems.length; i++) {
-                mModeSelectorItems[i].setHighlighted(false);
                 mModeSelectorItems[i].setSelected(false);
             }
 
@@ -1441,6 +1459,20 @@ public class ModeListView extends FrameLayout
     }
 
     /**
+     * Hide the mode list immediately (provided the current state allows it).
+     */
+    public void hide() {
+        mCurrentStateManager.getCurrentState().hide();
+    }
+
+    /**
+     * Hide the mode list with an animation.
+     */
+    public void hideAnimated() {
+        mCurrentStateManager.getCurrentState().hideAnimated();
+    }
+
+    /**
      * Resets the visible width of all the mode selectors to 0.
      */
     private void resetModeSelectors() {
@@ -1501,7 +1533,6 @@ public class ModeListView extends FrameLayout
             if (mModeSelectorItems != null) {
                 // When becoming invisible/gone after initializing mode selector items.
                 for (int i = 0; i < mModeSelectorItems.length; i++) {
-                    mModeSelectorItems[i].setHighlighted(false);
                     mModeSelectorItems[i].setSelected(false);
                 }
             }
@@ -1897,7 +1928,7 @@ public class ModeListView extends FrameLayout
     private class PeepholeAnimationEffect extends AnimationEffects {
 
         private final static int UNSET = -1;
-        private final static int PEEP_HOLE_ANIMATION_DURATION_MS = 300;
+        private final static int PEEP_HOLE_ANIMATION_DURATION_MS = 500;
 
         private final Paint mMaskPaint = new Paint();
         private final RectF mBackgroundDrawArea = new RectF();
@@ -1906,6 +1937,8 @@ public class ModeListView extends FrameLayout
         private int mPeepHoleCenterY = UNSET;
         private float mRadius = 0f;
         private ValueAnimator mPeepHoleAnimator;
+        private ValueAnimator mFadeOutAlphaAnimator;
+        private ValueAnimator mRevealAlphaAnimator;
         private Bitmap mBackground;
         private Bitmap mBackgroundOverlay;
 
@@ -1923,6 +1956,107 @@ public class ModeListView extends FrameLayout
 
             mCoverPaint.setColor(0);
             mCoverPaint.setAlpha(0);
+
+            setupAnimators();
+        }
+
+        private void setupAnimators() {
+            mFadeOutAlphaAnimator = ValueAnimator.ofInt(0, 255);
+            mFadeOutAlphaAnimator.setDuration(100);
+            mFadeOutAlphaAnimator.setInterpolator(Gusterpolator.INSTANCE);
+            mFadeOutAlphaAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    mCoverPaint.setAlpha((Integer) animation.getAnimatedValue());
+                    invalidate();
+                }
+            });
+            mFadeOutAlphaAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationStart(Animator animation) {
+                    // Sets a HW layer on the view for the animation.
+                    setLayerType(LAYER_TYPE_HARDWARE, null);
+                }
+
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    // Sets the layer type back to NONE as a workaround for b/12594617.
+                    setLayerType(LAYER_TYPE_NONE, null);
+                }
+            });
+
+            /////////////////
+
+            mRevealAlphaAnimator = ValueAnimator.ofInt(255, 0);
+            mRevealAlphaAnimator.setDuration(PEEP_HOLE_ANIMATION_DURATION_MS);
+            mRevealAlphaAnimator.setInterpolator(Gusterpolator.INSTANCE);
+            mRevealAlphaAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    int alpha = (Integer) animation.getAnimatedValue();
+                    mCirclePaint.setAlpha(alpha);
+                    mCoverPaint.setAlpha(alpha);
+                }
+            });
+            mRevealAlphaAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationStart(Animator animation) {
+                    // Sets a HW layer on the view for the animation.
+                    setLayerType(LAYER_TYPE_HARDWARE, null);
+                }
+
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    // Sets the layer type back to NONE as a workaround for b/12594617.
+                    setLayerType(LAYER_TYPE_NONE, null);
+                }
+            });
+
+            ////////////////
+
+            int horizontalDistanceToFarEdge = Math.max(mPeepHoleCenterX, mWidth - mPeepHoleCenterX);
+            int verticalDistanceToFarEdge = Math.max(mPeepHoleCenterY, mHeight - mPeepHoleCenterY);
+            int endRadius = (int) (Math.sqrt(horizontalDistanceToFarEdge * horizontalDistanceToFarEdge
+                    + verticalDistanceToFarEdge * verticalDistanceToFarEdge));
+            int startRadius = getResources().getDimensionPixelSize(
+                    R.dimen.mode_selector_icon_block_width) / 2;
+
+            mPeepHoleAnimator = ValueAnimator.ofFloat(startRadius, endRadius);
+            mPeepHoleAnimator.setDuration(PEEP_HOLE_ANIMATION_DURATION_MS);
+            mPeepHoleAnimator.setInterpolator(Gusterpolator.INSTANCE);
+            mPeepHoleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    // Modify mask by enlarging the hole
+                    mRadius = (Float) mPeepHoleAnimator.getAnimatedValue();
+                    invalidate();
+                }
+            });
+            mPeepHoleAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationStart(Animator animation) {
+                    // Sets a HW layer on the view for the animation.
+                    setLayerType(LAYER_TYPE_HARDWARE, null);
+                }
+
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    // Sets the layer type back to NONE as a workaround for b/12594617.
+                    setLayerType(LAYER_TYPE_NONE, null);
+                }
+            });
+
+            ////////////////
+            int size = getContext().getResources()
+                    .getDimensionPixelSize(R.dimen.mode_selector_icon_block_width);
+            mCircleDrawable = new TouchCircleDrawable(getContext().getResources());
+            mCircleDrawable.setSize(size, size);
+            mCircleDrawable.setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    invalidate();
+                }
+            });
         }
 
         @Override
@@ -1936,6 +2070,16 @@ public class ModeListView extends FrameLayout
             return true;
         }
 
+        @Override
+        public void drawForeground(Canvas canvas) {
+            // Draw the circle in clear mode
+            if (mPeepHoleAnimator != null) {
+                // Draw a transparent circle using clear mode
+                canvas.drawCircle(mPeepHoleCenterX, mPeepHoleCenterY, mRadius, mMaskPaint);
+                canvas.drawCircle(mPeepHoleCenterX, mPeepHoleCenterY, mRadius, mCirclePaint);
+            }
+        }
+
         public void setAnimationStartingPosition(int x, int y) {
             mPeepHoleCenterX = x;
             mPeepHoleCenterY = y;
@@ -1978,16 +2122,6 @@ public class ModeListView extends FrameLayout
         }
 
         @Override
-        public void drawForeground(Canvas canvas) {
-            // Draw the circle in clear mode
-            if (mPeepHoleAnimator != null) {
-                // Draw a transparent circle using clear mode
-                canvas.drawCircle(mPeepHoleCenterX, mPeepHoleCenterY, mRadius, mMaskPaint);
-                canvas.drawCircle(mPeepHoleCenterX, mPeepHoleCenterY, mRadius, mCirclePaint);
-            }
-        }
-
-        @Override
         public boolean shouldDrawSuper() {
             // No need to draw super when mBackgroundOverlay is being drawn, as
             // background overlay already contains what's drawn in super.
@@ -2000,36 +2134,11 @@ public class ModeListView extends FrameLayout
             mCoverPaint.setColor(0);
             mCoverPaint.setAlpha(0);
 
-            ValueAnimator alphaAnimator = ValueAnimator.ofInt(0, 255);
-            alphaAnimator.setDuration(100);
-            alphaAnimator.setInterpolator(Gusterpolator.INSTANCE);
-            alphaAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    mCoverPaint.setAlpha((Integer) animation.getAnimatedValue());
-                    invalidate();
-                }
-            });
-            if (listener != null) {
-                alphaAnimator.addListener(listener);
-            }
-
-            int size = getContext().getResources()
-                    .getDimensionPixelSize(R.dimen.mode_selector_icon_block_width);
-            mCircleDrawable = new TouchCircleDrawable(getContext().getResources());
             mCircleDrawable.setIconDrawable(
                     selectedItem.getIcon().getIconDrawableClone(),
                     selectedItem.getIcon().getIconDrawableSize());
-            mCircleDrawable.setSize(size, size);
             mCircleDrawable.setCenter(new Point(x, y));
             mCircleDrawable.setColor(selectedItem.getHighlightColor());
-            mCircleDrawable.setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    invalidate();
-                }
-            });
-
             mCircleDrawable.setAnimatorListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationEnd(Animator animation) {
@@ -2046,8 +2155,16 @@ public class ModeListView extends FrameLayout
                     });
                 }
             });
+
+            // add fade out animator to a set, so we can freely add
+            // the listener without having to worry about listener dupes
+            AnimatorSet s = new AnimatorSet();
+            s.play(mFadeOutAlphaAnimator);
+            if (listener != null) {
+                s.addListener(listener);
+            }
             mCircleDrawable.animate();
-            alphaAnimator.start();
+            s.start();
         }
 
         @Override
@@ -2060,73 +2177,18 @@ public class ModeListView extends FrameLayout
                 mPeepHoleCenterY = mHeight / 2;
             }
 
-            int horizontalDistanceToFarEdge = Math.max(mPeepHoleCenterX, mWidth - mPeepHoleCenterX);
-            int verticalDistanceToFarEdge = Math.max(mPeepHoleCenterY, mHeight - mPeepHoleCenterY);
-            int endRadius = (int) (Math.sqrt(horizontalDistanceToFarEdge * horizontalDistanceToFarEdge
-                    + verticalDistanceToFarEdge * verticalDistanceToFarEdge));
-            int startRadius = getResources().getDimensionPixelSize(
-                    R.dimen.mode_selector_icon_block_width) / 2;
-
-            mPeepHoleAnimator = ValueAnimator.ofFloat(startRadius, endRadius);
-            mPeepHoleAnimator.setDuration(PEEP_HOLE_ANIMATION_DURATION_MS);
-            mPeepHoleAnimator.setInterpolator(Gusterpolator.INSTANCE);
-            mPeepHoleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    // Modify mask by enlarging the hole
-                    mRadius = (Float) mPeepHoleAnimator.getAnimatedValue();
-                    invalidate();
-                }
-            });
-
-            if (listener != null) {
-                mPeepHoleAnimator.addListener(listener);
-            }
-
-            mPeepHoleAnimator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    // Sets a HW layer on the view for the animation.
-                    setLayerType(LAYER_TYPE_HARDWARE, null);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    // Sets the layer type back to NONE as a workaround for b/12594617.
-                    setLayerType(LAYER_TYPE_NONE, null);
-                }
-            });
-
             mCirclePaint.setAlpha(255);
             mCoverPaint.setAlpha(255);
-            ValueAnimator alphaAnimator = ValueAnimator.ofInt(255, 0);
-            alphaAnimator.setDuration(PEEP_HOLE_ANIMATION_DURATION_MS);
-            alphaAnimator.setInterpolator(Gusterpolator.INSTANCE);
-            alphaAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    int alpha = (Integer) animation.getAnimatedValue();
-                    mCirclePaint.setAlpha(alpha);
-                    mCoverPaint.setAlpha(alpha);
-                }
-            });
-            alphaAnimator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    // Sets a HW layer on the view for the animation.
-                    setLayerType(LAYER_TYPE_HARDWARE, null);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    // Sets the layer type back to NONE as a workaround for b/12594617.
-                    setLayerType(LAYER_TYPE_NONE, null);
-                }
-            });
 
-
-            mPeepHoleAnimator.start();
-            alphaAnimator.start();
+            // add peephole and reveal animators to a set, so we can
+            // freely add the listener without having to worry about
+            // listener dupes
+            AnimatorSet s = new AnimatorSet();
+            s.play(mPeepHoleAnimator).with(mRevealAlphaAnimator);
+            if (listener != null) {
+                s.addListener(listener);
+            }
+            s.start();
         }
 
         @Override
index 8b535b4..6ce70fc 100644 (file)
@@ -42,11 +42,6 @@ import com.android.camera2.R;
  * we display the view partially.
  */
 class ModeSelectorItem extends FrameLayout {
-    // Drawing modes that defines how the TextView should be drawn when there
-    // is not enough space to draw the whole TextView.
-    public static final int FLY_IN = 1;
-    public static final int FLY_OUT = 2;
-
     private TextView mText;
     private ModeIconView mIcon;
     private int mVisibleWidth = 0;
@@ -99,10 +94,6 @@ class ModeSelectorItem extends FrameLayout {
         mListener = listener;
     }
 
-    public void setHighlighted(boolean highlighted) {
-        mIcon.setHighlighted(highlighted);
-    }
-
     @Override
     public void setSelected(boolean selected) {
         mIcon.setSelected(selected);
@@ -121,13 +112,6 @@ class ModeSelectorItem extends FrameLayout {
         return false;
     }
 
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        // When pressed state changes, highlight the icon.
-        mIcon.setHighlighted(pressed);
-    }
-
     /**
      * When swiping in, we truncate the end of the item if the visible width
      * is not enough to show the whole item. When swiping out, we truncate the
diff --git a/src/com/android/camera/ui/OverlayRenderer.java b/src/com/android/camera/ui/OverlayRenderer.java
deleted file mode 100644 (file)
index 110e10f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.ui;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.view.MotionEvent;
-
-import com.android.camera.debug.Log;
-
-public abstract class OverlayRenderer implements RenderOverlay.Renderer {
-
-    private static final Log.Tag TAG = new Log.Tag("OverlayRenderer");
-    protected RenderOverlay mOverlay;
-
-    protected int mLeft, mTop, mRight, mBottom;
-
-    protected boolean mVisible;
-
-    public void setVisible(boolean vis) {
-        mVisible = vis;
-        update();
-    }
-
-    public boolean isVisible() {
-        return mVisible;
-    }
-
-    // default does not handle touch
-    @Override
-    public boolean handlesTouch() {
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        return false;
-    }
-
-    public abstract void onDraw(Canvas canvas);
-
-    public void draw(Canvas canvas) {
-        if (mVisible) {
-            onDraw(canvas);
-        }
-    }
-
-    @Override
-    public void setOverlay(RenderOverlay overlay) {
-        mOverlay = overlay;
-    }
-
-    @Override
-    public void layout(int left, int top, int right, int bottom) {
-        mLeft = left;
-        mRight = right;
-        mTop = top;
-        mBottom = bottom;
-    }
-
-    protected Context getContext() {
-        if (mOverlay != null) {
-            return mOverlay.getContext();
-        } else {
-            return null;
-        }
-    }
-
-    public int getWidth() {
-        return mRight - mLeft;
-    }
-
-    public int getHeight() {
-        return mBottom - mTop;
-    }
-
-    protected void update() {
-        if (mOverlay != null) {
-            mOverlay.update();
-        }
-    }
-
-}
diff --git a/src/com/android/camera/ui/PieItem.java b/src/com/android/camera/ui/PieItem.java
deleted file mode 100644 (file)
index 47fe067..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.ui;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Path;
-import android.graphics.drawable.Drawable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Pie menu item
- */
-public class PieItem {
-
-    public static interface OnClickListener {
-        void onClick(PieItem item);
-    }
-
-    private Drawable mDrawable;
-    private int level;
-
-    private boolean mSelected;
-    private boolean mEnabled;
-    private List<PieItem> mItems;
-    private Path mPath;
-    private OnClickListener mOnClickListener;
-    private float mAlpha;
-    private CharSequence mLabel;
-
-    // Gray out the view when disabled
-    private static final float ENABLED_ALPHA = 1;
-    private static final float DISABLED_ALPHA = (float) 0.3;
-    private boolean mChangeAlphaWhenDisabled = true;
-
-    public PieItem(Drawable drawable, int level) {
-        mDrawable = drawable;
-        this.level = level;
-        if (drawable != null) {
-            setAlpha(1f);
-        }
-        mEnabled = true;
-    }
-
-    public void setLabel(CharSequence txt) {
-        mLabel = txt;
-    }
-
-    public CharSequence getLabel() {
-        return mLabel;
-    }
-
-    public boolean hasItems() {
-        return mItems != null;
-    }
-
-    public List<PieItem> getItems() {
-        return mItems;
-    }
-
-    public void addItem(PieItem item) {
-        if (mItems == null) {
-            mItems = new ArrayList<PieItem>();
-        }
-        mItems.add(item);
-    }
-
-    public void clearItems() {
-        mItems = null;
-    }
-
-    public void setLevel(int level) {
-        this.level = level;
-    }
-
-    public void setPath(Path p) {
-        mPath = p;
-    }
-
-    public Path getPath() {
-        return mPath;
-    }
-
-    public void setChangeAlphaWhenDisabled (boolean enable) {
-        mChangeAlphaWhenDisabled = enable;
-    }
-
-    public void setAlpha(float alpha) {
-        mAlpha = alpha;
-        mDrawable.setAlpha((int) (255 * alpha));
-    }
-
-    public void setEnabled(boolean enabled) {
-        mEnabled = enabled;
-        if (mChangeAlphaWhenDisabled) {
-            if (mEnabled) {
-                setAlpha(ENABLED_ALPHA);
-            } else {
-                setAlpha(DISABLED_ALPHA);
-            }
-        }
-    }
-
-    public boolean isEnabled() {
-        return mEnabled;
-    }
-
-    public void setSelected(boolean s) {
-        mSelected = s;
-    }
-
-    public boolean isSelected() {
-        return mSelected;
-    }
-
-    public int getLevel() {
-        return level;
-    }
-
-
-    public void setOnClickListener(OnClickListener listener) {
-        mOnClickListener = listener;
-    }
-
-    public void performClick() {
-        if (mOnClickListener != null) {
-            mOnClickListener.onClick(this);
-        }
-    }
-
-    public int getIntrinsicWidth() {
-        return mDrawable.getIntrinsicWidth();
-    }
-
-    public int getIntrinsicHeight() {
-        return mDrawable.getIntrinsicHeight();
-    }
-
-    public void setBounds(int left, int top, int right, int bottom) {
-        mDrawable.setBounds(left, top, right, bottom);
-    }
-
-    public void draw(Canvas canvas) {
-        mDrawable.draw(canvas);
-    }
-
-    public void setImageResource(Context context, int resId) {
-        Drawable d = context.getResources().getDrawable(resId).mutate();
-        d.setBounds(mDrawable.getBounds());
-        mDrawable = d;
-        setAlpha(mAlpha);
-    }
-
-}
diff --git a/src/com/android/camera/ui/PieMenuButton.java b/src/com/android/camera/ui/PieMenuButton.java
deleted file mode 100644 (file)
index 0ad93fa..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-
-public class PieMenuButton extends View {
-    private boolean mPressed;
-    private boolean mReadyToClick = false;
-    public PieMenuButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-        mPressed = isPressed();
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        boolean handled = super.onTouchEvent(event);
-        if (MotionEvent.ACTION_UP == event.getAction() && mPressed) {
-            // Perform a customized click as soon as the ACTION_UP event
-            // is received. The reason for doing this is that Framework
-            // delays the performClick() call after ACTION_UP. But we do not
-            // want the delay because it affects an important state change
-            // for PieRenderer.
-            mReadyToClick = true;
-            performClick();
-        }
-        return handled;
-    }
-
-    @Override
-    public boolean performClick() {
-        if (mReadyToClick) {
-            // We only respond to our customized click which happens right
-            // after ACTION_UP event is received, with no delay.
-            mReadyToClick = false;
-            return super.performClick();
-        }
-        return false;
-    }
-};
diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java
deleted file mode 100644 (file)
index 935b5f6..0000000
+++ /dev/null
@@ -1,1093 +0,0 @@
-/*
- * 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.ui;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Point;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.os.Handler;
-import android.os.Message;
-import android.util.FloatMath;
-import android.view.MotionEvent;
-import android.view.ViewConfiguration;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-
-import com.android.camera.debug.Log;
-import com.android.camera.drawable.TextDrawable;
-import com.android.camera2.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * An overlay renderer that is used to display focus state and progress state.
- */
-public class PieRenderer extends OverlayRenderer
-        implements FocusIndicator {
-
-    private static final Log.Tag TAG = new Log.Tag("PieRenderer");
-
-    // Sometimes continuous autofocus starts and stops several times quickly.
-    // These states are used to make sure the animation is run for at least some
-    // time.
-    private volatile int mState;
-    private ScaleAnimation mAnimation = new ScaleAnimation();
-    private static final int STATE_IDLE = 0;
-    private static final int STATE_FOCUSING = 1;
-    private static final int STATE_FINISHING = 2;
-    private static final int STATE_PIE = 8;
-
-    private static final float MATH_PI_2 = (float)(Math.PI / 2);
-
-    private Runnable mDisappear = new Disappear();
-    private Animation.AnimationListener mEndAction = new EndAction();
-    private static final int SCALING_UP_TIME = 600;
-    private static final int SCALING_DOWN_TIME = 100;
-    private static final int DISAPPEAR_TIMEOUT = 200;
-    private static final int DIAL_HORIZONTAL = 157;
-    // fade out timings
-    private static final int PIE_FADE_OUT_DURATION = 600;
-
-    private static final long PIE_FADE_IN_DURATION = 200;
-    private static final long PIE_XFADE_DURATION = 200;
-    private static final long PIE_SELECT_FADE_DURATION = 300;
-    private static final long PIE_OPEN_SUB_DELAY = 400;
-    private static final long PIE_SLICE_DURATION = 80;
-
-    private static final int MSG_OPEN = 0;
-    private static final int MSG_CLOSE = 1;
-    private static final int MSG_OPENSUBMENU = 2;
-
-    protected static float CENTER = (float) Math.PI / 2;
-    protected static float RAD24 = (float)(24 * Math.PI / 180);
-    protected static final float SWEEP_SLICE = 0.14f;
-    protected static final float SWEEP_ARC = 0.23f;
-
-    // geometry
-    private int mRadius;
-    private int mRadiusInc;
-
-    // the detection if touch is inside a slice is offset
-    // inbounds by this amount to allow the selection to show before the
-    // finger covers it
-    private int mTouchOffset;
-
-    private List<PieItem> mOpen;
-
-    private Paint mSelectedPaint;
-    private Paint mSubPaint;
-    private Paint mMenuArcPaint;
-
-    // touch handling
-    private PieItem mCurrentItem;
-
-    private Paint mFocusPaint;
-    private int mSuccessColor;
-    private int mFailColor;
-    private int mCircleSize;
-    private int mFocusX;
-    private int mFocusY;
-    private int mCenterX;
-    private int mCenterY;
-    private int mArcCenterY;
-    private int mSliceCenterY;
-    private int mPieCenterX;
-    private int mPieCenterY;
-    private int mSliceRadius;
-    private int mArcRadius;
-    private int mArcOffset;
-
-    private int mDialAngle;
-    private RectF mCircle;
-    private RectF mDial;
-    private Point mPoint1;
-    private Point mPoint2;
-    private int mStartAnimationAngle;
-    private boolean mFocused;
-    private int mInnerOffset;
-    private int mOuterStroke;
-    private int mInnerStroke;
-    private boolean mTapMode;
-    private boolean mBlockFocus;
-    private int mTouchSlopSquared;
-    private Point mDown;
-    private boolean mOpening;
-    private ValueAnimator mXFade;
-    private ValueAnimator mFadeIn;
-    private ValueAnimator mFadeOut;
-    private ValueAnimator mSlice;
-    private volatile boolean mFocusCancelled;
-    private PointF mPolar = new PointF();
-    private TextDrawable mLabel;
-    private int mDeadZone;
-    private int mAngleZone;
-    private float mCenterAngle;
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch(msg.what) {
-            case MSG_OPEN:
-                if (mListener != null) {
-                    mListener.onPieOpened(mPieCenterX, mPieCenterY);
-                }
-                break;
-            case MSG_CLOSE:
-                if (mListener != null) {
-                    mListener.onPieClosed();
-                }
-                break;
-            case MSG_OPENSUBMENU:
-                onEnterOpen();
-                break;
-            }
-
-        }
-    };
-
-    private PieListener mListener;
-
-    static public interface PieListener {
-        public void onPieOpened(int centerX, int centerY);
-        public void onPieClosed();
-    }
-
-    public void setPieListener(PieListener pl) {
-        mListener = pl;
-    }
-
-    public PieRenderer(Context context) {
-        init(context);
-    }
-
-    private void init(Context ctx) {
-        setVisible(false);
-        mOpen = new ArrayList<PieItem>();
-        mOpen.add(new PieItem(null, 0));
-        Resources res = ctx.getResources();
-        mRadius = (int) res.getDimensionPixelSize(R.dimen.pie_radius_start);
-        mRadiusInc = (int) res.getDimensionPixelSize(R.dimen.pie_radius_increment);
-        mCircleSize = mRadius - res.getDimensionPixelSize(R.dimen.focus_radius_offset);
-        mTouchOffset = (int) res.getDimensionPixelSize(R.dimen.pie_touch_offset);
-        mSelectedPaint = new Paint();
-        mSelectedPaint.setColor(Color.argb(255, 51, 181, 229));
-        mSelectedPaint.setAntiAlias(true);
-        mSubPaint = new Paint();
-        mSubPaint.setAntiAlias(true);
-        mSubPaint.setColor(Color.argb(200, 250, 230, 128));
-        mFocusPaint = new Paint();
-        mFocusPaint.setAntiAlias(true);
-        mFocusPaint.setColor(Color.WHITE);
-        mFocusPaint.setStyle(Paint.Style.STROKE);
-        mSuccessColor = Color.GREEN;
-        mFailColor = Color.RED;
-        mCircle = new RectF();
-        mDial = new RectF();
-        mPoint1 = new Point();
-        mPoint2 = new Point();
-        mInnerOffset = res.getDimensionPixelSize(R.dimen.focus_inner_offset);
-        mOuterStroke = res.getDimensionPixelSize(R.dimen.focus_outer_stroke);
-        mInnerStroke = res.getDimensionPixelSize(R.dimen.focus_inner_stroke);
-        mState = STATE_IDLE;
-        mBlockFocus = false;
-        mTouchSlopSquared = ViewConfiguration.get(ctx).getScaledTouchSlop();
-        mTouchSlopSquared = mTouchSlopSquared * mTouchSlopSquared;
-        mDown = new Point();
-        mMenuArcPaint = new Paint();
-        mMenuArcPaint.setAntiAlias(true);
-        mMenuArcPaint.setColor(Color.argb(140, 255, 255, 255));
-        mMenuArcPaint.setStrokeWidth(10);
-        mMenuArcPaint.setStyle(Paint.Style.STROKE);
-        mSliceRadius = res.getDimensionPixelSize(R.dimen.pie_item_radius);
-        mArcRadius = res.getDimensionPixelSize(R.dimen.pie_arc_radius);
-        mArcOffset = res.getDimensionPixelSize(R.dimen.pie_arc_offset);
-        mLabel = new TextDrawable(res);
-        mLabel.setDropShadow(true);
-        mDeadZone = res.getDimensionPixelSize(R.dimen.pie_deadzone_width);
-        mAngleZone = res.getDimensionPixelSize(R.dimen.pie_anglezone_width);
-    }
-
-    private PieItem getRoot() {
-        return mOpen.get(0);
-    }
-
-    public boolean showsItems() {
-        return mTapMode;
-    }
-
-    public void addItem(PieItem item) {
-        // add the item to the pie itself
-        getRoot().addItem(item);
-    }
-
-    public void clearItems() {
-        getRoot().clearItems();
-    }
-
-    public void showInCenter() {
-        if ((mState == STATE_PIE) && isVisible()) {
-            mTapMode = false;
-            show(false);
-        } else {
-            if (mState != STATE_IDLE) {
-                cancelFocus();
-            }
-            mState = STATE_PIE;
-            resetPieCenter();
-            setCenter(mPieCenterX, mPieCenterY);
-            mTapMode = true;
-            show(true);
-        }
-    }
-
-    public void hide() {
-        show(false);
-    }
-
-    /**
-     * guaranteed has center set
-     * @param show
-     */
-    private void show(boolean show) {
-        if (show) {
-            if (mXFade != null) {
-                mXFade.cancel();
-            }
-            mState = STATE_PIE;
-            // ensure clean state
-            mCurrentItem = null;
-            PieItem root = getRoot();
-            for (PieItem openItem : mOpen) {
-                if (openItem.hasItems()) {
-                    for (PieItem item : openItem.getItems()) {
-                        item.setSelected(false);
-                    }
-                }
-            }
-            mLabel.setText("");
-            mOpen.clear();
-            mOpen.add(root);
-            layoutPie();
-            fadeIn();
-        } else {
-            mState = STATE_IDLE;
-            mTapMode = false;
-            if (mXFade != null) {
-                mXFade.cancel();
-            }
-            if (mLabel != null) {
-                mLabel.setText("");
-            }
-        }
-        setVisible(show);
-        mHandler.sendEmptyMessage(show ? MSG_OPEN : MSG_CLOSE);
-    }
-
-    public boolean isOpen() {
-        return mState == STATE_PIE && isVisible();
-    }
-
-    private void fadeIn() {
-        mFadeIn = new ValueAnimator();
-        mFadeIn.setFloatValues(0f, 1f);
-        mFadeIn.setDuration(PIE_FADE_IN_DURATION);
-        // linear interpolation
-        mFadeIn.setInterpolator(null);
-        mFadeIn.addListener(new AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mFadeIn = null;
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) {
-            }
-
-            @Override
-            public void onAnimationCancel(Animator arg0) {
-            }
-        });
-        mFadeIn.start();
-    }
-
-    public void setCenter(int x, int y) {
-        mPieCenterX = x;
-        mPieCenterY = y;
-        mSliceCenterY = y + mSliceRadius - mArcOffset;
-        mArcCenterY = y - mArcOffset + mArcRadius;
-    }
-
-    @Override
-    public void layout(int l, int t, int r, int b) {
-        super.layout(l, t, r, b);
-        mCenterX = (r - l) / 2;
-        mCenterY = (b - t) / 2;
-
-        mFocusX = mCenterX;
-        mFocusY = mCenterY;
-        resetPieCenter();
-        setCircle(mFocusX, mFocusY);
-        if (isVisible() && mState == STATE_PIE) {
-            setCenter(mPieCenterX, mPieCenterY);
-            layoutPie();
-        }
-    }
-
-    private void resetPieCenter() {
-        mPieCenterX = mCenterX;
-        mPieCenterY = (int) (getHeight() - 2.5f * mDeadZone);
-    }
-
-    private void layoutPie() {
-        mCenterAngle = getCenterAngle();
-        layoutItems(0, getRoot().getItems());
-        layoutLabel(getLevel());
-    }
-
-    private void layoutLabel(int level) {
-        int x = mPieCenterX - (int) (FloatMath.sin(mCenterAngle - CENTER)
-                * (mArcRadius + (level + 2) * mRadiusInc));
-        int y = mArcCenterY - mArcRadius - (level + 2) * mRadiusInc;
-        int w = mLabel.getIntrinsicWidth();
-        int h = mLabel.getIntrinsicHeight();
-        mLabel.setBounds(x - w/2, y - h/2, x + w/2, y + h/2);
-    }
-
-    private void layoutItems(int level, List<PieItem> items) {
-        int extend = 1;
-        Path path = makeSlice(getDegrees(0) + extend, getDegrees(SWEEP_ARC) - extend,
-                mArcRadius, mArcRadius + mRadiusInc + mRadiusInc / 4,
-                mPieCenterX, mArcCenterY - level * mRadiusInc);
-        final int count = items.size();
-        int pos = 0;
-        for (PieItem item : items) {
-            // shared between items
-            item.setPath(path);
-            float angle = getArcCenter(item, pos, count);
-            int w = item.getIntrinsicWidth();
-            int h = item.getIntrinsicHeight();
-            // move views to outer border
-            int r = mArcRadius + mRadiusInc * 2 / 3;
-            int x = (int) (r * Math.cos(angle));
-            int y = mArcCenterY - (level * mRadiusInc) - (int) (r * Math.sin(angle)) - h / 2;
-            x = mPieCenterX + x - w / 2;
-            item.setBounds(x, y, x + w, y + h);
-            item.setLevel(level);
-            if (item.hasItems()) {
-                layoutItems(level + 1, item.getItems());
-            }
-            pos++;
-        }
-    }
-
-    private Path makeSlice(float start, float end, int inner, int outer, int cx, int cy) {
-        RectF bb =
-                new RectF(cx - outer, cy - outer, cx + outer,
-                        cy + outer);
-        RectF bbi =
-                new RectF(cx - inner, cy - inner, cx + inner,
-                        cy + inner);
-        Path path = new Path();
-        path.arcTo(bb, start, end - start, true);
-        path.arcTo(bbi, end, start - end);
-        path.close();
-        return path;
-    }
-
-    private float getArcCenter(PieItem item, int pos, int count) {
-        return getCenter(pos, count, SWEEP_ARC);
-    }
-
-    private float getSliceCenter(PieItem item, int pos, int count) {
-        float center = (getCenterAngle() - CENTER) * 0.5f + CENTER;
-        return center + (count - 1) * SWEEP_SLICE / 2f
-                - pos * SWEEP_SLICE;
-    }
-
-    private float getCenter(int pos, int count, float sweep) {
-        return mCenterAngle + (count - 1) * sweep / 2f - pos * sweep;
-    }
-
-    private float getCenterAngle() {
-        float center = CENTER;
-        if (mPieCenterX < mDeadZone + mAngleZone) {
-            center = CENTER - (mAngleZone - mPieCenterX + mDeadZone) * RAD24
-                    / (float) mAngleZone;
-        } else if (mPieCenterX > getWidth() - mDeadZone - mAngleZone) {
-            center = CENTER + (mPieCenterX - (getWidth() - mDeadZone - mAngleZone)) * RAD24
-                    / (float) mAngleZone;
-        }
-        return center;
-    }
-
-    /**
-     * converts a
-     * @param angle from 0..PI to Android degrees (clockwise starting at 3 o'clock)
-     * @return skia angle
-     */
-    private float getDegrees(double angle) {
-        return (float) (360 - 180 * angle / Math.PI);
-    }
-
-    private void startFadeOut(final PieItem item) {
-        if (mFadeIn != null) {
-            mFadeIn.cancel();
-        }
-        if (mXFade != null) {
-            mXFade.cancel();
-        }
-        mFadeOut = new ValueAnimator();
-        mFadeOut.setFloatValues(1f, 0f);
-        mFadeOut.setDuration(PIE_FADE_OUT_DURATION);
-        mFadeOut.addListener(new AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animator) {
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animator) {
-                item.performClick();
-                mFadeOut = null;
-                deselect();
-                show(false);
-                mOverlay.setAlpha(1);
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animator) {
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animator) {
-            }
-
-        });
-        mFadeOut.start();
-    }
-
-    // root does not count
-    private boolean hasOpenItem() {
-        return mOpen.size() > 1;
-    }
-
-    // pop an item of the open item stack
-    private PieItem closeOpenItem() {
-        PieItem item = getOpenItem();
-        mOpen.remove(mOpen.size() -1);
-        return item;
-    }
-
-    private PieItem getOpenItem() {
-        return mOpen.get(mOpen.size() - 1);
-    }
-
-    // return the children either the root or parent of the current open item
-    private PieItem getParent() {
-        return mOpen.get(Math.max(0, mOpen.size() - 2));
-    }
-
-    private int getLevel() {
-        return mOpen.size() - 1;
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        float alpha = 1;
-        if (mXFade != null) {
-            alpha = (Float) mXFade.getAnimatedValue();
-        } else if (mFadeIn != null) {
-            alpha = (Float) mFadeIn.getAnimatedValue();
-        } else if (mFadeOut != null) {
-            alpha = (Float) mFadeOut.getAnimatedValue();
-        }
-        int state = canvas.save();
-        if (mFadeIn != null) {
-            float sf = 0.9f + alpha * 0.1f;
-            canvas.scale(sf, sf, mPieCenterX, mPieCenterY);
-        }
-        if (mState != STATE_PIE) {
-            drawFocus(canvas);
-        }
-        if (mState == STATE_FINISHING) {
-            canvas.restoreToCount(state);
-            return;
-        }
-        if (mState != STATE_PIE) return;
-        if (!hasOpenItem() || (mXFade != null)) {
-            // draw base menu
-            drawArc(canvas, getLevel(), getParent());
-            List<PieItem> items = getParent().getItems();
-            final int count = items.size();
-            int pos = 0;
-            for (PieItem item : getParent().getItems()) {
-                drawItem(Math.max(0, mOpen.size() - 2), pos, count, canvas, item, alpha);
-                pos++;
-            }
-            mLabel.draw(canvas);
-        }
-        if (hasOpenItem()) {
-            int level = getLevel();
-            drawArc(canvas, level, getOpenItem());
-            List<PieItem> items = getOpenItem().getItems();
-            final int count = items.size();
-            int pos = 0;
-            for (PieItem inner : items) {
-                if (mFadeOut != null) {
-                    drawItem(level, pos, count, canvas, inner, alpha);
-                } else {
-                    drawItem(level, pos, count, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1);
-                }
-                pos++;
-            }
-            mLabel.draw(canvas);
-        }
-        canvas.restoreToCount(state);
-    }
-
-    private void drawArc(Canvas canvas, int level, PieItem item) {
-        // arc
-        if (mState == STATE_PIE) {
-            final int count = item.getItems().size();
-            float start = mCenterAngle + (count * SWEEP_ARC / 2f);
-            float end =  mCenterAngle - (count * SWEEP_ARC / 2f);
-            int cy = mArcCenterY - level * mRadiusInc;
-            canvas.drawArc(new RectF(mPieCenterX - mArcRadius, cy - mArcRadius,
-                    mPieCenterX + mArcRadius, cy + mArcRadius),
-                    getDegrees(end), getDegrees(start) - getDegrees(end), false, mMenuArcPaint);
-        }
-    }
-
-    private void drawItem(int level, int pos, int count, Canvas canvas, PieItem item, float alpha) {
-        if (mState == STATE_PIE) {
-            if (item.getPath() != null) {
-                int y = mArcCenterY - level * mRadiusInc;
-                if (item.isSelected()) {
-                    Paint p = mSelectedPaint;
-                    int state = canvas.save();
-                    float angle = 0;
-                    if (mSlice != null) {
-                        angle = (Float) mSlice.getAnimatedValue();
-                    } else {
-                        angle = getArcCenter(item, pos, count) - SWEEP_ARC / 2f;
-                    }
-                    angle = getDegrees(angle);
-                    canvas.rotate(angle, mPieCenterX, y);
-                    if (mFadeOut != null) {
-                        p.setAlpha((int)(255 * alpha));
-                    }
-                    canvas.drawPath(item.getPath(), p);
-                    if (mFadeOut != null) {
-                        p.setAlpha(255);
-                    }
-                    canvas.restoreToCount(state);
-                }
-                if (mFadeOut == null) {
-                    alpha = alpha * (item.isEnabled() ? 1 : 0.3f);
-                    // draw the item view
-                    item.setAlpha(alpha);
-                }
-                item.draw(canvas);
-            }
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        float x = evt.getX();
-        float y = evt.getY();
-        int action = evt.getActionMasked();
-        getPolar(x, y, !mTapMode, mPolar);
-        if (MotionEvent.ACTION_DOWN == action) {
-            if ((x < mDeadZone) || (x > getWidth() - mDeadZone)) {
-                return false;
-            }
-            mDown.x = (int) evt.getX();
-            mDown.y = (int) evt.getY();
-            mOpening = false;
-            if (mTapMode) {
-                PieItem item = findItem(mPolar);
-                if ((item != null) && (mCurrentItem != item)) {
-                    mState = STATE_PIE;
-                    onEnter(item);
-                }
-            } else {
-                setCenter((int) x, (int) y);
-                show(true);
-            }
-            return true;
-        } else if (MotionEvent.ACTION_UP == action) {
-            if (isVisible()) {
-                PieItem item = mCurrentItem;
-                if (mTapMode) {
-                    item = findItem(mPolar);
-                    if (mOpening) {
-                        mOpening = false;
-                        return true;
-                    }
-                }
-                if (item == null) {
-                    mTapMode = false;
-                    show(false);
-                } else if (!mOpening && !item.hasItems()) {
-                        startFadeOut(item);
-                        mTapMode = false;
-                } else {
-                    mTapMode = true;
-                }
-                return true;
-            }
-        } else if (MotionEvent.ACTION_CANCEL == action) {
-            if (isVisible() || mTapMode) {
-                show(false);
-            }
-            deselect();
-            mHandler.removeMessages(MSG_OPENSUBMENU);
-            return false;
-        } else if (MotionEvent.ACTION_MOVE == action) {
-            if (pulledToCenter(mPolar)) {
-                mHandler.removeMessages(MSG_OPENSUBMENU);
-                if (hasOpenItem()) {
-                    if (mCurrentItem != null) {
-                        mCurrentItem.setSelected(false);
-                    }
-                    closeOpenItem();
-                    mCurrentItem = null;
-                } else {
-                    deselect();
-                }
-                mLabel.setText("");
-                return false;
-            }
-            PieItem item = findItem(mPolar);
-            boolean moved = hasMoved(evt);
-            if ((item != null) && (mCurrentItem != item) && (!mOpening || moved)) {
-                mHandler.removeMessages(MSG_OPENSUBMENU);
-                // only select if we didn't just open or have moved past slop
-                if (moved) {
-                    // switch back to swipe mode
-                    mTapMode = false;
-                }
-                onEnterSelect(item);
-                mHandler.sendEmptyMessageDelayed(MSG_OPENSUBMENU, PIE_OPEN_SUB_DELAY);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public boolean isVisible() {
-        return super.isVisible();
-    }
-
-    private boolean pulledToCenter(PointF polarCoords) {
-        return polarCoords.y < mArcRadius - mRadiusInc;
-    }
-
-    private boolean inside(PointF polar, PieItem item, int pos, int count) {
-        float start = getSliceCenter(item, pos, count) - SWEEP_SLICE / 2f;
-        boolean res =  (mArcRadius < polar.y)
-                && (start < polar.x)
-                && (start + SWEEP_SLICE > polar.x)
-                && (!mTapMode || (mArcRadius + mRadiusInc > polar.y));
-        return res;
-    }
-
-    private void getPolar(float x, float y, boolean useOffset, PointF res) {
-        // get angle and radius from x/y
-        res.x = (float) Math.PI / 2;
-        x = x - mPieCenterX;
-        float y1 = mSliceCenterY - getLevel() * mRadiusInc - y;
-        float y2 = mArcCenterY - getLevel() * mRadiusInc - y;
-        res.y = (float) Math.sqrt(x * x + y2 * y2);
-        if (x != 0) {
-            res.x = (float) Math.atan2(y1,  x);
-            if (res.x < 0) {
-                res.x = (float) (2 * Math.PI + res.x);
-            }
-        }
-        res.y = res.y + (useOffset ? mTouchOffset : 0);
-    }
-
-    private boolean hasMoved(MotionEvent e) {
-        return mTouchSlopSquared < (e.getX() - mDown.x) * (e.getX() - mDown.x)
-                + (e.getY() - mDown.y) * (e.getY() - mDown.y);
-    }
-
-    private void onEnterSelect(PieItem item) {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (item != null && item.isEnabled()) {
-            moveSelection(mCurrentItem, item);
-            item.setSelected(true);
-            mCurrentItem = item;
-            mLabel.setText(mCurrentItem.getLabel());
-            layoutLabel(getLevel());
-        } else {
-            mCurrentItem = null;
-        }
-    }
-
-    private void onEnterOpen() {
-        if ((mCurrentItem != null) && (mCurrentItem != getOpenItem()) && mCurrentItem.hasItems()) {
-            openCurrentItem();
-        }
-    }
-
-    /**
-     * enter a slice for a view
-     * updates model only
-     * @param item
-     */
-    private void onEnter(PieItem item) {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (item != null && item.isEnabled()) {
-            item.setSelected(true);
-            mCurrentItem = item;
-            mLabel.setText(mCurrentItem.getLabel());
-            if ((mCurrentItem != getOpenItem()) && mCurrentItem.hasItems()) {
-                openCurrentItem();
-                layoutLabel(getLevel());
-            }
-        } else {
-            mCurrentItem = null;
-        }
-    }
-
-    private void deselect() {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (hasOpenItem()) {
-            PieItem item = closeOpenItem();
-            onEnter(item);
-        } else {
-            mCurrentItem = null;
-        }
-    }
-
-    private int getItemPos(PieItem target) {
-        List<PieItem> items = getOpenItem().getItems();
-        return items.indexOf(target);
-    }
-
-    private int getCurrentCount() {
-        return getOpenItem().getItems().size();
-    }
-
-    private void moveSelection(PieItem from, PieItem to) {
-        final int count = getCurrentCount();
-        final int fromPos = getItemPos(from);
-        final int toPos = getItemPos(to);
-        if (fromPos != -1 && toPos != -1) {
-            float startAngle = getArcCenter(from, getItemPos(from), count)
-                    - SWEEP_ARC / 2f;
-            float endAngle = getArcCenter(to, getItemPos(to), count)
-                    - SWEEP_ARC / 2f;
-            mSlice = new ValueAnimator();
-            mSlice.setFloatValues(startAngle, endAngle);
-            // linear interpolater
-            mSlice.setInterpolator(null);
-            mSlice.setDuration(PIE_SLICE_DURATION);
-            mSlice.addListener(new AnimatorListener() {
-                @Override
-                public void onAnimationEnd(Animator arg0) {
-                    mSlice = null;
-                }
-
-                @Override
-                public void onAnimationRepeat(Animator arg0) {
-                }
-
-                @Override
-                public void onAnimationStart(Animator arg0) {
-                }
-
-                @Override
-                public void onAnimationCancel(Animator arg0) {
-                }
-            });
-            mSlice.start();
-        }
-    }
-
-    private void openCurrentItem() {
-        if ((mCurrentItem != null) && mCurrentItem.hasItems()) {
-            mOpen.add(mCurrentItem);
-            layoutLabel(getLevel());
-            mOpening = true;
-            if (mFadeIn != null) {
-                mFadeIn.cancel();
-            }
-            mXFade = new ValueAnimator();
-            mXFade.setFloatValues(1f, 0f);
-            mXFade.setDuration(PIE_XFADE_DURATION);
-            // Linear interpolation
-            mXFade.setInterpolator(null);
-            final PieItem ci = mCurrentItem;
-            mXFade.addListener(new AnimatorListener() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mXFade = null;
-                    ci.setSelected(false);
-                    mOpening = false;
-                }
-
-                @Override
-                public void onAnimationRepeat(Animator animation) {
-                }
-
-                @Override
-                public void onAnimationCancel(Animator arg0) {
-                }
-            });
-            mXFade.start();
-        }
-    }
-
-    /**
-     * @param polar x: angle, y: dist
-     * @return the item at angle/dist or null
-     */
-    private PieItem findItem(PointF polar) {
-        // find the matching item:
-        List<PieItem> items = getOpenItem().getItems();
-        final int count = items.size();
-        int pos = 0;
-        for (PieItem item : items) {
-            if (inside(polar, item, pos, count)) {
-                return item;
-            }
-            pos++;
-        }
-        return null;
-    }
-
-
-    @Override
-    public boolean handlesTouch() {
-        return true;
-    }
-
-    // focus specific code
-
-    public void setBlockFocus(boolean blocked) {
-        mBlockFocus = blocked;
-        if (blocked) {
-            clear();
-        }
-    }
-
-    public void setFocus(int x, int y) {
-        mOverlay.removeCallbacks(mDisappear);
-        mFocusX = x;
-        mFocusY = y;
-        setCircle(mFocusX, mFocusY);
-    }
-
-    public int getSize() {
-        return 2 * mCircleSize;
-    }
-
-    private int getRandomRange() {
-        return (int)(-60 + 120 * Math.random());
-    }
-
-    private void setCircle(int cx, int cy) {
-        mCircle.set(cx - mCircleSize, cy - mCircleSize,
-                cx + mCircleSize, cy + mCircleSize);
-        mDial.set(cx - mCircleSize + mInnerOffset, cy - mCircleSize + mInnerOffset,
-                cx + mCircleSize - mInnerOffset, cy + mCircleSize - mInnerOffset);
-    }
-
-    public void drawFocus(Canvas canvas) {
-        if (mBlockFocus) return;
-        mFocusPaint.setStrokeWidth(mOuterStroke);
-        canvas.drawCircle((float) mFocusX, (float) mFocusY, (float) mCircleSize, mFocusPaint);
-        if (mState == STATE_PIE) return;
-        int color = mFocusPaint.getColor();
-        if (mState == STATE_FINISHING) {
-            mFocusPaint.setColor(mFocused ? mSuccessColor : mFailColor);
-        }
-        mFocusPaint.setStrokeWidth(mInnerStroke);
-        drawLine(canvas, mDialAngle, mFocusPaint);
-        drawLine(canvas, mDialAngle + 45, mFocusPaint);
-        drawLine(canvas, mDialAngle + 180, mFocusPaint);
-        drawLine(canvas, mDialAngle + 225, mFocusPaint);
-        canvas.save();
-        // rotate the arc instead of its offset to better use framework's shape caching
-        canvas.rotate(mDialAngle, mFocusX, mFocusY);
-        canvas.drawArc(mDial, 0, 45, false, mFocusPaint);
-        canvas.drawArc(mDial, 180, 45, false, mFocusPaint);
-        canvas.restore();
-        mFocusPaint.setColor(color);
-    }
-
-    private void drawLine(Canvas canvas, int angle, Paint p) {
-        convertCart(angle, mCircleSize - mInnerOffset, mPoint1);
-        convertCart(angle, mCircleSize - mInnerOffset + mInnerOffset / 3, mPoint2);
-        canvas.drawLine(mPoint1.x + mFocusX, mPoint1.y + mFocusY,
-                mPoint2.x + mFocusX, mPoint2.y + mFocusY, p);
-    }
-
-    private static void convertCart(int angle, int radius, Point out) {
-        double a = 2 * Math.PI * (angle % 360) / 360;
-        out.x = (int) (radius * Math.cos(a) + 0.5);
-        out.y = (int) (radius * Math.sin(a) + 0.5);
-    }
-
-    @Override
-    public void showStart() {
-        if (mState == STATE_PIE) return;
-        cancelFocus();
-        mStartAnimationAngle = 67;
-        int range = getRandomRange();
-        startAnimation(SCALING_UP_TIME,
-                false, mStartAnimationAngle, mStartAnimationAngle + range);
-        mState = STATE_FOCUSING;
-    }
-
-    @Override
-    public void showSuccess(boolean timeout) {
-        if (mState == STATE_FOCUSING) {
-            startAnimation(SCALING_DOWN_TIME,
-                    timeout, mStartAnimationAngle);
-            mState = STATE_FINISHING;
-            mFocused = true;
-        }
-    }
-
-    @Override
-    public void showFail(boolean timeout) {
-        if (mState == STATE_FOCUSING) {
-            startAnimation(SCALING_DOWN_TIME,
-                    timeout, mStartAnimationAngle);
-            mState = STATE_FINISHING;
-            mFocused = false;
-        }
-    }
-
-    private void cancelFocus() {
-        mFocusCancelled = true;
-        mOverlay.removeCallbacks(mDisappear);
-        if (mAnimation != null && !mAnimation.hasEnded()) {
-            mAnimation.cancel();
-        }
-        mFocusCancelled = false;
-        mFocused = false;
-        mState = STATE_IDLE;
-    }
-
-    public void clear(boolean waitUntilProgressIsHidden) {
-        if (mState == STATE_PIE)
-            return;
-        cancelFocus();
-        mOverlay.post(mDisappear);
-    }
-
-    @Override
-    public void clear() {
-        clear(false);
-    }
-
-    private void startAnimation(long duration, boolean timeout,
-            float toScale) {
-        startAnimation(duration, timeout, mDialAngle,
-                toScale);
-    }
-
-    private void startAnimation(long duration, boolean timeout,
-            float fromScale, float toScale) {
-        setVisible(true);
-        mAnimation.reset();
-        mAnimation.setDuration(duration);
-        mAnimation.setScale(fromScale, toScale);
-        mAnimation.setAnimationListener(timeout ? mEndAction : null);
-        mOverlay.startAnimation(mAnimation);
-        update();
-    }
-
-    private class EndAction implements Animation.AnimationListener {
-        @Override
-        public void onAnimationEnd(Animation animation) {
-            // Keep the focus indicator for some time.
-            if (!mFocusCancelled && mOverlay != null) {
-                mOverlay.postDelayed(mDisappear, DISAPPEAR_TIMEOUT);
-            }
-        }
-
-        @Override
-        public void onAnimationRepeat(Animation animation) {
-        }
-
-        @Override
-        public void onAnimationStart(Animation animation) {
-        }
-    }
-
-    private class Disappear implements Runnable {
-        @Override
-        public void run() {
-            if (mState == STATE_PIE) return;
-            setVisible(false);
-            mFocusX = mCenterX;
-            mFocusY = mCenterY;
-            mState = STATE_IDLE;
-            setCircle(mFocusX, mFocusY);
-            mFocused = false;
-        }
-    }
-
-    private class ScaleAnimation extends Animation {
-        private float mFrom = 1f;
-        private float mTo = 1f;
-
-        public ScaleAnimation() {
-            setFillAfter(true);
-        }
-
-        public void setScale(float from, float to) {
-            mFrom = from;
-            mTo = to;
-        }
-
-        @Override
-        protected void applyTransformation(float interpolatedTime, Transformation t) {
-            mDialAngle = (int)(mFrom + (mTo - mFrom) * interpolatedTime);
-        }
-    }
-
-}
index 2a29a64..3ccc758 100644 (file)
@@ -22,6 +22,7 @@ import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.RectF;
+import android.os.SystemClock;
 import android.util.AttributeSet;
 import android.view.GestureDetector;
 import android.view.MotionEvent;
@@ -48,10 +49,15 @@ import java.util.List;
 public class PreviewOverlay extends View
     implements PreviewStatusListener.PreviewAreaChangedListener {
 
+    public static final float ZOOM_MIN_RATIO = 1.0f;
+
     private static final Log.Tag TAG = new Log.Tag("PreviewOverlay");
 
-    public static final int ZOOM_MIN_FACTOR = 100;
+    /** Minimum time between calls to zoom listener. */
+    private static final long ZOOM_MINIMUM_WAIT_MILLIS = 33;
 
+    /** Next time zoom change should be sent to listener. */
+    private long mDelayZoomCallUntilMillis = 0;
     private final ZoomGestureDetector mScaleDetector;
     private final ZoomProcessor mZoomProcessor = new ZoomProcessor();
     private GestureDetector mGestureDetector = null;
@@ -73,9 +79,9 @@ public class PreviewOverlay extends View
         /**
          * This gets called when scale gesture changes the zoom value.
          *
-         * @param index index of the list of supported zoom ratios
+         * @param ratio zoom ratio, [1.0f,maximum]
          */
-        void onZoomValueChanged(int index);  // only for immediate zoom
+        void onZoomValueChanged(float ratio);  // only for immediate zoom
     }
 
     public interface OnPreviewTouchedListener {
@@ -91,31 +97,17 @@ public class PreviewOverlay extends View
     }
 
     /**
-     * This sets up the zoom listener and zoom related parameters.
-     *
-     * @param zoomMax max zoom index
-     * @param zoom current zoom index
-     * @param zoomRatios a list of zoom ratios
-     * @param zoomChangeListener a listener that receives callbacks when zoom changes
-     */
-    public void setupZoom(int zoomMax, int zoom, List<Integer> zoomRatios,
-                          OnZoomChangedListener zoomChangeListener) {
-        mZoomListener = zoomChangeListener;
-        mZoomProcessor.setupZoom(zoomMax, zoom, zoomRatios);
-    }
-
-    /**
      * This sets up the zoom listener and zoom related parameters when
      * the range of zoom ratios is continuous.
      *
-     * @param zoomMaxRatio max zoom ratio
-     * @param zoom current zoom index
+     * @param zoomMaxRatio max zoom ratio, [1.0f,+Inf)
+     * @param zoom current zoom ratio, [1.0f,zoomMaxRatio]
      * @param zoomChangeListener a listener that receives callbacks when zoom changes
      */
-    public void setupZoom(float zoomMaxRatio, int zoom, OnZoomChangedListener zoomChangeListener) {
+    public void setupZoom(float zoomMaxRatio, float zoom,
+                          OnZoomChangedListener zoomChangeListener) {
         mZoomListener = zoomChangeListener;
-        int zoomMax = ((int) zoomMaxRatio * 100) - ZOOM_MIN_FACTOR;
-        mZoomProcessor.setupZoom(zoomMax, zoom, null);
+        mZoomProcessor.setupZoom(zoomMaxRatio, zoom);
     }
 
     @Override
@@ -206,15 +198,6 @@ public class PreviewOverlay extends View
                 if (ev.getPointerCount() > 1) {
                     mDeltaX = ev.getX(1) - ev.getX(0);
                     mDeltaY = ev.getY(1) - ev.getY(0);
-                    if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
-                        if (!mZoomProcessor.isVisible()) {
-                            mZoomProcessor.showZoomUI();
-                        }
-                    } else if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP) {
-                        if (mZoomProcessor.isVisible()) {
-                            mZoomProcessor.hideZoomUI();
-                        }
-                    }
                 }
                 return handled;
             }
@@ -240,12 +223,10 @@ public class PreviewOverlay extends View
         // Diameter of Zoom UI donut hole as fraction of Zoom UI diameter.
         private static final float ZOOM_UI_DONUT = 0.25f;
 
-        final private int mMinIndex = 0;
-        private int mMaxIndex;
-        // Discrete Zoom level [mMinIndex,mMaxIndex].
-        private int mCurrentIndex;
+        private final float mMinRatio = 1.0f;
+        private float mMaxRatio;
         // Continuous Zoom level [0,1].
-        private float mCurrentFraction;
+        private float mCurrentRatio;
         private double mFingerAngle;  // in radians.
         private final Paint mPaint;
         private int mCenterX;
@@ -267,19 +248,14 @@ public class PreviewOverlay extends View
             mPaint.setStrokeCap(Paint.Cap.ROUND);
         }
 
-        // Set maximum Zoom Index from Module.
-        public void setZoomMax(int zoomMaxIndex) {
-            mMaxIndex = zoomMaxIndex;
-        }
-
-        // Set current Zoom Index from Module.
-        public void setZoom(int index) {
-            mCurrentIndex = index;
-            mCurrentFraction = (float) index / (mMaxIndex - mMinIndex);
+        // Set maximum zoom ratio from Module.
+        public void setZoomMax(float zoomMaxRatio) {
+            mMaxRatio = zoomMaxRatio;
         }
 
-        public void setZoomValue(int value) {
-            // Do nothing because we are not display text value in current UI.
+        // Set current zoom ratio from Module.
+        public void setZoom(float ratio) {
+            mCurrentRatio = ratio;
         }
 
         public void layout(int l, int t, int r, int b) {
@@ -308,7 +284,8 @@ public class PreviewOverlay extends View
                     mCenterY + mOuterRadius * (float) Math.sin(mFingerAngle), mPaint);
             // Draw Zoom progress.
             mPaint.setAlpha(255);
-            float zoomRadius = mInnerRadius + mCurrentFraction * (mOuterRadius - mInnerRadius);
+            float fillRatio = (mCurrentRatio - mMinRatio) / (mMaxRatio - mMinRatio);
+            float zoomRadius = mInnerRadius + fillRatio * (mOuterRadius - mInnerRadius);
             canvas.drawLine(mCenterX + mInnerRadius * (float) Math.cos(mFingerAngle),
                     mCenterY - mInnerRadius * (float) Math.sin(mFingerAngle),
                     mCenterX + zoomRadius * (float) Math.cos(mFingerAngle),
@@ -322,13 +299,25 @@ public class PreviewOverlay extends View
         @Override
         public boolean onScale(ScaleGestureDetector detector) {
             final float sf = detector.getScaleFactor();
-            mCurrentFraction = (0.33f + mCurrentFraction) * sf * sf - 0.33f;
-            if (mCurrentFraction < 0.0f) mCurrentFraction = 0.0f;
-            if (mCurrentFraction > 1.0f) mCurrentFraction = 1.0f;
-            int newIndex = mMinIndex + (int) (mCurrentFraction * (mMaxIndex - mMinIndex));
-            if (mZoomListener != null && newIndex != mCurrentIndex) {
-                mZoomListener.onZoomValueChanged(newIndex);
-                mCurrentIndex = newIndex;
+            mCurrentRatio = (0.33f + mCurrentRatio) * sf * sf - 0.33f;
+            if (mCurrentRatio < mMinRatio) {
+                mCurrentRatio = mMinRatio;
+            }
+            if (mCurrentRatio > mMaxRatio) {
+                mCurrentRatio = mMaxRatio;
+            }
+
+            // Only call the listener with a certain frequency. This is
+            // necessary because these listeners will make repeated
+            // applySettings() calls into the portability layer, and doing this
+            // too often can back up its handler and result in visible lag in
+            // updating the zoom level and other controls.
+            long now = SystemClock.uptimeMillis();
+            if (now > mDelayZoomCallUntilMillis) {
+                if (mZoomListener != null) {
+                    mZoomListener.onZoomValueChanged(mCurrentRatio);
+                }
+                mDelayZoomCallUntilMillis = now + ZOOM_MINIMUM_WAIT_MILLIS;
             }
             mFingerAngle = mScaleDetector.getAngle();
             invalidate();
@@ -337,10 +326,10 @@ public class PreviewOverlay extends View
 
         @Override
         public boolean onScaleBegin(ScaleGestureDetector detector) {
+            mZoomProcessor.showZoomUI();
             if (mZoomListener == null) {
                 return false;
             }
-            mVisible = true;
             if (mZoomListener != null) {
                 mZoomListener.onZoomStart();
             }
@@ -351,7 +340,7 @@ public class PreviewOverlay extends View
 
         @Override
         public void onScaleEnd(ScaleGestureDetector detector) {
-            mVisible = false;
+            mZoomProcessor.hideZoomUI();
             if (mZoomListener != null) {
                 mZoomListener.onZoomEnd();
             }
@@ -379,8 +368,7 @@ public class PreviewOverlay extends View
             invalidate();
         }
 
-        private void setupZoom(int zoomMax, int zoom, List<Integer> zoomRatios) {
-            mZoomRatios = zoomRatios;
+        private void setupZoom(float zoomMax, float zoom) {
             setZoomMax(zoomMax);
             setZoom(zoom);
         }
diff --git a/src/com/android/camera/ui/RenderOverlay.java b/src/com/android/camera/ui/RenderOverlay.java
deleted file mode 100644 (file)
index 8daf819..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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.ui;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import com.android.camera.PreviewGestures;
-import com.android.camera.debug.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class RenderOverlay extends FrameLayout {
-
-    private static final Log.Tag TAG = new Log.Tag("RenderOverlay");
-    private PreviewGestures.SingleTapListener mTapListener;
-
-    interface Renderer {
-
-        public boolean handlesTouch();
-        public boolean onTouchEvent(MotionEvent evt);
-        public void setOverlay(RenderOverlay overlay);
-        public void layout(int left, int top, int right, int bottom);
-        public void draw(Canvas canvas);
-
-    }
-
-    private final RenderView mRenderView;
-    private final List<Renderer> mClients;
-    private PreviewGestures mGestures;
-    // reverse list of touch clients
-    private final List<Renderer> mTouchClients;
-    private final int[] mPosition = new int[2];
-
-    public RenderOverlay(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mRenderView = new RenderView(context);
-        addView(mRenderView, new LayoutParams(LayoutParams.MATCH_PARENT,
-                LayoutParams.MATCH_PARENT));
-        mClients = new ArrayList<Renderer>(10);
-        mTouchClients = new ArrayList<Renderer>(10);
-        setWillNotDraw(false);
-    }
-
-    public void setGestures(PreviewGestures gestures) {
-        mGestures = gestures;
-    }
-
-    public void addRenderer(Renderer renderer) {
-        mClients.add(renderer);
-        renderer.setOverlay(this);
-        if (renderer.handlesTouch()) {
-            mTouchClients.add(0, renderer);
-        }
-        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
-    }
-
-    public void addRenderer(int pos, Renderer renderer) {
-        mClients.add(pos, renderer);
-        renderer.setOverlay(this);
-        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
-    }
-
-    public void remove(Renderer renderer) {
-        mClients.remove(renderer);
-        renderer.setOverlay(null);
-    }
-
-    public int getClientSize() {
-        return mClients.size();
-    }
-
-    // TODO: Remove this when refactor is done. This is only here temporarily
-    // to keep pie working before it's replaced with bottom bar.
-    public void directTouchEventsToPie(MotionEvent ev) {
-        PieRenderer pie = null;
-        for (int i = 0; i < mClients.size(); i++) {
-            if (mClients.get(i) instanceof PieRenderer) {
-                pie = (PieRenderer) mClients.get(i);
-                break;
-            }
-        }
-        if (pie!= null && pie.isOpen()) {
-            pie.onTouchEvent(ev);
-        } else {
-            if (mTapListener != null && ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
-                mTapListener.onSingleTapUp(null, ((int) ev.getX()), ((int) ev.getY()));
-            }
-        }
-    }
-
-    // TODO: Remove this when refactor is done. This is only here temporarily
-    // to keep pie working before it's replaced with bottom bar.
-    public void clear() {
-        mGestures = null;
-        while (mClients.size() > 0) {
-            remove(mClients.get(0));
-        }
-        mTouchClients.clear();
-        mTapListener = null;
-    }
-
-    // TODO: Design a touch flow for each module to handle the leftover touch
-    // events from the app
-    public void setTapListener(PreviewGestures.SingleTapListener listener) {
-        mTapListener = listener;
-    }
-
-
-    // Only Gcam is using this right now, which is only using the pie
-    // menu for the capture progress.
-    // TODO: migrate all modes to PreviewOverlay.
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (mTapListener != null && ev.getActionMasked() == MotionEvent.ACTION_UP) {
-            mTapListener.onSingleTapUp(null, ((int) ev.getX()), ((int) ev.getY()));
-        }
-        return true;
-    }
-
-    public boolean directDispatchTouch(MotionEvent m, Renderer target) {
-        mRenderView.setTouchTarget(target);
-        boolean res = mRenderView.dispatchTouchEvent(m);
-        mRenderView.setTouchTarget(null);
-        return res;
-    }
-
-    private void adjustPosition() {
-        getLocationInWindow(mPosition);
-    }
-
-    public int getWindowPositionX() {
-        return mPosition[0];
-    }
-
-    public int getWindowPositionY() {
-        return mPosition[1];
-    }
-
-    public void update() {
-        mRenderView.invalidate();
-    }
-
-    private class RenderView extends View {
-
-        private Renderer mTouchTarget;
-
-        public RenderView(Context context) {
-            super(context);
-            setWillNotDraw(false);
-        }
-
-        public void setTouchTarget(Renderer target) {
-            mTouchTarget = target;
-        }
-
-        @Override
-        public boolean dispatchTouchEvent(MotionEvent evt) {
-            if (mGestures == null) {
-                return false;
-            }
-
-            if (mTouchTarget != null) {
-                return mTouchTarget.onTouchEvent(evt);
-            }
-            if (mTouchClients != null) {
-                boolean res = false;
-                for (Renderer client : mTouchClients) {
-                    res |= client.onTouchEvent(evt);
-                }
-                return res;
-            }
-            return false;
-        }
-
-        @Override
-        public void onLayout(boolean changed, int left, int top, int right, int bottom) {
-            adjustPosition();
-            super.onLayout(changed, left,  top, right, bottom);
-            if (mClients == null) return;
-            for (Renderer renderer : mClients) {
-                renderer.layout(left, top, right, bottom);
-            }
-        }
-
-        @Override
-        public void draw(Canvas canvas) {
-            super.draw(canvas);
-            if (mClients == null) return;
-            boolean redraw = false;
-            for (Renderer renderer : mClients) {
-                renderer.draw(canvas);
-                redraw = redraw || ((OverlayRenderer) renderer).isVisible();
-            }
-            if (redraw) {
-                invalidate();
-            }
-        }
-    }
-
-}
diff --git a/src/com/android/camera/ui/ZoomRenderer.java b/src/com/android/camera/ui/ZoomRenderer.java
deleted file mode 100644 (file)
index 2b997b2..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.view.ScaleGestureDetector;
-
-import com.android.camera.debug.Log;
-import com.android.camera2.R;
-
-// TODO: remove this; functionality has been moved to PreviewOverlay.
-@Deprecated
-public class ZoomRenderer extends OverlayRenderer
-        implements ScaleGestureDetector.OnScaleGestureListener {
-
-    private static final Log.Tag TAG = new Log.Tag("ZoomRenderer");
-
-    final private int mMinIndex = 0;
-    private int mMaxIndex;
-    // Discrete Zoom level [mMinIndex,mMaxIndex].
-    private int mCurrentIndex;
-    // Continuous Zoom level [0,1].
-    private float mCurrentFraction;
-    private double mFingerRadians;
-    private OnZoomChangedListener mListener;
-    private final ScaleGestureDetector mDetector;
-    private final Paint mPaint;
-    private int mCenterX;
-    private int mCenterY;
-    private float mOuterRadius;
-    private float mInnerRadius;
-    private final int mZoomStroke;
-
-    public interface OnZoomChangedListener {
-        void onZoomStart();
-        void onZoomEnd();
-        void onZoomValueChanged(int index);
-    }
-
-    public ZoomRenderer(Context ctx) {
-        Resources res = ctx.getResources();
-        mZoomStroke = res.getDimensionPixelSize(R.dimen.zoom_stroke);
-        mPaint = new Paint();
-        mPaint.setAntiAlias(true);
-        mPaint.setColor(Color.WHITE);
-        mPaint.setStyle(Paint.Style.STROKE);
-        mPaint.setStrokeWidth(mZoomStroke);
-        mPaint.setStrokeCap(Paint.Cap.ROUND);
-        mDetector = new ScaleGestureDetector(ctx, this);
-        setVisible(false);
-    }
-
-    // Set maximum Zoom Index from Module.
-    public void setZoomMax(int zoomMaxIndex) {
-        mMaxIndex = zoomMaxIndex;
-    }
-
-    // Set current Zoom Index from Module.
-    public void setZoom(int index) {
-        mCurrentIndex = index;
-        mCurrentFraction = (float) index / (mMaxIndex - mMinIndex);
-    }
-
-    // Set Zoom Value to display from Module.
-    public void setZoomValue(int centiValue) {
-        // Do nothing.
-    }
-
-    public void setOnZoomChangeListener(OnZoomChangedListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void layout(int l, int t, int r, int b) {
-        super.layout(l, t, r, b);
-        mCenterX = (r - l) / 2;
-        mCenterY = (b - t) / 2;
-        // UI will extend from 20% to 80% of maximum inset circle.
-        float insetCircleRadius = Math.min(getWidth(), getHeight());
-        mInnerRadius = insetCircleRadius * 0.12f;
-        mOuterRadius = insetCircleRadius * 0.38f;
-    }
-
-    public boolean isScaling() {
-        return mDetector.isInProgress();
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        // Draw background.
-        mPaint.setAlpha(70);
-        canvas.drawLine(mCenterX + mInnerRadius * (float) Math.cos(mFingerRadians),
-                mCenterY - mInnerRadius * (float) Math.sin(mFingerRadians),
-                mCenterX + mOuterRadius * (float) Math.cos(mFingerRadians),
-                mCenterY - mOuterRadius * (float) Math.sin(mFingerRadians), mPaint);
-        canvas.drawLine(mCenterX - mInnerRadius * (float) Math.cos(mFingerRadians),
-                mCenterY + mInnerRadius * (float) Math.sin(mFingerRadians),
-                mCenterX - mOuterRadius * (float) Math.cos(mFingerRadians),
-                mCenterY + mOuterRadius * (float) Math.sin(mFingerRadians), mPaint);
-        // Draw Zoom progress.
-        mPaint.setAlpha(255);
-        float zoomRadius = mInnerRadius + mCurrentFraction * (mOuterRadius - mInnerRadius);
-        canvas.drawLine(mCenterX + mInnerRadius * (float) Math.cos(mFingerRadians),
-                mCenterY - mInnerRadius * (float) Math.sin(mFingerRadians),
-                mCenterX + zoomRadius * (float) Math.cos(mFingerRadians),
-                mCenterY - zoomRadius * (float) Math.sin(mFingerRadians), mPaint);
-        canvas.drawLine(mCenterX - mInnerRadius * (float) Math.cos(mFingerRadians),
-                mCenterY + mInnerRadius * (float) Math.sin(mFingerRadians),
-                mCenterX - zoomRadius * (float) Math.cos(mFingerRadians),
-                mCenterY + zoomRadius * (float) Math.sin(mFingerRadians), mPaint);
-    }
-
-    @Override
-    public boolean onScale(ScaleGestureDetector detector) {
-        final float sf = detector.getScaleFactor();
-        mCurrentFraction = (0.33f + mCurrentFraction) * sf * sf - 0.33f;
-        if (mCurrentFraction < 0.0f) mCurrentFraction = 0.0f;
-        if (mCurrentFraction > 1.0f) mCurrentFraction = 1.0f;
-        int newIndex = mMinIndex + (int) (mCurrentFraction * (mMaxIndex - mMinIndex));
-        if (mListener != null && newIndex != mCurrentIndex) {
-            mListener.onZoomValueChanged(newIndex);
-            mCurrentIndex = newIndex;
-        }
-        // mFingerRadians is currently constrained to [0,Pi/2].
-        // TODO: Get actual touch coordinates to enable full [0,Pi] range.
-        mFingerRadians = Math.atan2(detector.getCurrentSpanY(),detector.getCurrentSpanX());
-        return true;
-    }
-
-    @Override
-    public boolean onScaleBegin(ScaleGestureDetector detector) {
-        setVisible(true);
-        if (mListener != null) {
-            mListener.onZoomStart();
-        }
-        update();
-        return true;
-    }
-
-    @Override
-    public void onScaleEnd(ScaleGestureDetector detector) {
-        setVisible(false);
-        if (mListener != null) {
-            mListener.onZoomEnd();
-        }
-    }
-
-}
index cde0049..90ac91b 100644 (file)
@@ -73,7 +73,7 @@ public class ZoomView extends ImageView {
             try {
                 isForDimensions.close();
             } catch (IOException e) {
-                e.printStackTrace();
+                Log.e(TAG, "exception closing dimensions inputstream", e);
             }
             if (imageSize == null) {
                 return null;
@@ -125,7 +125,6 @@ public class ZoomView extends ImageView {
             }
 
             BitmapFactory.Options options = new BitmapFactory.Options();
-
             if ((mOrientation + 360) % 180 == 0) {
                 options.inSampleSize = getSampleFactor(region.width(), region.height());
             } else {
index f557696..7f6f59c 100644 (file)
@@ -42,6 +42,7 @@ public class ApiHelper {
             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
 
     public static final boolean HAS_CAMERA_HDR_PLUS = isKitKatOrHigher();
+    public static final boolean HDR_PLUS_CAN_USE_ARBITRARY_ASPECT_RATIOS = isKitKatMR2OrHigher();
     public static final boolean HAS_CAMERA_HDR =
             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
     public static final boolean HAS_DISPLAY_LISTENER =
@@ -54,7 +55,17 @@ public class ApiHelper {
 
     public static final boolean HAS_HIDEYBARS = isKitKatOrHigher();
 
-    public static final boolean IS_NEXUS_5 = Build.DEVICE.equals("hammerhead");
+    public static final boolean IS_NEXUS_4 = "mako".equalsIgnoreCase(Build.DEVICE);
+    public static final boolean IS_NEXUS_5 = "LGE".equalsIgnoreCase(Build.MANUFACTURER)
+            && "hammerhead".equalsIgnoreCase(Build.DEVICE);
+    public static final boolean IS_NEXUS_6 = "motorola".equalsIgnoreCase(Build.MANUFACTURER)
+            && "shamu".equalsIgnoreCase(Build.DEVICE);
+    public static final boolean IS_NEXUS_9 = "htc".equalsIgnoreCase(Build.MANUFACTURER)
+            && ("flounder".equalsIgnoreCase(Build.DEVICE)
+                 || "flounder_lte".equalsIgnoreCase(Build.DEVICE));
+    public static final boolean IS_HTC = "htc".equalsIgnoreCase(Build.MANUFACTURER);
+
+    public static final boolean HAS_CAMERA_2_API = isLOrHigher();
 
     public static int getIntFieldIfExists(Class<?> klass, String fieldName,
             Class<?> obj, int defaultVal) {
@@ -71,4 +82,15 @@ public class ApiHelper {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
                 || "KeyLimePie".equals(Build.VERSION.CODENAME);
     }
+
+    public static boolean isKitKatMR2OrHigher() {
+        return isLOrHigher()
+                || (isKitKatOrHigher() &&
+                       ("4.4.4".equals(Build.VERSION.RELEASE) || "4.4.3".equals(Build.VERSION.RELEASE)));
+    }
+
+    public static boolean isLOrHigher() {
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
+                || "L".equals(Build.VERSION.CODENAME);
+    }
 }
index af3dab9..d6237a9 100644 (file)
@@ -30,6 +30,7 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
 import android.graphics.Point;
+import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.hardware.camera2.CameraCharacteristics;
@@ -39,7 +40,6 @@ import android.net.Uri;
 import android.os.ParcelFileDescriptor;
 import android.telephony.TelephonyManager;
 import android.util.DisplayMetrics;
-import android.util.FloatMath;
 import android.util.TypedValue;
 import android.view.Display;
 import android.view.OrientationEventListener;
@@ -57,7 +57,6 @@ import com.android.camera.filmstrip.ImageData;
 import com.android.camera2.R;
 import com.android.ex.camera2.portability.CameraCapabilities;
 import com.android.ex.camera2.portability.CameraSettings;
-import com.android.ex.camera2.portability.Size;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -81,22 +80,30 @@ public class CameraUtil {
     public static final String KEY_RETURN_DATA = "return-data";
     public static final String KEY_SHOW_WHEN_LOCKED = "showWhenLocked";
 
-    // Orientation hysteresis amount used in rounding, in degrees
+    /** Orientation hysteresis amount used in rounding, in degrees. */
     public static final int ORIENTATION_HYSTERESIS = 5;
 
     public static final String REVIEW_ACTION = "com.android.camera.action.REVIEW";
-    // See android.hardware.Camera.ACTION_NEW_PICTURE.
+    /** See android.hardware.Camera.ACTION_NEW_PICTURE. */
     public static final String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE";
-    // See android.hardware.Camera.ACTION_NEW_VIDEO.
+    /** See android.hardware.Camera.ACTION_NEW_VIDEO. */
     public static final String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO";
 
-    // Broadcast Action: The camera application has become active in picture-taking mode.
+    /**
+     * Broadcast Action: The camera application has become active in
+     * picture-taking mode.
+     */
     public static final String ACTION_CAMERA_STARTED = "com.android.camera.action.CAMERA_STARTED";
-    // Broadcast Action: The camera application is no longer in active picture-taking mode.
+    /**
+     * Broadcast Action: The camera application is no longer in active
+     * picture-taking mode.
+     */
     public static final String ACTION_CAMERA_STOPPED = "com.android.camera.action.CAMERA_STOPPED";
-    // When the camera application is active in picture-taking mode, it listens for this intent,
-    // which upon receipt will trigger the shutter to capture a new picture, as if the user had
-    // pressed the shutter button.
+    /**
+     * When the camera application is active in picture-taking mode, it listens
+     * for this intent, which upon receipt will trigger the shutter to capture a
+     * new picture, as if the user had pressed the shutter button.
+     */
     public static final String ACTION_CAMERA_SHUTTER_CLICK =
             "com.android.camera.action.SHUTTER_CLICK";
 
@@ -107,7 +114,7 @@ public class CameraUtil {
     /** Has to be in sync with the receiving MovieActivity. */
     public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back";
 
-    // Private intent extras. Test only.
+    /** Private intent extras. Test only. */
     private static final String EXTRAS_CAMERA_FACING =
             "android.intent.extras.CAMERA_FACING";
 
@@ -131,14 +138,18 @@ public class CameraUtil {
         return Math.round(sPixelDensity * dp);
     }
 
-    // Rotates the bitmap by the specified degree.
-    // If a new bitmap is created, the original bitmap is recycled.
+    /**
+     * Rotates the bitmap by the specified degree. If a new bitmap is created,
+     * the original bitmap is recycled.
+     */
     public static Bitmap rotate(Bitmap b, int degrees) {
         return rotateAndMirror(b, degrees, false);
     }
 
-    // Rotates and/or mirrors the bitmap. If a new bitmap is created, the
-    // original bitmap is recycled.
+    /**
+     * Rotates and/or mirrors the bitmap. If a new bitmap is created, the
+     * original bitmap is recycled.
+     */
     public static Bitmap rotateAndMirror(Bitmap b, int degrees, boolean mirror) {
         if ((degrees != 0 || mirror) && b != null) {
             Matrix m = new Matrix();
@@ -175,29 +186,26 @@ public class CameraUtil {
         return b;
     }
 
-    /*
-     * Compute the sample size as a function of minSideLength
-     * and maxNumOfPixels.
-     * minSideLength is used to specify that minimal width or height of a
-     * bitmap.
-     * maxNumOfPixels is used to specify the maximal size in pixels that is
-     * tolerable in terms of memory usage.
-     *
-     * The function returns a sample size based on the constraints.
-     * Both size and minSideLength can be passed in as -1
-     * which indicates no care of the corresponding constraint.
-     * The functions prefers returning a sample size that
-     * generates a smaller bitmap, unless minSideLength = -1.
-     *
+    /**
+     * Compute the sample size as a function of minSideLength and
+     * maxNumOfPixels. minSideLength is used to specify that minimal width or
+     * height of a bitmap. maxNumOfPixels is used to specify the maximal size in
+     * pixels that is tolerable in terms of memory usage. The function returns a
+     * sample size based on the constraints.
+     * <p>
+     * Both size and minSideLength can be passed in as -1 which indicates no
+     * care of the corresponding constraint. The functions prefers returning a
+     * sample size that generates a smaller bitmap, unless minSideLength = -1.
+     * <p>
      * Also, the function rounds up the sample size to a power of 2 or multiple
-     * of 8 because BitmapFactory only honors sample size this way.
-     * For example, BitmapFactory downsamples an image by 2 even though the
-     * request is 3. So we round up the sample size to avoid OOM.
+     * of 8 because BitmapFactory only honors sample size this way. For example,
+     * BitmapFactory downsamples an image by 2 even though the request is 3. So
+     * we round up the sample size to avoid OOM.
      */
     public static int computeSampleSize(BitmapFactory.Options options,
-            int minSideLength, int maxNumOfPixels) {
+    int minSideLength, int maxNumOfPixels) {
         int initialSize = computeInitialSampleSize(options, minSideLength,
-                maxNumOfPixels);
+      maxNumOfPixels);
 
         int roundedSize;
         if (initialSize <= 8) {
@@ -221,7 +229,7 @@ public class CameraUtil {
                 (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
         int upperBound = (minSideLength < 0) ? 128 :
                 (int) Math.min(Math.floor(w / minSideLength),
-                Math.floor(h / minSideLength));
+                        Math.floor(h / minSideLength));
 
         if (upperBound < lowerBound) {
             // return the larger one when there is no overlapping zone.
@@ -281,17 +289,18 @@ public class CameraUtil {
     public static void showErrorAndFinish(final Activity activity, int msgId) {
         DialogInterface.OnClickListener buttonListener =
                 new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                activity.finish();
-            }
-        };
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        activity.finish();
+                    }
+                };
         TypedValue out = new TypedValue();
         activity.getTheme().resolveAttribute(android.R.attr.alertDialogIcon, out, true);
-        // some crash reports indicate users leave app prior to this dialog appearing,
-        // so check to ensure that the activity is not shutting down before attempting
-        // to attach a dialog to the window manager.
+        // Some crash reports indicate users leave app prior to this dialog
+        // appearing, so check to ensure that the activity is not shutting down
+        // before attempting to attach a dialog to the window manager.
         if (!activity.isFinishing()) {
+            Log.e(TAG, "Show fatal error dialog");
             new AlertDialog.Builder(activity)
                     .setCancelable(false)
                     .setTitle(R.string.camera_error_title)
@@ -314,6 +323,7 @@ public class CameraUtil {
     }
 
     public static int nextPowerOf2(int n) {
+        // TODO: what happens if n is negative or already a power of 2?
         n -= 1;
         n |= n >>> 16;
         n |= n >>> 8;
@@ -329,6 +339,10 @@ public class CameraUtil {
         return (float) Math.sqrt(dx * dx + dy * dy);
     }
 
+    /**
+     * Clamps x to between min and max (inclusive on both ends, x = min --> min,
+     * x = max --> max).
+     */
     public static int clamp(int x, int min, int max) {
         if (x > max) {
             return max;
@@ -339,6 +353,10 @@ public class CameraUtil {
         return x;
     }
 
+    /**
+     * Clamps x to between min and max (inclusive on both ends, x = min --> min,
+     * x = max --> max).
+     */
     public static float clamp(float x, float min, float max) {
         if (x > max) {
             return max;
@@ -349,6 +367,73 @@ public class CameraUtil {
         return x;
     }
 
+    /**
+     * Linear interpolation between a and b by the fraction t. t = 0 --> a, t =
+     * 1 --> b.
+     */
+    public static float lerp(float a, float b, float t) {
+        return a + t * (b - a);
+    }
+
+    /**
+     * Given (nx, ny) \in [0, 1]^2, in the display's portrait coordinate system,
+     * returns normalized sensor coordinates \in [0, 1]^2 depending on how
+     * the sensor's orientation \in {0, 90, 180, 270}.
+     *
+     * <p>
+     * Returns null if sensorOrientation is not one of the above.
+     * </p>
+     */
+    public static PointF normalizedSensorCoordsForNormalizedDisplayCoords(
+        float nx, float ny, int sensorOrientation) {
+        switch (sensorOrientation) {
+        case 0:
+            return new PointF(nx, ny);
+        case 90:
+            return new PointF(ny, 1.0f - nx);
+        case 180:
+            return new PointF(1.0f - nx, 1.0f - ny);
+        case 270:
+            return new PointF(1.0f - ny, nx);
+        default:
+            return null;
+        }
+    }
+
+    /**
+     * Given a size, return the largest size with the given aspectRatio that
+     * maximally fits into the bounding rectangle of the original Size.
+     *
+     * @param size the original Size to crop
+     * @param aspectRatio the target aspect ratio
+     * @return the largest Size with the given aspect ratio that is smaller than
+     *         or equal to the original Size.
+     */
+    public static Size constrainToAspectRatio(Size size, float aspectRatio) {
+        float width = size.getWidth();
+        float height = size.getHeight();
+
+        float currentAspectRatio = width * 1.0f / height;
+
+        if (currentAspectRatio > aspectRatio) {
+            // chop longer side
+            if (width > height) {
+                width = height * aspectRatio;
+            } else {
+                height = width / aspectRatio;
+            }
+        } else if (currentAspectRatio < aspectRatio) {
+            // chop shorter side
+            if (width < height) {
+                width = height * aspectRatio;
+            } else {
+                height = width / aspectRatio;
+            }
+        }
+
+        return new Size((int) width, (int) height);
+    }
+
     public static int getDisplayRotation(Context context) {
         WindowManager windowManager = (WindowManager) context
                 .getSystemService(Context.WINDOW_SERVICE);
@@ -397,8 +482,8 @@ public class CameraUtil {
             changeOrientation = true;
         } else {
             int dist = Math.abs(orientation - orientationHistory);
-            dist = Math.min( dist, 360 - dist );
-            changeOrientation = ( dist >= 45 + ORIENTATION_HYSTERESIS );
+            dist = Math.min(dist, 360 - dist);
+            changeOrientation = (dist >= 45 + ORIENTATION_HYSTERESIS);
         }
         if (changeOrientation) {
             return ((orientation + 45) / 90 * 90) % 360;
@@ -414,16 +499,29 @@ public class CameraUtil {
         return new Size(res);
     }
 
-    public static Size getOptimalPreviewSize(Context context,
-            List<Size> sizes, double targetRatio) {
-        int optimalPickIndex = getOptimalPreviewSizeIndex(context, sizes, targetRatio);
-        return (optimalPickIndex == -1) ? null : sizes.get(optimalPickIndex);
+    public static com.android.ex.camera2.portability.Size getOptimalPreviewSize(Context context,
+            List<com.android.ex.camera2.portability.Size> sizes, double targetRatio) {
+        int optimalPickIndex = getOptimalPreviewSizeIndex(context, Size.convert(sizes),
+                targetRatio);
+        if (optimalPickIndex == -1) {
+            return null;
+        } else {
+            return sizes.get(optimalPickIndex);
+        }
     }
 
     public static int getOptimalPreviewSizeIndex(Context context,
             List<Size> sizes, double targetRatio) {
         // Use a very small tolerance because we want an exact match.
-        final double ASPECT_TOLERANCE = 0.01;
+        final double ASPECT_TOLERANCE;
+        // HTC 4:3 ratios is over .01 from true 4:3, targeted fix for those
+        // devices here, see b/18241645
+        if (ApiHelper.IS_HTC && targetRatio > 1.3433 && targetRatio < 1.35) {
+            Log.w(TAG, "4:3 ratio out of normal tolerance, increasing tolerance to 0.02");
+            ASPECT_TOLERANCE = 0.02;
+        } else {
+            ASPECT_TOLERANCE = 0.01;
+        }
         if (sizes == null) {
             return -1;
         }
@@ -437,48 +535,79 @@ public class CameraUtil {
         // new overlay will be created before the old one closed, which causes
         // an exception. For now, just get the screen size.
         Size defaultDisplaySize = getDefaultDisplaySize(context);
-        int targetHeight = Math.min(defaultDisplaySize.width(), defaultDisplaySize.height());
+        int targetHeight = Math.min(defaultDisplaySize.getWidth(), defaultDisplaySize.getHeight());
         // Try to find an size match aspect ratio and size
         for (int i = 0; i < sizes.size(); i++) {
             Size size = sizes.get(i);
-            double ratio = (double) size.width() / size.height();
+            double ratio = (double) size.getWidth() / size.getHeight();
             if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) {
                 continue;
             }
-            if (Math.abs(size.height() - targetHeight) < minDiff) {
+
+            double heightDiff = Math.abs(size.getHeight() - targetHeight);
+            if (heightDiff < minDiff) {
                 optimalSizeIndex = i;
-                minDiff = Math.abs(size.height() - targetHeight);
+                minDiff = heightDiff;
+            } else if (heightDiff == minDiff) {
+                // Prefer resolutions smaller-than-display when an equally close
+                // larger-than-display resolution is available
+                if (size.getHeight() < targetHeight) {
+                    optimalSizeIndex = i;
+                    minDiff = heightDiff;
+                }
             }
         }
         // Cannot find the one match the aspect ratio. This should not happen.
         // Ignore the requirement.
         if (optimalSizeIndex == -1) {
-            Log.w(TAG, "No preview size match the aspect ratio");
+            Log.w(TAG, "No preview size match the aspect ratio. available sizes: " + sizes);
             minDiff = Double.MAX_VALUE;
             for (int i = 0; i < sizes.size(); i++) {
                 Size size = sizes.get(i);
-                if (Math.abs(size.height() - targetHeight) < minDiff) {
+                if (Math.abs(size.getHeight() - targetHeight) < minDiff) {
                     optimalSizeIndex = i;
-                    minDiff = Math.abs(size.height() - targetHeight);
+                    minDiff = Math.abs(size.getHeight() - targetHeight);
                 }
             }
         }
+
         return optimalSizeIndex;
     }
 
-    // Returns the largest picture size which matches the given aspect ratio.
-    public static Size getOptimalVideoSnapshotPictureSize(
-            List<Size> sizes, double targetRatio) {
+    /**
+     * Returns the largest picture size which matches the given aspect ratio,
+     * except for the special WYSIWYG case where the picture size exactly matches
+     * the target size.
+     *
+     * @param sizes        a list of candidate sizes, available for use
+     * @param targetWidth  the ideal width of the video snapshot
+     * @param targetHeight the ideal height of the video snapshot
+     * @return the Optimal Video Snapshot Picture Size
+     */
+    public static com.android.ex.camera2.portability.Size getOptimalVideoSnapshotPictureSize(
+            List<com.android.ex.camera2.portability.Size> sizes, int targetWidth,
+            int targetHeight) {
+
         // Use a very small tolerance because we want an exact match.
         final double ASPECT_TOLERANCE = 0.001;
         if (sizes == null) {
             return null;
         }
 
-        Size optimalSize = null;
+        com.android.ex.camera2.portability.Size optimalSize = null;
+
+        //  WYSIWYG Override
+        //  We assume that physical display constraints have already been
+        //  imposed on the variables sizes
+        for (com.android.ex.camera2.portability.Size size : sizes) {
+            if (size.height() == targetHeight && size.width() == targetWidth) {
+                return size;
+            }
+        }
 
         // Try to find a size matches aspect ratio and has the largest width
-        for (Size size : sizes) {
+        final double targetRatio = (double) targetWidth / targetHeight;
+        for (com.android.ex.camera2.portability.Size size : sizes) {
             double ratio = (double) size.width() / size.height();
             if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) {
                 continue;
@@ -488,11 +617,11 @@ public class CameraUtil {
             }
         }
 
-        // Cannot find one that matches the aspect ratio. This should not happen.
-        // Ignore the requirement.
+        // Cannot find one that matches the aspect ratio. This should not
+        // happen. Ignore the requirement.
         if (optimalSize == null) {
             Log.w(TAG, "No picture size match the aspect ratio");
-            for (Size size : sizes) {
+            for (com.android.ex.camera2.portability.Size size : sizes) {
                 if (optimalSize == null || size.width() > optimalSize.width()) {
                     optimalSize = size;
                 }
@@ -794,9 +923,9 @@ public class CameraUtil {
      * Generates a 1d Gaussian mask of the input array size, and store the mask
      * in the input array.
      *
-     * @param mask empty array of size n, where n will be used as the size of the
-     *             Gaussian mask, and the array will be populated with the values
-     *             of the mask.
+     * @param mask empty array of size n, where n will be used as the size of
+     *            the Gaussian mask, and the array will be populated with the
+     *            values of the mask.
      */
     private static void getGaussianMask(float[] mask) {
         int len = mask.length;
@@ -804,7 +933,7 @@ public class CameraUtil {
         float sigma = len;
         float sum = 0;
         for (int i = 0; i <= mid; i++) {
-            float ex = FloatMath.exp(-(i - mid) * (i - mid) / (mid * mid))
+            float ex = (float) Math.exp(-(i - mid) * (i - mid) / (mid * mid))
                     / (2 * sigma * sigma);
             int symmetricIndex = len - 1 - i;
             mask[i] = ex;
@@ -822,15 +951,18 @@ public class CameraUtil {
     }
 
     /**
-     * Add two pixels together where the second pixel will be applied with a weight.
+     * Add two pixels together where the second pixel will be applied with a
+     * weight.
      *
      * @param pixel pixel color value of weight 1
      * @param newPixel second pixel color value where the weight will be applied
-     * @param weight a float weight that will be applied to the second pixel color
+     * @param weight a float weight that will be applied to the second pixel
+     *            color
      * @return the weighted addition of the two pixels
      */
     public static int addPixel(int pixel, int newPixel, float weight) {
-        // TODO: scale weight to [0, 1024] to avoid casting to float and back to int.
+        // TODO: scale weight to [0, 1024] to avoid casting to float and back to
+        // int.
         int r = ((pixel & 0x00ff0000) + (int) ((newPixel & 0x00ff0000) * weight)) & 0x00ff0000;
         int g = ((pixel & 0x0000ff00) + (int) ((newPixel & 0x0000ff00) * weight)) & 0x0000ff00;
         int b = ((pixel & 0x000000ff) + (int) ((newPixel & 0x000000ff) * weight)) & 0x000000ff;
@@ -838,8 +970,9 @@ public class CameraUtil {
     }
 
     /**
-     * Apply blur to the input image represented in an array of colors and put the
-     * output image, in the form of an array of colors, into the output array.
+     * Apply blur to the input image represented in an array of colors and put
+     * the output image, in the form of an array of colors, into the output
+     * array.
      *
      * @param src source array of colors
      * @param out output array of colors after the blur
@@ -855,15 +988,15 @@ public class CameraUtil {
 
         int[] tmp = new int[src.length];
 
-        // Apply the 1d Gaussian mask horizontally to the image and put the intermediate
-        // results in a temporary array.
+        // Apply the 1d Gaussian mask horizontally to the image and put the
+        // intermediat results in a temporary array.
         int rowPointer = 0;
         for (int y = 0; y < h; y++) {
             for (int x = 0; x < w; x++) {
                 int sum = 0;
                 for (int i = 0; i < k.length; i++) {
                     int dx = x + i - off;
-                    dx = clamp(dx, 0,  w - 1);
+                    dx = clamp(dx, 0, w - 1);
                     sum = addPixel(sum, src[rowPointer + dx], k[i]);
                 }
                 tmp[x + rowPointer] = sum;
@@ -894,13 +1027,12 @@ public class CameraUtil {
      *
      * @param imageWidth The original width.
      * @param imageHeight The original height.
-     * @param imageRotation The clockwise rotation in degrees of the image
-     *                      which the original dimension comes from.
+     * @param imageRotation The clockwise rotation in degrees of the image which
+     *            the original dimension comes from.
      * @param boundWidth The width of the bound.
      * @param boundHeight The height of the bound.
-     *
      * @returns The final width/height stored in Point.x/Point.y to fill the
-     * bounds and preserve image aspect ratio.
+     *          bounds and preserve image aspect ratio.
      */
     public static Point resizeToFill(int imageWidth, int imageHeight, int imageRotation,
             int boundWidth, int boundHeight) {
@@ -962,12 +1094,13 @@ public class CameraUtil {
 
     public static void playVideo(Activity activity, Uri uri, String title) {
         try {
-            boolean isSecureCamera = ((CameraActivity)activity).isSecureCamera();
+            CameraActivity cameraActivity = (CameraActivity)activity;
+            boolean isSecureCamera = cameraActivity.isSecureCamera();
             if (!isSecureCamera) {
-                Intent intent = IntentHelper.getVideoPlayerIntent(activity, uri)
+                Intent intent = IntentHelper.getVideoPlayerIntent(uri)
                         .putExtra(Intent.EXTRA_TITLE, title)
                         .putExtra(KEY_TREAT_UP_AS_BACK, true);
-                activity.startActivityForResult(intent, CameraActivity.REQ_CODE_DONT_SWITCH_TO_PREVIEW);
+                cameraActivity.launchActivityByIntent(intent);
             } else {
                 // In order not to send out any intent to be intercepted and
                 // show the lock screen immediately, we just let the secure
@@ -999,8 +1132,8 @@ public class CameraUtil {
                     MAPS_CLASS_NAME);
             Intent mapsIntent = new Intent(Intent.ACTION_VIEW,
                     Uri.parse(uri)).setComponent(compName);
-            activity.startActivityForResult(mapsIntent,
-                    CameraActivity.REQ_CODE_DONT_SWITCH_TO_PREVIEW);
+            mapsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+            activity.startActivity(mapsIntent);
         } catch (ActivityNotFoundException e) {
             // Use the "geo intent" if no GMM is installed
             Log.e(TAG, "GMM activity not found!", e);
@@ -1014,8 +1147,8 @@ public class CameraUtil {
      * Dumps the stack trace.
      *
      * @param level How many levels of the stack are dumped. 0 means all.
-     * @return A {@link java.lang.String} of all the output with newline
-     * between each.
+     * @return A {@link java.lang.String} of all the output with newline between
+     *         each.
      */
     public static String dumpStackTrace(int level) {
         StackTraceElement[] elems = Thread.currentThread().getStackTrace();
@@ -1090,7 +1223,8 @@ public class CameraUtil {
      *
      * @param modeIndex index of the mode
      * @param context current context
-     * @return mode content description if the index is valid, otherwise a new empty string
+     * @return mode content description if the index is valid, otherwise a new
+     *         empty string
      */
     public static String getCameraModeContentDescription(int modeIndex, Context context) {
         String[] cameraModesDesc = context.getResources()
@@ -1112,7 +1246,7 @@ public class CameraUtil {
     public static int getCameraShutterIconId(int modeIndex, Context context) {
         // Find the camera mode icon using id
         TypedArray shutterIcons = context.getResources()
-              .obtainTypedArray(R.array.camera_mode_shutter_icon);
+                .obtainTypedArray(R.array.camera_mode_shutter_icon);
         if (modeIndex < 0 || modeIndex >= shutterIcons.length()) {
             Log.e(TAG, "Invalid mode index: " + modeIndex);
             throw new IllegalStateException("Invalid mode index: " + modeIndex);
diff --git a/src/com/android/camera/util/ConcurrentSharedRingBuffer.java b/src/com/android/camera/util/ConcurrentSharedRingBuffer.java
new file mode 100644 (file)
index 0000000..4e44972
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ * Copyright (C) 2014 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.os.Handler;
+import android.util.Pair;
+
+import com.android.camera.debug.Log.Tag;
+
+import java.security.InvalidParameterException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.Semaphore;
+
+/**
+ * Implements a thread-safe fixed-size pool map of integers to objects such that
+ * the least element may be swapped out for a new element at any time. Elements
+ * may be temporarily "pinned" for processing in separate threads, during which
+ * they will not be swapped out. <br>
+ * This class enforces the invariant that a new element can always be swapped
+ * in. Thus, requests to pin an element for a particular task may be denied if
+ * there are not enough unpinned elements which can be removed. <br>
+ */
+public class ConcurrentSharedRingBuffer<E> {
+    private static final Tag TAG = new Tag("CncrrntShrdRingBuf");
+
+    /**
+     * Callback interface for swapping elements at the head of the buffer.
+     */
+    public static interface SwapTask<E> {
+        /**
+         * Called if the buffer is under-capacity and a new element is being
+         * added.
+         *
+         * @return the new element to add.
+         */
+        public E create();
+
+        /**
+         * Called if the buffer is full and an old element must be swapped out
+         * to make room for the new element.
+         *
+         * @param oldElement the element being removed from the buffer.
+         * @return the new element to add.
+         */
+        public E swap(E oldElement);
+
+        /**
+         * Called if the buffer already has an element with the specified key.
+         * Note that the element may currently be pinned for processing by other
+         * elements. Therefore, implementations must be thread safe with respect
+         * to any other operations which may be applied to pinned tasks.
+         *
+         * @param existingElement the element to be updated.
+         */
+        public void update(E existingElement);
+    }
+
+    /**
+     * Callback for selecting an element to pin. See
+     * {@link tryPinGreatestSelected}.
+     */
+    public static interface Selector<E> {
+        /**
+         * @param element The element to select or not select.
+         * @return true if the element should be selected, false otherwise.
+         */
+        public boolean select(E element);
+    }
+
+    public static interface PinStateListener {
+        /**
+         * Invoked whenever the ability to pin an element for processing
+         * changes.
+         *
+         * @param pinsAvailable If true, requests to pin elements (e.g. calls to
+         *            pinGreatest()) are less-likely to fail. If false, they are
+         *            more-likely to fail.
+         */
+        public void onPinStateChange(boolean pinsAvailable);
+    }
+
+    /**
+     * Wraps E with reference counting.
+     */
+    private static class Pinnable<E> {
+        private E mElement;
+
+        /** Reference-counting for the number of tasks holding this element. */
+        private int mPins;
+
+        public Pinnable(E element) {
+            mElement = element;
+            mPins = 0;
+        }
+
+        public E getElement() {
+            return mElement;
+        }
+
+        private boolean isPinned() {
+            return mPins > 0;
+        }
+    }
+
+    /** Allow only one swapping operation at a time. */
+    private final Object mSwapLock = new Object();
+    /**
+     * Lock all transactions involving mElements, mUnpinnedElements,
+     * mCapacitySemaphore, mPinSemaphore, mClosed, mPinStateHandler, and
+     * mPinStateListener and the state of Pinnable instances. <br>
+     * TODO Replace this with a priority semaphore and allow swapLeast()
+     * operations to run faster at the expense of slower tryPin()/release()
+     * calls.
+     */
+    private final Object mLock = new Object();
+    /** Stores all elements. */
+    private TreeMap<Long, Pinnable<E>> mElements;
+    /** Stores the subset of mElements which is not pinned. */
+    private TreeMap<Long, Pinnable<E>> mUnpinnedElements;
+    /** Used to acquire space in mElements. */
+    private final Semaphore mCapacitySemaphore;
+    /** This must be acquired while an element is pinned. */
+    private final Semaphore mPinSemaphore;
+    private boolean mClosed = false;
+
+    private Handler mPinStateHandler = null;
+    private PinStateListener mPinStateListener = null;
+
+    /**
+     * Constructs a new ring buffer with the specified capacity.
+     *
+     * @param capacity the maximum number of elements to store.
+     */
+    public ConcurrentSharedRingBuffer(int capacity) {
+        if (capacity <= 0) {
+            throw new IllegalArgumentException("Capacity must be positive.");
+        }
+
+        mElements = new TreeMap<Long, Pinnable<E>>();
+        mUnpinnedElements = new TreeMap<Long, Pinnable<E>>();
+        mCapacitySemaphore = new Semaphore(capacity);
+        // Start with -1 permits to pin elements since we must always have at
+        // least one unpinned
+        // element available to swap out as the head of the buffer.
+        mPinSemaphore = new Semaphore(-1);
+    }
+
+    /**
+     * Sets or replaces the listener.
+     *
+     * @param handler The handler on which to invoke the listener.
+     * @param listener The listener to be called whenever the ability to pin an
+     *            element changes.
+     */
+    public void setListener(Handler handler, PinStateListener listener) {
+        synchronized (mLock) {
+            mPinStateHandler = handler;
+            mPinStateListener = listener;
+        }
+    }
+
+    /**
+     * Places a new element in the ring buffer, removing the least (by key)
+     * non-pinned element if necessary. The existing element (or {@code null} if
+     * the buffer is under-capacity) is passed to {@code swapper.swap()} and the
+     * result is saved to the buffer. If an entry with {@code newKey} already
+     * exists in the ring-buffer, then {@code swapper.update()} is called and
+     * may modify the element in-place. See {@link SwapTask}. <br>
+     * Note that this method is the only way to add new elements to the buffer
+     * and will never be blocked on pinned tasks.
+     *
+     * @param newKey the key with which to store the swapped-in element.
+     * @param swapper the callback used to perform the swap.
+     * @return true if the swap was successful and the new element was saved to
+     *         the buffer, false if the swap was not possible and the element
+     *         was not saved to the buffer. Note that if the swap failed,
+     *         {@code swapper.create()} may or may not have been invoked.
+     */
+    public boolean swapLeast(long newKey, SwapTask<E> swapper) {
+        synchronized (mSwapLock) {
+            Pinnable<E> existingElement = null;
+
+            synchronized (mLock) {
+                if (mClosed) {
+                    return false;
+                }
+                existingElement = mElements.get(newKey);
+            }
+
+            if (existingElement != null) {
+                swapper.update(existingElement.getElement());
+                return true;
+            }
+
+            if (mCapacitySemaphore.tryAcquire()) {
+                // If we are under capacity, insert the new element and return.
+                Pinnable<E> p = new Pinnable<E>(swapper.create());
+
+                synchronized (mLock) {
+                    if (mClosed) {
+                        return false;
+                    }
+
+                    // Add the new element and release another permit to pin
+                    // allow pinning another element.
+                    mElements.put(newKey, p);
+                    mUnpinnedElements.put(newKey, p);
+                    mPinSemaphore.release();
+                    if (mPinSemaphore.availablePermits() == 1) {
+                        notifyPinStateChange(true);
+                    }
+                }
+
+                return true;
+            } else {
+                Pinnable<E> toSwap;
+
+                // Note that this method must be synchronized to avoid
+                // attempting to remove more than one unpinned element at a
+                // time.
+                synchronized (mLock) {
+                    if (mClosed) {
+                        return false;
+                    }
+
+                    Map.Entry<Long, Pinnable<E>> toSwapEntry = mUnpinnedElements.pollFirstEntry();
+
+                    if (toSwapEntry == null) {
+                        // We should never get here.
+                        throw new RuntimeException("No unpinned element available.");
+                    }
+
+                    toSwap = toSwapEntry.getValue();
+
+                    // We must remove the element from both mElements and
+                    // mUnpinnedElements because it must be re-added after the
+                    // swap to be placed in the correct order with newKey.
+                    mElements.remove(toSwapEntry.getKey());
+                }
+
+                try {
+                    toSwap.mElement = swapper.swap(toSwap.mElement);
+                } finally {
+                    synchronized (mLock) {
+                        if (mClosed) {
+                            return false;
+                        }
+
+                        mElements.put(newKey, toSwap);
+                        mUnpinnedElements.put(newKey, toSwap);
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    /**
+     * Attempts to pin the element with the given key and return it. <br>
+     * Note that, if a non-null pair is returned, the caller <em>must</em> call
+     * {@link #release} with the key.
+     *
+     * @return the key and object of the pinned element, if one could be pinned,
+     *         or null.
+     */
+    public Pair<Long, E> tryPin(long key) {
+
+        boolean acquiredLastPin = false;
+        Pinnable<E> entry = null;
+
+        synchronized (mLock) {
+            if (mClosed) {
+                return null;
+            }
+
+            if (mElements.isEmpty()) {
+                return null;
+            }
+
+            entry = mElements.get(key);
+
+            if (entry == null) {
+                return null;
+            }
+
+            if (entry.isPinned()) {
+                // If the element is already pinned by another task, simply
+                // increment the pin count.
+                entry.mPins++;
+            } else {
+                // We must ensure that there will still be an unpinned element
+                // after we pin this one.
+                if (mPinSemaphore.tryAcquire()) {
+                    mUnpinnedElements.remove(key);
+                    entry.mPins++;
+
+                    acquiredLastPin = mPinSemaphore.availablePermits() <= 0;
+                } else {
+                    return null;
+                }
+            }
+        }
+
+        // If we just grabbed the last permit, we must notify listeners of the
+        // pin
+        // state change.
+        if (acquiredLastPin) {
+            notifyPinStateChange(false);
+        }
+
+        return Pair.create(key, entry.getElement());
+    }
+
+    public void release(long key) {
+        synchronized (mLock) {
+            // Note that this must proceed even if the buffer has been closed.
+
+            Pinnable<E> element = mElements.get(key);
+
+            if (element == null) {
+                throw new InvalidParameterException("No entry found for the given key.");
+            }
+
+            if (!element.isPinned()) {
+                throw new IllegalArgumentException("Calling release() with unpinned element.");
+            }
+
+            // Unpin the element
+            element.mPins--;
+
+            if (!element.isPinned()) {
+                // If there are now 0 tasks pinning this element...
+                mUnpinnedElements.put(key, element);
+
+                // Allow pinning another element.
+                mPinSemaphore.release();
+
+                if (mPinSemaphore.availablePermits() == 1) {
+                    notifyPinStateChange(true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Attempts to pin the greatest element and return it. <br>
+     * Note that, if a non-null element is returned, the caller <em>must</em>
+     * call {@link #release} with the element. Furthermore, behavior is
+     * undefined if the element's {@code compareTo} behavior changes between
+     * these calls.
+     *
+     * @return the key and object of the pinned element, if one could be pinned,
+     *         or null.
+     */
+    public Pair<Long, E> tryPinGreatest() {
+        synchronized (mLock) {
+            if (mClosed) {
+                return null;
+            }
+
+            if (mElements.isEmpty()) {
+                return null;
+            }
+
+            return tryPin(mElements.lastKey());
+        }
+    }
+
+    /**
+     * Attempts to pin the greatest element for which {@code selector} returns
+     * true. <br>
+     *
+     * @see #pinGreatest
+     */
+    public Pair<Long, E> tryPinGreatestSelected(Selector<E> selector) {
+        // (Quickly) get the list of elements to search through.
+        ArrayList<Long> keys = new ArrayList<Long>();
+        synchronized (mLock) {
+            if (mClosed) {
+                return null;
+            }
+
+            if (mElements.isEmpty()) {
+                return null;
+            }
+
+            keys.addAll(mElements.keySet());
+        }
+
+        Collections.sort(keys);
+
+        // Pin each element, from greatest key to least, until we find the one
+        // we want (the element with the greatest key for which
+        // selector.selected() returns true).
+        for (int i = keys.size() - 1; i >= 0; i--) {
+            Pair<Long, E> pinnedCandidate = tryPin(keys.get(i));
+            if (pinnedCandidate != null) {
+                boolean selected = false;
+
+                try {
+                    selected = selector.select(pinnedCandidate.second);
+                } finally {
+                    // Don't leak pinnedCandidate if the above select() threw an
+                    // exception.
+                    if (selected) {
+                        return pinnedCandidate;
+                    } else {
+                        release(pinnedCandidate.first);
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Removes all elements from the buffer, running {@code task} on each one,
+     * and waiting, if necessary, for all pins to be released.
+     *
+     * @param task
+     * @throws InterruptedException
+     */
+    public void close(Task<E> task) throws InterruptedException {
+        int numPinnedElements;
+
+        // Ensure that any pending swap tasks complete before closing.
+        synchronized (mSwapLock) {
+            synchronized (mLock) {
+                mClosed = true;
+                numPinnedElements = mElements.size() - mUnpinnedElements.size();
+            }
+        }
+
+        notifyPinStateChange(false);
+
+        // Wait for all pinned tasks to complete.
+        if (numPinnedElements > 0) {
+            mPinSemaphore.acquire(numPinnedElements);
+        }
+
+        for (Pinnable<E> element : mElements.values()) {
+            task.run(element.mElement);
+        }
+
+        mUnpinnedElements.clear();
+
+        mElements.clear();
+    }
+
+    private void notifyPinStateChange(final boolean pinsAvailable) {
+        synchronized (mLock) {
+            // We must synchronize on mPinStateHandler and mPinStateListener.
+            if (mPinStateHandler != null) {
+                final PinStateListener listener = mPinStateListener;
+                mPinStateHandler.post(new Runnable() {
+                        @Override
+                    public void run() {
+                        listener.onPinStateChange(pinsAvailable);
+                    }
+                });
+            }
+        }
+    }
+}
diff --git a/src/com/android/camera/util/ConjunctionListenerMux.java b/src/com/android/camera/util/ConjunctionListenerMux.java
new file mode 100644 (file)
index 0000000..a320724
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2014 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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.List;
+
+/**
+ * Enables thread-safe multiplexing of multiple input boolean states into a
+ * single listener to be invoked upon change in the conjunction (logical AND) of
+ * all inputs.
+ */
+public class ConjunctionListenerMux<Input extends Enum<Input>> {
+    /**
+     * Callback for listening to changes to the conjunction of all inputs.
+     */
+    public static interface OutputChangeListener {
+        /**
+         * Called whenever the conjunction of all inputs changes. Listeners MUST
+         * NOT call {@link #setInput} while still registered as a listener, as
+         * this will result in infinite recursion.
+         *
+         * @param state the conjunction of all input values.
+         */
+        public void onOutputChange(boolean state);
+    }
+
+    /** Mutex for mValues and mState. */
+    private final Object mLock = new Object();
+    /** Stores the current input state. */
+    private final EnumMap<Input, Boolean> mInputs;
+    /** The current output state */
+    private boolean mOutput;
+    /**
+     * The set of listeners to notify when the output (the conjunction of all
+     * inputs) changes.
+     */
+    private final List<OutputChangeListener> mListeners = Collections.synchronizedList(
+            new ArrayList<OutputChangeListener>());
+
+    public void addListener(OutputChangeListener listener) {
+        mListeners.add(listener);
+    }
+
+    public void removeListener(OutputChangeListener listener) {
+        mListeners.remove(listener);
+    }
+
+    public boolean getOutput() {
+        synchronized (mLock) {
+            return mOutput;
+        }
+    }
+
+    /**
+     * Updates the state of the given input, dispatching to all output change
+     * listeners if the output changes.
+     *
+     * @param index the index of the input to change.
+     * @param newValue the new value of the input.
+     * @return The new output.
+     */
+    public boolean setInput(Input input, boolean newValue) {
+        synchronized (mLock) {
+            mInputs.put(input, newValue);
+
+            // If the new input value is the same as the existing output,
+            // then nothing will change.
+            if (newValue == mOutput) {
+                return mOutput;
+            } else {
+                boolean oldOutput = mOutput;
+
+                // Recompute the output by AND'ing all the inputs.
+                mOutput = true;
+                for (Boolean b : mInputs.values()) {
+                    mOutput &= b;
+                }
+
+                // If the output has changed, notify the listeners.
+                if (oldOutput != mOutput) {
+                    notifyListeners();
+                }
+
+                return mOutput;
+            }
+        }
+    }
+
+    public ConjunctionListenerMux(Class<Input> clazz, OutputChangeListener listener) {
+        this(clazz);
+        addListener(listener);
+    }
+
+    public ConjunctionListenerMux(Class<Input> clazz) {
+        mInputs = new EnumMap<Input, Boolean>(clazz);
+
+        for (Input i : clazz.getEnumConstants()) {
+            mInputs.put(i, false);
+        }
+
+        mOutput = false;
+    }
+
+    /**
+     * Notifies all listeners of the current state, regardless of whether or not
+     * it has actually changed.
+     */
+    public void notifyListeners() {
+        synchronized (mLock) {
+            for (OutputChangeListener listener : mListeners) {
+                listener.onOutputChange(mOutput);
+            }
+        }
+    }
+}
index c5466ca..a36a476 100644 (file)
@@ -29,46 +29,30 @@ import java.util.List;
 public class IntentHelper {
     private static final Log.Tag TAG = new Log.Tag("IntentHelper");
 
-    public static Intent getDefaultGalleryIntent(Context context) {
-        return getGalleryIntent(context, true);
-    }
-
-    public static Intent getPhotosGalleryIntent(Context context) {
-        return getGalleryIntent(context, false);
-    }
-
-    public static Intent getGalleryIntent(Context context, boolean failoverToDefaultGallery) {
-        PackageManager pm = context.getPackageManager();
+    public static Intent getGalleryIntent(Context context) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         GalleryHelper.setGalleryIntentClassName(intent);
-        if (failoverToDefaultGallery) {
-            List<ResolveInfo> resolveInfos =
-                    pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
-            if (resolveInfos.size() == 0) {
-                // No matching activities.
-                intent = new Intent(Intent.ACTION_MAIN);
-                intent.addCategory(Intent.CATEGORY_APP_GALLERY);
-                resolveInfos = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
-                if (resolveInfos.size() == 0) {
-                    return null;
-                }
-                ResolveInfo firstPackage = resolveInfos.get(0);
-                intent.setClassName(firstPackage.activityInfo.packageName,
-                                    firstPackage.activityInfo.name);
-            }
-            for (ResolveInfo info : resolveInfos) {
-                Log.v(TAG, info.resolvePackageName + ':' + info.activityInfo.packageName +
-                      ":" + info.activityInfo.name + ',' + info.activityInfo.enabled);
-            }
+
+        // check if intent can launch gallery
+        PackageManager pm = context.getPackageManager();
+        List<ResolveInfo> resolveInfos =
+            pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
+        if (resolveInfos.size() == 0) {
+            return null;
+        } else {
+            return intent;
         }
-        return intent;
     }
 
     public static Drawable getGalleryIcon(Context context, Intent galleryIntent) {
         return GalleryHelper.getGalleryIcon(context, galleryIntent);
     }
 
-    public static Intent getVideoPlayerIntent(Context context, Uri uri) {
+    public static CharSequence getGalleryAppName(Context context, Intent galleryIntent) {
+        return GalleryHelper.getGalleryAppName(context, galleryIntent);
+    }
+
+    public static Intent getVideoPlayerIntent(Uri uri) {
         return new Intent(Intent.ACTION_VIEW)
             .setDataAndType(uri, "video/*");
     }
diff --git a/src/com/android/camera/util/QuickActivity.java b/src/com/android/camera/util/QuickActivity.java
new file mode 100644 (file)
index 0000000..039d8fc
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2014 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.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.MediaStore;
+
+import com.android.camera.debug.Log;
+
+/**
+ * Workaround for secure-lockscreen double-onResume() bug:
+ * <p>
+ * If started from the secure-lockscreen, the activity may be quickly started,
+ * resumed, paused, stopped, and then started and resumed again. This is
+ * problematic for launch time from the secure-lockscreen because we typically open the
+ * camera in onResume() and close it in onPause(). These camera operations take
+ * a long time to complete. To workaround it, this class filters out
+ * high-frequency onResume()->onPause() sequences if the current intent
+ * indicates that we have started from the secure-lockscreen.
+ * </p>
+ * <p>
+ * Subclasses should override the appropriate on[Create|Start...]Tasks() method
+ * in place of the original.
+ * </p>
+ * <p>
+ * Sequences of onResume() followed quickly by onPause(), when the activity is
+ * started from a secure-lockscreen will result in a quick no-op.<br>
+ * </p>
+ */
+public abstract class QuickActivity extends Activity {
+    private static final Log.Tag TAG = new Log.Tag("QuickActivity");
+
+    /**
+     * The amount of time to wait before running onResumeTasks when started from
+     * the lockscreen.
+     */
+    private static final long ON_RESUME_DELAY_MILLIS = 20;
+    /** A reference to the main handler on which to run lifecycle methods. */
+    private Handler mMainHandler;
+    private boolean mPaused;
+    /**
+     * True if the last call to onResume() resulted in a delayed call to
+     * mOnResumeTasks which was then canceled due to an immediate onPause().
+     * This allows optimizing the common case in which the subsequent
+     * call to onResume() should execute onResumeTasks() immediately.
+     */
+    private boolean mCanceledResumeTasks = false;
+
+    /**
+     * A runnable for deferring tasks to be performed in onResume() if starting
+     * from the lockscreen.
+     */
+    private final Runnable mOnResumeTasks = new Runnable() {
+            @Override
+        public void run() {
+            logLifecycle("onResumeTasks", true);
+            if (mPaused) {
+                onResumeTasks();
+                mPaused = false;
+                mCanceledResumeTasks = false;
+            }
+            logLifecycle("onResumeTasks", false);
+        }
+    };
+
+    @Override
+    protected final void onNewIntent(Intent intent) {
+        logLifecycle("onNewIntent", true);
+        Log.v(TAG, "Intent Action = " + intent.getAction());
+        setIntent(intent);
+        super.onNewIntent(intent);
+        onNewIntentTasks(intent);
+        logLifecycle("onNewIntent", false);
+    }
+
+    @Override
+    protected final void onCreate(Bundle bundle) {
+        logLifecycle("onCreate", true);
+        Log.v(TAG, "Intent Action = " + getIntent().getAction());
+        super.onCreate(bundle);
+
+        mMainHandler = new Handler(getMainLooper());
+
+        onCreateTasks(bundle);
+
+        mPaused = true;
+
+        logLifecycle("onCreate", false);
+    }
+
+    @Override
+    protected final void onStart() {
+        logLifecycle("onStart", true);
+        onStartTasks();
+        super.onStart();
+        logLifecycle("onStart", false);
+    }
+
+    @Override
+    protected final void onResume() {
+        logLifecycle("onResume", true);
+        mMainHandler.removeCallbacks(mOnResumeTasks);
+        if (delayOnResumeOnStart() && !mCanceledResumeTasks) {
+            mMainHandler.postDelayed(mOnResumeTasks, ON_RESUME_DELAY_MILLIS);
+        } else {
+            if (mPaused) {
+                onResumeTasks();
+                mPaused = false;
+                mCanceledResumeTasks = false;
+            }
+        }
+        super.onResume();
+        logLifecycle("onResume", false);
+    }
+
+    @Override
+    protected final void onPause() {
+        logLifecycle("onPause", true);
+        mMainHandler.removeCallbacks(mOnResumeTasks);
+        if (!mPaused) {
+            onPauseTasks();
+            mPaused = true;
+        } else {
+            mCanceledResumeTasks = true;
+        }
+        super.onPause();
+        logLifecycle("onPause", false);
+    }
+
+    @Override
+    protected final void onStop() {
+        if (isChangingConfigurations()) {
+            Log.v(TAG, "changing configurations");
+        }
+        logLifecycle("onStop", true);
+        onStopTasks();
+        super.onStop();
+        logLifecycle("onStop", false);
+    }
+
+    @Override
+    protected final void onRestart() {
+        logLifecycle("onRestart", true);
+        super.onRestart();
+        // TODO Support onRestartTasks() and handle the workaround for that too.
+        logLifecycle("onRestart", false);
+    }
+
+    @Override
+    protected final void onDestroy() {
+        logLifecycle("onDestroy", true);
+        onDestroyTasks();
+        super.onDestroy();
+        logLifecycle("onDestroy", false);
+    }
+
+    private void logLifecycle(String methodName, boolean start) {
+        String prefix = start ? "START" : "END";
+        Log.v(TAG, prefix + " " + methodName + ": Activity = " + toString());
+    }
+
+    private boolean delayOnResumeOnStart() {
+        String action = getIntent().getAction();
+        boolean isSecureLockscreenCamera =
+                MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(action);
+        return isSecureLockscreenCamera;
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onNewIntent}.
+     */
+    protected void onNewIntentTasks(Intent newIntent) {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onCreate}.
+     */
+    protected void onCreateTasks(Bundle savedInstanceState) {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onStart}.
+     */
+    protected void onStartTasks() {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onResume}.
+     */
+    protected void onResumeTasks() {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onPause}.
+     */
+    protected void onPauseTasks() {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onStop}.
+     */
+    protected void onStopTasks() {
+    }
+
+    /**
+     * Subclasses should override this in place of {@link Activity#onDestroy}.
+     */
+    protected void onDestroyTasks() {
+    }
+}
index 71703cc..ee35808 100644 (file)
 
 package com.android.camera.util;
 
+import android.graphics.Point;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Simple size class until we are 'L' only and can use android.util.Size.
  */
@@ -31,6 +36,19 @@ public class Size {
         return converted;
     }
 
+    public static List<Size> convert(List<com.android.ex.camera2.portability.Size> sizes) {
+        ArrayList<Size> converted = new ArrayList<>(sizes.size());
+        for (com.android.ex.camera2.portability.Size size : sizes) {
+            converted.add(new Size(size.width(), size.height()));
+        }
+        return converted;
+    }
+
+    public Size(Point point) {
+        this.width = point.x;
+        this.height = point.y;
+    }
+
     public Size(android.util.Size size) {
         this.width = size.getWidth();
         this.height = size.getHeight();
similarity index 64%
rename from src_pd/com/android/camera/util/FeedbackHelper.java
rename to src/com/android/camera/util/Task.java
index d4cb6a6..ebcd69d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2014 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.
 
 package com.android.camera.util;
 
-import android.content.Context;
-
-public class FeedbackHelper {
-    public static boolean feedbackAvailable() {
-        return false;
-    }
-
-    public FeedbackHelper(Context context) {
-    }
-
-    public void startFeedback() {
-    }
-
-    public void stopFeedback() {
-    }
+/**
+ * Generic callback interface for tasks which require a parameter.
+ */
+public interface Task<T> {
+    public void run(T t);
 }
index 46ef68b..712dc9b 100644 (file)
@@ -76,7 +76,7 @@ public class Cling extends TextView {
     /**
      * Adjust the translation of the cling to stay on top of the reference view.
      */
-    private void adjustPosition() {
+    public void adjustPosition() {
         if (mReferenceView == null) {
             return;
         }
index bac54d0..7ac42f4 100644 (file)
@@ -110,7 +110,7 @@ public class ExternalViewerButton extends ImageButton {
     /**
      * Sets all the clings to be invisible.
      */
-    private void hideClings() {
+    public void hideClings() {
         for (int i = 0; i < mClingMap.size(); i++) {
             mClingMap.valueAt(i).setVisibility(View.INVISIBLE);
         }
@@ -134,11 +134,12 @@ public class ExternalViewerButton extends ImageButton {
      * Updates the visibility of clings based on whether the button is currently
      * shown.
      */
-    private void updateClingVisibility() {
+    public void updateClingVisibility() {
         hideClings();
         if (isShown()) {
-            View cling = mClingMap.get(mState);
+            Cling cling = mClingMap.get(mState);
             if (cling != null) {
+                cling.adjustPosition();
                 cling.setVisibility(View.VISIBLE);
             }
         }
index 099f834..c943b7e 100644 (file)
@@ -20,7 +20,6 @@ import android.animation.Animator;
 import android.animation.ValueAnimator;
 import android.content.Context;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.ColorFilter;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
@@ -45,8 +44,6 @@ import com.android.camera2.R;
 public class FilmstripLayout extends FrameLayout implements FilmstripContentPanel {
 
     private static final long DEFAULT_DURATION_MS = 200;
-    private static final int ANIM_DIRECTION_IN = 1;
-    private static final int ANIM_DIRECTION_OUT = 2;
 
     /**
      * The layout containing the {@link com.android.camera.widget.FilmstripView}
@@ -59,11 +56,7 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
     private final ValueAnimator mFilmstripAnimator = ValueAnimator.ofFloat(null);
     private int mSwipeTrend;
     private MyBackgroundDrawable mBackgroundDrawable;
-    private int mAnimationDirection;
     private Handler mHandler;
-    // There are two versions of background. The hiding background is simply a
-    // solid black rectangle, the other is the quantum paper version.
-    private boolean mDrawHidingBackground;
     // We use this to record the current translation position instead of using
     // the real value because we might set the translation before onMeasure()
     // thus getMeasuredWidth() can be 0.
@@ -83,9 +76,7 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
                 if (mFilmstripContentTranslationProgress != 0f) {
                     mFilmstripView.getController().goToFilmstrip();
                     setVisibility(INVISIBLE);
-                    setDrawHidingBackground(false);
                 } else {
-                    setDrawHidingBackground(true);
                     notifyShown();
                 }
             }
@@ -269,12 +260,13 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
     }
 
     public void hideFilmstrip() {
-        mAnimationDirection = ANIM_DIRECTION_OUT;
+        // run the same view show/hides and animations
+        // that happen with a swipe gesture.
+        onSwipeOutBegin();
         runAnimation(mFilmstripContentTranslationProgress, 1f);
     }
 
     public void showFilmstrip() {
-        mAnimationDirection = ANIM_DIRECTION_IN;
         setVisibility(VISIBLE);
         runAnimation(mFilmstripContentTranslationProgress, 0f);
     }
@@ -292,10 +284,6 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
         mFilmstripAnimator.start();
     }
 
-    private void setDrawHidingBackground(boolean hiding) {
-        mDrawHidingBackground = hiding;
-    }
-
     private void translateContentLayout(float fraction) {
         mFilmstripContentTranslationProgress = fraction;
         mFilmstripContentLayout.setTranslationX(fraction * getMeasuredWidth());
@@ -501,23 +489,9 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
             if (translation == width) {
                 return;
             }
-            canvas.drawColor(Color.argb((int) (127 * (width - translation) / width), 0, 0, 0));
-            if (mDrawHidingBackground) {
-                drawHiding(canvas);
-            } else {
-                drawShowing(canvas);
-            }
-        }
 
-        private void drawHiding(Canvas canvas) {
-            setAlpha(1.0f - mFilmstripContentTranslationProgress);
-            canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint);
-        }
-
-        private void drawShowing(Canvas canvas) {
             setAlpha(1.0f - mFilmstripContentTranslationProgress);
             canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint);
         }
     }
-
 }
index acc5280..37d3ea7 100644 (file)
@@ -20,12 +20,15 @@ import android.animation.Animator;
 import android.animation.AnimatorSet;
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
+import android.annotation.TargetApi;
+import android.app.Activity;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.SystemClock;
@@ -40,20 +43,50 @@ import android.view.animation.DecelerateInterpolator;
 import android.widget.Scroller;
 
 import com.android.camera.CameraActivity;
+import com.android.camera.data.LocalData.ActionCallback;
 import com.android.camera.debug.Log;
 import com.android.camera.filmstrip.DataAdapter;
 import com.android.camera.filmstrip.FilmstripController;
 import com.android.camera.filmstrip.ImageData;
 import com.android.camera.ui.FilmstripGestureRecognizer;
 import com.android.camera.ui.ZoomView;
+import com.android.camera.util.ApiHelper;
 import com.android.camera.util.CameraUtil;
 import com.android.camera2.R;
 
+import java.lang.ref.WeakReference;
 import java.util.ArrayDeque;
 import java.util.Arrays;
 import java.util.Queue;
 
 public class FilmstripView extends ViewGroup {
+    /**
+     * An action callback to be used for actions on the local media data items.
+     */
+    public static class ActionCallbackImpl implements ActionCallback {
+        private final WeakReference<Activity> mActivity;
+
+        /**
+         * The given activity is used to start intents. It is wrapped in a weak
+         * reference to prevent leaks.
+         */
+        public ActionCallbackImpl(Activity activity) {
+            mActivity = new WeakReference<Activity>(activity);
+        }
+
+        /**
+         * Fires an intent to play the video with the given URI and title.
+         */
+        @Override
+        public void playVideo(Uri uri, String title) {
+            Activity activity = mActivity.get();
+            if (activity != null) {
+              CameraUtil.playVideo(activity, uri, title);
+            }
+        }
+    }
+
+
     private static final Log.Tag TAG = new Log.Tag("FilmstripView");
 
     private static final int BUFFER_SIZE = 5;
@@ -84,6 +117,7 @@ public class FilmstripView extends ViewGroup {
     private static final int DECELERATION_FACTOR = 4;
 
     private CameraActivity mActivity;
+    private ActionCallback mActionCallback;
     private FilmstripGestureRecognizer mGestureRecognizer;
     private FilmstripGestureRecognizer.Listener mGestureListener;
     private DataAdapter mDataAdapter;
@@ -582,6 +616,7 @@ public class FilmstripView extends ViewGroup {
     private void init(CameraActivity cameraActivity) {
         setWillNotDraw(false);
         mActivity = cameraActivity;
+        mActionCallback = new ActionCallbackImpl(mActivity);
         mScale = 1.0f;
         mDataIdOnUserScrolling = 0;
         mController = new MyController(cameraActivity);
@@ -647,7 +682,7 @@ public class FilmstripView extends ViewGroup {
     }
 
     private void recycleView(View view, int dataId) {
-        final int viewType = (int) view.getTag(R.id.mediadata_tag_viewtype);
+        final int viewType = (Integer) view.getTag(R.id.mediadata_tag_viewtype);
         if (viewType > 0) {
             Queue<View> recycledViewsForType = recycledViews.get(viewType);
             if (recycledViewsForType == null) {
@@ -789,18 +824,29 @@ public class FilmstripView extends ViewGroup {
     }
 
     private ViewItem buildItemFromData(int dataID) {
+        if (mActivity.isDestroyed()) {
+            // Loading item data is call from multiple AsyncTasks and the
+            // activity may be finished when buildItemFromData is called.
+            Log.d(TAG, "Activity destroyed, don't load data");
+            return null;
+        }
         ImageData data = mDataAdapter.getImageData(dataID);
         if (data == null) {
             return null;
         }
 
-        int width = Math.round(mScale * getWidth());
-        int height = Math.round(mScale * getHeight());
+        // Always scale by fixed filmstrip scale, since we only show items when
+        // in filmstrip. Preloading images with a different scale and bounds
+        // interferes with caching.
+        int width = Math.round(FILM_STRIP_SCALE * getWidth());
+        int height = Math.round(FILM_STRIP_SCALE * getHeight());
+        Log.v(TAG, "suggesting item bounds: " + width + "x" + height);
         mDataAdapter.suggestViewSizeBound(width, height);
 
         data.prepare();
         View recycled = getRecycledView(dataID);
-        View v = mDataAdapter.getView(mActivity, recycled, dataID);
+        View v = mDataAdapter.getView(mActivity.getAndroidContext(), recycled, dataID,
+                mActionCallback);
         if (v == null) {
             return null;
         }
@@ -938,8 +984,17 @@ public class FilmstripView extends ViewGroup {
             }
             mViewItem[i].bringViewToFront();
         }
-        // ZoomView is a special case to always be in the front.
+        // ZoomView is a special case to always be in the front. In L set to
+        // max elevation to make sure ZoomView is above other elevated views.
         bringChildToFront(mZoomView);
+        if (ApiHelper.isLOrHigher()) {
+            setMaxElevation(mZoomView);
+        }
+    }
+
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+    private void setMaxElevation(View v) {
+        v.setElevation(Float.MAX_VALUE);
     }
 
     /**
@@ -1199,18 +1254,22 @@ public class FilmstripView extends ViewGroup {
                 // It's in full-screen mode.
                 fadeAndScaleRightViewItem(itemID);
             } else {
-                if (curr.getVisibility() == INVISIBLE) {
-                    curr.setVisibility(VISIBLE);
-                }
+                boolean setToVisible = (curr.getVisibility() == INVISIBLE);
+
                 if (itemID == mCurrentItem + 1) {
                     curr.setAlpha(1f - scaleFraction);
                 } else {
                     if (scaleFraction == 0f) {
                         curr.setAlpha(1f);
                     } else {
-                        curr.setVisibility(INVISIBLE);
+                        setToVisible = false;
                     }
                 }
+
+                if (setToVisible) {
+                    curr.setVisibility(VISIBLE);
+                }
+
                 curr.setTranslationX(
                         (mViewItem[mCurrentItem].getLeftPosition() - curr.getLeftPosition()) *
                                 scaleFraction);
@@ -1348,15 +1407,20 @@ public class FilmstripView extends ViewGroup {
             // The end of the filmstrip might have been changed.
             // The mCenterX might be out of the bound.
             ViewItem currItem = mViewItem[mCurrentItem];
-            if (currItem.getId() == mDataAdapter.getTotalNumber() - 1
-                    && mCenterX > currItem.getCenterX()) {
-                int adjustDiff = currItem.getCenterX() - mCenterX;
-                mCenterX = currItem.getCenterX();
-                for (int i = 0; i < BUFFER_SIZE; i++) {
-                    if (mViewItem[i] != null) {
-                        mViewItem[i].translateXScaledBy(adjustDiff);
+            if(currItem!=null) {
+                if (currItem.getId() == mDataAdapter.getTotalNumber() - 1
+                        && mCenterX > currItem.getCenterX()) {
+                    int adjustDiff = currItem.getCenterX() - mCenterX;
+                    mCenterX = currItem.getCenterX();
+                    for (int i = 0; i < BUFFER_SIZE; i++) {
+                        if (mViewItem[i] != null) {
+                            mViewItem[i].translateXScaledBy(adjustDiff);
+                        }
                     }
                 }
+            } else {
+                // CurrItem should NOT be NULL, but if is, at least don't crash.
+                Log.w(TAG,"Caught invalid update in removal animation.");
             }
         } else {
             // fill the removed place by right shift
@@ -1457,6 +1521,10 @@ public class FilmstripView extends ViewGroup {
                         getMeasuredWidth(), getMeasuredHeight());
         final int offsetX = dim.x + mViewGapInPixel;
         ViewItem viewItem = buildItemFromData(dataID);
+        if (viewItem == null) {
+            Log.w(TAG, "unable to build inserted item from data");
+            return;
+        }
 
         if (insertedItemId >= mCurrentItem) {
             if (insertedItemId == mCurrentItem) {
@@ -1871,7 +1939,7 @@ public class FilmstripView extends ViewGroup {
 
         MyController(Context context) {
             TimeInterpolator decelerateInterpolator = new DecelerateInterpolator(1.5f);
-            mScroller = new MyScroller(mActivity,
+            mScroller = new MyScroller(mActivity.getAndroidContext(),
                     new Handler(mActivity.getMainLooper()),
                     mScrollerListener, decelerateInterpolator);
             mCanStopScroll = true;
index fa88c88..2ba1398 100644 (file)
@@ -206,7 +206,7 @@ public class IndicatorIconController
         } else if (buttonManager.isEnabled(ButtonManager.BUTTON_HDR)
                 && buttonManager.isVisible(ButtonManager.BUTTON_HDR)) {
             setIndicatorState(SettingsManager.SCOPE_GLOBAL,
-                              Keys.KEY_CAMERA_HDR_PLUS, mHdrIndicator,
+                              Keys.KEY_CAMERA_HDR, mHdrIndicator,
                               mHdrIndicatorIcons, false);
         } else {
             changeVisibility(mHdrIndicator, View.GONE);
@@ -225,7 +225,7 @@ public class IndicatorIconController
         ButtonManager buttonManager = mController.getButtonManager();
         if (buttonManager.isPanoEnabled()) {
             setIndicatorState(SettingsManager.SCOPE_GLOBAL,
-                              Keys.KEY_CAMERA_HDR_PLUS, mPanoIndicator,
+                              Keys.KEY_CAMERA_PANO_ORIENTATION, mPanoIndicator,
                               mPanoIndicatorIcons, true);
         } else {
             changeVisibility(mPanoIndicator, View.GONE);
@@ -252,10 +252,9 @@ public class IndicatorIconController
         if (buttonManager.isEnabled(ButtonManager.BUTTON_EXPOSURE_COMPENSATION)
                 && buttonManager.isVisible(ButtonManager.BUTTON_EXPOSURE_COMPENSATION)) {
 
-            String compString = mController.getSettingsManager().getString(
-                mController.getCameraScope(), Keys.KEY_EXPOSURE);
-            int comp = Math.round(
-                    Integer.parseInt(compString) * buttonManager.getExposureCompensationStep());
+            int compValue = mController.getSettingsManager().getInteger(
+                    mController.getCameraScope(), Keys.KEY_EXPOSURE);
+            int comp = Math.round(compValue * buttonManager.getExposureCompensationStep());
 
             // Turn on the appropriate indicator.
             switch (comp) {
index c931dfb..1c0b7a3 100644 (file)
@@ -29,6 +29,8 @@ import android.view.View;
 import com.android.camera.util.CameraUtil;
 import com.android.camera2.R;
 
+import java.lang.ref.WeakReference;
+
 /**
  * This class is designed to show the video recording hint when device is held in
  * portrait before video recording. The rotation device indicator will start rotating
@@ -58,6 +60,87 @@ public class VideoRecordingHints extends View {
     private int mCenterY = UNSET;
     private int mLastOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
 
+    private static class RotationAnimatorListener implements Animator.AnimatorListener {
+        private final WeakReference<VideoRecordingHints> mHints;
+        private boolean mCanceled = false;
+
+        public RotationAnimatorListener(VideoRecordingHints hint) {
+            mHints = new WeakReference<VideoRecordingHints>(hint);
+        }
+
+        @Override
+        public void onAnimationStart(Animator animation) {
+            mCanceled = false;
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            VideoRecordingHints hint = mHints.get();
+            if (hint == null) {
+                return;
+            }
+
+            hint.mRotation = ((int) hint.mRotation) % 360;
+            // If animation is canceled, do not restart it.
+            if (mCanceled) {
+                return;
+            }
+            hint.post(new Runnable() {
+                @Override
+                public void run() {
+                    VideoRecordingHints hint = mHints.get();
+                    if (hint != null) {
+                        hint.continueRotationAnimation();
+                    }
+                }
+            });
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mCanceled = true;
+        }
+
+        @Override
+        public void onAnimationRepeat(Animator animation) {
+            // Do nothing.
+        }
+    }
+
+    private static class AlphaAnimatorListener implements Animator.AnimatorListener {
+        private final WeakReference<VideoRecordingHints> mHints;
+        AlphaAnimatorListener(VideoRecordingHints hint) {
+            mHints = new WeakReference<VideoRecordingHints>(hint);
+        }
+
+        @Override
+        public void onAnimationStart(Animator animation) {
+            // Do nothing.
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            VideoRecordingHints hint = mHints.get();
+            if (hint == null) {
+                return;
+            }
+
+            hint.invalidate();
+            hint.setAlpha(1f);
+            hint.mRotation = 0;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            // Do nothing.
+        }
+
+        @Override
+        public void onAnimationRepeat(Animator animation) {
+            // Do nothing.
+        }
+    }
+
     public VideoRecordingHints(Context context, AttributeSet attrs) {
         super(context, attrs);
         mRotateArrows = getResources().getDrawable(R.drawable.rotate_arrows);
@@ -80,64 +163,11 @@ public class VideoRecordingHints extends View {
             }
         });
 
-        mRotationAnimation.addListener(new Animator.AnimatorListener() {
-            private boolean mCanceled = false;
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mCanceled = false;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mRotation = ((int) mRotation) % 360;
-                // If animation is canceled, do not restart it.
-                if (mCanceled) {
-                    return;
-                }
-                post(new Runnable() {
-                    @Override
-                    public void run() {
-                        continueRotationAnimation();
-                    }
-                });
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCanceled = true;
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) {
-                // Do nothing.
-            }
-        });
+        mRotationAnimation.addListener(new RotationAnimatorListener(this));
 
         mAlphaAnimator = ObjectAnimator.ofFloat(this, "alpha", 1f, 0f);
         mAlphaAnimator.setDuration(FADE_OUT_DURATION_MS);
-        mAlphaAnimator.addListener(new Animator.AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                // Do nothing.
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                invalidate();
-                setAlpha(1f);
-                mRotation = 0;
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                // Do nothing.
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) {
-                // Do nothing.
-            }
-        });
+        mAlphaAnimator.addListener(new AlphaAnimatorListener(this));
         mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(context);
     }
 
index bec66d8..afb96b3 100644 (file)
 
 package com.android.camera.one.v2;
 
+import android.content.Context;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
 import android.util.DisplayMetrics;
 
+import com.android.camera.SoundPlayer;
 import com.android.camera.one.OneCamera;
 import com.android.camera.util.Size;
 
 public class OneCameraCreator {
-    public static OneCamera create(boolean enableHdrPlus, CameraDevice device,
+    public static OneCamera create(Context context, boolean useHdr, CameraDevice device,
             CameraCharacteristics characteristics, Size pictureSize, int maxMemoryMB,
-            DisplayMetrics displayMetrics) {
+            DisplayMetrics displayMetrics, SoundPlayer soundPlayer) {
+        // TODO: Might want to switch current camera to vendor HDR.
         return new OneCameraImpl(device, characteristics, pictureSize);
     }
 }
index 0a4af7d..0092ffa 100644 (file)
  */
 package com.android.camera.util;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 
+import com.android.camera2.R;
+
 /**
  * A helper class to provide Gallery related info.
  */
 public class GalleryHelper {
-    private static final String GALLERY_PACKAGE_NAME = "com.google.android.apps.plus";
+    private static final String GALLERY_PACKAGE_NAME = "com.android.gallery3d";
     private static final String GALLERY_ACTIVITY_CLASS =
-        "com.google.android.apps.photos.phone.PhotosLauncherActivity";
+        "com.android.gallery3d.app.GalleryActivity";
+    private static final int GALLERY_APP_NAME_ID = R.string.gallery_app_name;
 
     public static void setGalleryIntentClassName(Intent intent) {
         intent.setClassName(GALLERY_PACKAGE_NAME, GALLERY_ACTIVITY_CLASS);
@@ -44,6 +48,17 @@ public class GalleryHelper {
         return null;
     }
 
+    public static CharSequence getGalleryAppName(Context context, Intent galleryIntent) {
+        ComponentName componentName = galleryIntent.getComponent();
+        if (componentName != null
+                && GALLERY_PACKAGE_NAME.equals(componentName.getPackageName())
+                && GALLERY_ACTIVITY_CLASS.equals(componentName.getClassName())) {
+            return context.getResources().getString(GALLERY_APP_NAME_ID);
+        } else {
+            return null;
+        }
+    }
+
     public static void setContentUri(Intent intent, Uri uri) {
         // Do nothing.
     }
@@ -21,7 +21,7 @@ import android.app.Activity;
 import com.android.camera.data.LocalData;
 import com.android.camera.settings.SettingsManager;
 
-public class ReleaseDialogHelper {
+public class ReleaseHelper {
     public static void showReleaseInfoDialogOnStart(Activity activity,
             SettingsManager settingsManager) {
         // Do nothing.
@@ -34,4 +34,8 @@ public class ReleaseDialogHelper {
     public static boolean shouldShowReleaseInfoDialogOnShare(LocalData data) {
         return false;
     }
+
+    public static boolean shouldLogVerbose() {
+        return false;
+    }
 }
index d68dec9..6c208de 100644 (file)
@@ -26,6 +26,7 @@ import java.util.HashMap;
 
 public class UsageStatistics {
     public static final long VIEW_TIMEOUT_MILLIS = 0;
+    public static final int NONE = -1;
 
     private static UsageStatistics sInstance;
 
@@ -66,7 +67,7 @@ public class UsageStatistics {
                                       Boolean volumeButtonShutter) {
     }
 
-    public void cameraFailure(int cause, String info) {
+    public void cameraFailure(int cause, String info, int agentAction, int agentState) {
     }
 
     public void changeScreen(int newScreen, Integer interactionCause) {
index afb7eb3..292d2a6 100644 (file)
@@ -54,6 +54,8 @@ public class eventprotos {
             public static final int SECURITY = 10000;
             public static final int OPEN_FAILURE = 10000;
             public static final int RECONNECT_FAILURE = 10000;
+            public static final int API_RUNTIME_EXCEPTION = 10000;
+            public static final int API_TIMEOUT = 10000;
         }
     }
 
index 2b9a000..97d4b2c 100644 (file)
@@ -19,7 +19,6 @@ import android.content.ContentResolver;
 
 import com.android.camera.CameraModule;
 import com.android.camera.app.AppController;
-import com.android.camera.app.CameraServices;
 
 public class GcamHelper {
 
@@ -27,6 +26,10 @@ public class GcamHelper {
         return null;
     }
 
+    public static boolean hasGcamAsSeparateModule() {
+        return false;
+    }
+
     public static boolean hasGcamCapture() {
         return false;
     }
index cda858b..998551a 100755 (executable)
@@ -19,7 +19,9 @@ package com.android.camera.stress;
 import com.android.camera.CameraActivity;
 
 import android.app.Instrumentation;
+import android.content.Intent;
 import android.os.Environment;
+import android.provider.MediaStore;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.util.Log;
@@ -60,6 +62,12 @@ public class CameraLatency extends ActivityInstrumentationTestCase2 <CameraActiv
 
     @Override
     protected void setUp() throws Exception {
+        // Make sure camera starts with still picture capturing mode
+        Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setClass(getInstrumentation().getTargetContext(),
+                CameraActivity.class);
+        setActivityIntent(intent);
         getActivity();
         super.setUp();
     }