summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]Android.mk31
-rw-r--r--AndroidManifest.xml102
-rw-r--r--CleanSpec.mk2
-rw-r--r--gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java20
-rw-r--r--gallerycommon/src/com/android/gallery3d/exif/ExifTag.java43
-rw-r--r--proguard.flags8
-rw-r--r--res/drawable-hdpi/dropdown_ic_arrow_normal_holo_dark.pngbin508 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_overlay_gallery_camera.pngbin999 -> 457 bytes
-rw-r--r--res/drawable-hdpi/ic_cameraalbum_overlay.pngbin5618 -> 3698 bytes
-rw-r--r--res/drawable-hdpi/ic_media_bigscreen.pngbin0 -> 3454 bytes
-rw-r--r--res/drawable-hdpi/ic_media_cropscreen.pngbin0 -> 3444 bytes
-rw-r--r--res/drawable-hdpi/ic_media_fullscreen.pngbin0 -> 3359 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_disabled_forward.pngbin0 -> 3149 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_disabled_rewind.pngbin0 -> 3172 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_disabled_stop.pngbin0 -> 2863 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_display_bookmark.pngbin0 -> 1717 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_edit_holo_dark.pngbin1677 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_forward.pngbin0 -> 3088 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_loop.pngbin0 -> 2349 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_rewind.pngbin0 -> 3118 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_share_holo_light.pngbin1007 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_stop.pngbin0 -> 2864 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_trash_holo_light.pngbin970 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_unloop.pngbin0 -> 1814 bytes
-rw-r--r--res/drawable-hdpi/ic_photoeditor_makeup.pngbin0 -> 2181 bytes
-rw-r--r--res/drawable-hdpi/ic_separator_line.pngbin0 -> 2800 bytes
-rw-r--r--res/drawable-hdpi/ic_switch_camera.pngbin4685 -> 448 bytes
-rw-r--r--res/drawable-hdpi/ic_ts_makeup_bigeye.pngbin0 -> 3908 bytes
-rw-r--r--res/drawable-hdpi/ic_ts_makeup_soften.pngbin0 -> 3180 bytes
-rw-r--r--res/drawable-hdpi/ic_ts_makeup_trimface.pngbin0 -> 3648 bytes
-rw-r--r--res/drawable-hdpi/ic_ts_makeup_whiten.pngbin0 -> 4523 bytes
-rw-r--r--res/drawable-hdpi/ic_vidcontrol_disable_pause.pngbin0 -> 10169 bytes
-rw-r--r--res/drawable-hdpi/ic_vidcontrol_disable_play.pngbin0 -> 10669 bytes
-rw-r--r--res/drawable-hdpi/ic_vidcontrol_disable_reload.pngbin0 -> 11531 bytes
-rw-r--r--res/drawable-hdpi/knob.pngbin0 -> 51511 bytes
-rw-r--r--res/drawable-hdpi/knob_toggle_off.pngbin0 -> 3071 bytes
-rw-r--r--res/drawable-hdpi/knob_toggle_on.pngbin0 -> 3218 bytes
-rw-r--r--res/drawable-hdpi/media_default_bkg.9.pngbin0 -> 1680 bytes
-rw-r--r--res/drawable-hdpi/switch_thumb_activated.9.pngbin0 -> 5117 bytes
-rw-r--r--res/drawable-hdpi/switch_thumb_off.9.pngbin0 -> 5098 bytes
-rw-r--r--res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.pngbin443 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_overlay_gallery_camera.pngbin720 -> 305 bytes
-rw-r--r--res/drawable-mdpi/ic_cameraalbum_overlay.pngbin3506 -> 3376 bytes
-rw-r--r--res/drawable-mdpi/ic_media_bigscreen.pngbin0 -> 3207 bytes
-rw-r--r--res/drawable-mdpi/ic_media_cropscreen.pngbin0 -> 3239 bytes
-rw-r--r--res/drawable-mdpi/ic_media_fullscreen.pngbin0 -> 3234 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_camera_holo_light.pngbin763 -> 457 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_disabled_forward.pngbin0 -> 3009 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_disabled_rewind.pngbin0 -> 3043 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_disabled_stop.pngbin0 -> 2850 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_display_bookmark.pngbin0 -> 1709 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_edit_holo_dark.pngbin1136 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_forward.pngbin0 -> 2980 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_loop.pngbin0 -> 2048 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_rewind.pngbin0 -> 2984 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_share_holo_light.pngbin706 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_stop.pngbin0 -> 2841 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_trash_holo_light.pngbin726 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_unloop.pngbin0 -> 1593 bytes
-rw-r--r--res/drawable-mdpi/ic_photoeditor_makeup.pngbin0 -> 1728 bytes
-rw-r--r--res/drawable-mdpi/ic_switch_camera.pngbin2862 -> 326 bytes
-rw-r--r--res/drawable-mdpi/ic_ts_makeup_bigeye.pngbin0 -> 4756 bytes
-rw-r--r--res/drawable-mdpi/ic_ts_makeup_soften.pngbin0 -> 4224 bytes
-rw-r--r--res/drawable-mdpi/ic_ts_makeup_trimface.pngbin0 -> 4543 bytes
-rw-r--r--res/drawable-mdpi/ic_ts_makeup_whiten.pngbin0 -> 5074 bytes
-rw-r--r--res/drawable-mdpi/ic_vidcontrol_disable_pause.pngbin0 -> 7280 bytes
-rw-r--r--res/drawable-mdpi/ic_vidcontrol_disable_play.pngbin0 -> 7538 bytes
-rw-r--r--res/drawable-mdpi/ic_vidcontrol_disable_reload.pngbin0 -> 8041 bytes
-rw-r--r--res/drawable-mdpi/media_default_bkg.9.pngbin0 -> 1045 bytes
-rw-r--r--res/drawable-sw600dp/ic_vidcontrol_disable_pause.pngbin0 -> 10169 bytes
-rw-r--r--res/drawable-sw600dp/ic_vidcontrol_disable_play.pngbin0 -> 10669 bytes
-rw-r--r--res/drawable-sw600dp/ic_vidcontrol_disable_reload.pngbin0 -> 11531 bytes
-rw-r--r--res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.pngbin810 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/frame_overlay_gallery_camera.pngbin1284 -> 457 bytes
-rw-r--r--res/drawable-xhdpi/ic_cameraalbum_overlay.pngbin7705 -> 3985 bytes
-rw-r--r--res/drawable-xhdpi/ic_media_bigscreen.pngbin0 -> 3641 bytes
-rw-r--r--res/drawable-xhdpi/ic_media_cropscreen.pngbin0 -> 3705 bytes
-rw-r--r--res/drawable-xhdpi/ic_media_fullscreen.pngbin0 -> 3600 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_camera_holo_light.pngbin0 -> 781 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_disabled_forward.pngbin0 -> 3268 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_disabled_rewind.pngbin0 -> 3266 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_disabled_stop.pngbin0 -> 2904 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_display_bookmark.pngbin0 -> 2460 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_edit_holo_dark.pngbin2303 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_forward.pngbin0 -> 3246 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_loop.pngbin0 -> 3573 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_rewind.pngbin0 -> 3227 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_stop.pngbin0 -> 2904 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_unloop.pngbin0 -> 2465 bytes
-rw-r--r--res/drawable-xhdpi/ic_photoeditor_makeup.pngbin0 -> 2650 bytes
-rw-r--r--res/drawable-xhdpi/ic_switch_camera.pngbin6819 -> 533 bytes
-rw-r--r--res/drawable-xhdpi/ic_ts_makeup_bigeye.pngbin0 -> 7118 bytes
-rw-r--r--res/drawable-xhdpi/ic_ts_makeup_soften.pngbin0 -> 5782 bytes
-rw-r--r--res/drawable-xhdpi/ic_ts_makeup_trimface.pngbin0 -> 6552 bytes
-rw-r--r--res/drawable-xhdpi/ic_ts_makeup_whiten.pngbin0 -> 7779 bytes
-rw-r--r--res/drawable-xhdpi/ic_vidcontrol_disable_pause.pngbin0 -> 14273 bytes
-rw-r--r--res/drawable-xhdpi/ic_vidcontrol_disable_play.pngbin0 -> 15105 bytes
-rw-r--r--res/drawable-xhdpi/ic_vidcontrol_disable_reload.pngbin0 -> 16055 bytes
-rw-r--r--res/drawable-xxhdpi/ic_cameraalbum_overlay.pngbin0 -> 2039 bytes
-rw-r--r--res/drawable-xxhdpi/ic_photoeditor_makeup_xx.pngbin0 -> 3798 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_cameraalbum_overlay.pngbin0 -> 2399 bytes
-rw-r--r--res/drawable/dropdown_ic_arrow.xml11
-rw-r--r--res/drawable/fab_accent.xml19
-rw-r--r--res/drawable/filtershow_background.pngbin1863 -> 0 bytes
-rw-r--r--res/drawable/filtershow_background_new.pngbin2902 -> 0 bytes
-rw-r--r--res/drawable/floating_action_button.xml24
-rw-r--r--res/drawable/ic_edit.xml14
-rw-r--r--res/drawable/ic_menu_share.xml18
-rw-r--r--res/drawable/ic_menu_single_track.xml15
-rw-r--r--res/drawable/ic_menu_stereo.xml16
-rw-r--r--res/drawable/ic_menu_trash.xml12
-rw-r--r--res/drawable/icn_media_forward.xml22
-rw-r--r--res/drawable/icn_media_rewind.xml22
-rw-r--r--res/drawable/icn_media_stop.xml22
-rw-r--r--res/drawable/videoplayer_pause.xml22
-rw-r--r--res/drawable/videoplayer_play.xml22
-rw-r--r--res/drawable/videoplayer_reload.xml22
-rw-r--r--res/layout-land/camera_controls.xml10
-rw-r--r--res/layout-land/filtershow_activity.xml4
-rw-r--r--res/layout-land/filtershow_color_border_ui.xml42
-rw-r--r--res/layout-land/filtershow_draw_ui.xml30
-rw-r--r--res/layout-land/filtershow_grad_ui.xml30
-rw-r--r--res/layout-land/filtershow_main_panel.xml10
-rw-r--r--res/layout-land/filtershow_saturation_controls.xml28
-rw-r--r--res/layout-land/filtershow_vignette_controls.xml20
-rw-r--r--res/layout-land/keyguard_widget.xml16
-rw-r--r--res/layout-land/review_module_control.xml10
-rw-r--r--res/layout-land/switcher_popup.xml6
-rw-r--r--res/layout-port/camera_controls.xml2
-rw-r--r--res/layout-port/keyguard_widget.xml8
-rw-r--r--res/layout-port/review_module_control.xml4
-rw-r--r--res/layout-port/switcher_popup.xml6
-rw-r--r--res/layout/action_bar_text.xml4
-rw-r--r--res/layout/action_bar_two_line_text.xml4
-rw-r--r--res/layout/action_mode.xml47
-rw-r--r--res/layout/album_header.xml4
-rw-r--r--res/layout/appwidget_main.xml1
-rw-r--r--res/layout/audio_effects_dialog.xml72
-rw-r--r--res/layout/audio_effects_title.xml60
-rw-r--r--res/layout/bookmark.xml21
-rw-r--r--res/layout/bookmark_edit_dialog.xml43
-rw-r--r--res/layout/bookmark_item.xml21
-rw-r--r--res/layout/camera_filmstrip.xml12
-rw-r--r--res/layout/choose_widget_type.xml8
-rw-r--r--res/layout/count_down_to_capture.xml2
-rw-r--r--res/layout/countdown_setting_popup.xml4
-rw-r--r--res/layout/dialog_picker.xml4
-rw-r--r--res/layout/editor_grad_button.xml2
-rw-r--r--res/layout/filtershow_actionbar.xml3
-rw-r--r--res/layout/filtershow_activity.xml4
-rw-r--r--res/layout/filtershow_color_picker.xml6
-rw-r--r--res/layout/filtershow_control_action_slider.xml2
-rw-r--r--res/layout/filtershow_control_color_chooser.xml10
-rw-r--r--res/layout/filtershow_control_style_chooser.xml2
-rw-r--r--res/layout/filtershow_control_title_slider.xml8
-rw-r--r--res/layout/filtershow_cp_custom_title.xml4
-rw-r--r--res/layout/filtershow_export_dialog.xml4
-rw-r--r--res/layout/filtershow_info_panel.xml2
-rw-r--r--res/layout/filtershow_main_panel.xml13
-rw-r--r--res/layout/filtershow_presets_management_row.xml2
-rw-r--r--res/layout/filtershow_splashscreen.xml2
-rw-r--r--res/layout/ingest_date_tile.xml2
-rw-r--r--res/layout/ingest_fullsize.xml2
-rw-r--r--res/layout/knob.xml75
-rw-r--r--res/layout/main.xml4
-rw-r--r--res/layout/manage_offline_bar.xml10
-rw-r--r--res/layout/menu_indicators_keyguard.xml8
-rw-r--r--res/layout/movie_view.xml2
-rw-r--r--res/layout/multigrid_content.xml6
-rwxr-xr-xres/layout/photo_frame.xml4
-rw-r--r--res/layout/photopage_bottom_controls.xml118
-rw-r--r--res/layout/photopage_progress_bar.xml6
-rw-r--r--res/layout/popup_list_item.xml4
-rw-r--r--res/layout/rotate_dialog.xml4
-rw-r--r--res/layout/setting_list.xml26
-rw-r--r--res/layout/time_interval_picker.xml6
-rw-r--r--res/layout/time_interval_popup.xml8
-rw-r--r--res/layout/trim_menu.xml4
-rw-r--r--res/layout/undo_bar.xml2
-rw-r--r--res/layout/view_gif_image.xml17
-rw-r--r--res/layout/viewfinder_labels_video.xml2
-rw-r--r--res/menu/albumset.xml18
-rw-r--r--res/menu/movie.xml2
-rw-r--r--res/menu/operation.xml6
-rw-r--r--res/menu/photo.xml6
-rw-r--r--res/mipmap-hdpi/ic_launcher_gallery.pngbin20425 -> 23319 bytes
-rw-r--r--res/mipmap-mdpi/ic_launcher_gallery.pngbin17130 -> 22680 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_gallery.pngbin24283 -> 23838 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_launcher_gallery.pngbin0 -> 25151 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_launcher_gallery.pngbin0 -> 26425 bytes
-rw-r--r--res/values-af/cm_strings.xml21
-rw-r--r--res/values-af/codeaurora_strings.xml94
-rw-r--r--res/values-am/cm_strings.xml (renamed from res/drawable/filtershow_tiled_background.xml)11
-rw-r--r--res/values-am/codeaurora_strings.xml43
-rw-r--r--res/values-ar/cm_strings.xml21
-rw-r--r--res/values-ar/codeaurora_strings.xml95
-rw-r--r--res/values-as-rIN/cm_strings.xml20
-rw-r--r--res/values-as-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-ast-rES/cm_strings.xml21
-rw-r--r--res/values-ast-rES/codeaurora_strings.xml94
-rw-r--r--res/values-ast-rES/filtershow_strings.xml294
-rw-r--r--res/values-ast-rES/strings.xml850
-rw-r--r--res/values-az-rAZ/cm_strings.xml21
-rw-r--r--res/values-az-rAZ/codeaurora_strings.xml94
-rw-r--r--res/values-be/cm_strings.xml21
-rw-r--r--res/values-be/codeaurora_strings.xml94
-rw-r--r--res/values-be/filtershow_strings.xml162
-rw-r--r--res/values-be/strings.xml468
-rw-r--r--res/values-bg/cm_strings.xml21
-rw-r--r--res/values-bg/codeaurora_strings.xml94
-rw-r--r--res/values-bn-rBD/cm_strings.xml21
-rw-r--r--res/values-bn-rBD/codeaurora_strings.xml43
-rw-r--r--res/values-br-rFR/cm_strings.xml20
-rw-r--r--res/values-br-rFR/codeaurora_strings.xml43
-rw-r--r--res/values-br-rFR/filtershow_strings.xml162
-rw-r--r--res/values-br-rFR/strings.xml468
-rw-r--r--res/values-ca/cm_strings.xml21
-rw-r--r--res/values-ca/codeaurora_strings.xml94
-rw-r--r--res/values-cs/cm_strings.xml21
-rw-r--r--res/values-cs/codeaurora_strings.xml94
-rw-r--r--res/values-cy/cm_strings.xml20
-rw-r--r--res/values-cy/codeaurora_strings.xml43
-rw-r--r--res/values-cy/filtershow_strings.xml162
-rw-r--r--res/values-cy/strings.xml468
-rw-r--r--res/values-da/cm_strings.xml21
-rw-r--r--res/values-da/codeaurora_strings.xml94
-rw-r--r--res/values-de/cm_strings.xml21
-rw-r--r--res/values-de/codeaurora_strings.xml94
-rw-r--r--res/values-el/cm_strings.xml21
-rw-r--r--res/values-el/codeaurora_strings.xml94
-rw-r--r--res/values-el/strings.xml6
-rw-r--r--res/values-en-rAU/cm_strings.xml21
-rw-r--r--res/values-en-rAU/codeaurora_strings.xml92
-rw-r--r--res/values-en-rGB/cm_strings.xml20
-rw-r--r--res/values-en-rGB/codeaurora_strings.xml43
-rw-r--r--res/values-en-rIN/cm_strings.xml21
-rw-r--r--res/values-en-rIN/codeaurora_strings.xml94
-rw-r--r--res/values-en-rPT/cm_strings.xml20
-rw-r--r--res/values-en-rPT/codeaurora_strings.xml43
-rw-r--r--res/values-en-rPT/filtershow_strings.xml162
-rw-r--r--res/values-en-rPT/strings.xml468
-rw-r--r--res/values-eo/cm_strings.xml21
-rw-r--r--res/values-eo/codeaurora_strings.xml92
-rw-r--r--res/values-eo/filtershow_strings.xml162
-rw-r--r--res/values-eo/strings.xml468
-rw-r--r--res/values-es-rMX/cm_strings.xml20
-rw-r--r--res/values-es-rMX/codeaurora_strings.xml43
-rw-r--r--res/values-es-rMX/filtershow_strings.xml162
-rw-r--r--res/values-es-rMX/strings.xml468
-rw-r--r--res/values-es-rUS/cm_strings.xml21
-rw-r--r--res/values-es-rUS/codeaurora_strings.xml50
-rw-r--r--res/values-es/cm_strings.xml21
-rw-r--r--res/values-es/codeaurora_strings.xml94
-rw-r--r--res/values-et-rEE/cm_strings.xml21
-rw-r--r--res/values-et-rEE/codeaurora_strings.xml94
-rw-r--r--res/values-eu-rES/cm_strings.xml21
-rw-r--r--res/values-eu-rES/codeaurora_strings.xml94
-rw-r--r--res/values-fa/cm_strings.xml21
-rw-r--r--res/values-fa/codeaurora_strings.xml94
-rw-r--r--res/values-fi/cm_strings.xml21
-rw-r--r--res/values-fi/codeaurora_strings.xml94
-rw-r--r--res/values-fil-rPH/cm_strings.xml20
-rw-r--r--res/values-fil-rPH/codeaurora_strings.xml43
-rw-r--r--res/values-fr-rCA/cm_strings.xml20
-rw-r--r--res/values-fr-rCA/codeaurora_strings.xml43
-rw-r--r--res/values-fr/cm_strings.xml21
-rw-r--r--res/values-fr/codeaurora_strings.xml94
-rw-r--r--res/values-fy-rNL/cm_strings.xml20
-rw-r--r--res/values-fy-rNL/codeaurora_strings.xml45
-rw-r--r--res/values-fy-rNL/filtershow_strings.xml162
-rw-r--r--res/values-fy-rNL/strings.xml468
-rw-r--r--res/values-gd-rGB/cm_strings.xml20
-rw-r--r--res/values-gd-rGB/codeaurora_strings.xml43
-rw-r--r--res/values-gd-rGB/filtershow_strings.xml162
-rw-r--r--res/values-gd-rGB/strings.xml468
-rw-r--r--res/values-gl-rES/cm_strings.xml21
-rw-r--r--res/values-gl-rES/codeaurora_strings.xml94
-rw-r--r--res/values-gu-rIN/cm_strings.xml20
-rw-r--r--res/values-gu-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-hi/cm_strings.xml21
-rw-r--r--res/values-hi/codeaurora_strings.xml92
-rw-r--r--res/values-hr/cm_strings.xml21
-rw-r--r--res/values-hr/codeaurora_strings.xml94
-rw-r--r--res/values-hu/cm_strings.xml21
-rw-r--r--res/values-hu/codeaurora_strings.xml94
-rw-r--r--res/values-hy-rAM/cm_strings.xml20
-rw-r--r--res/values-hy-rAM/codeaurora_strings.xml43
-rw-r--r--res/values-in/cm_strings.xml21
-rw-r--r--res/values-in/codeaurora_strings.xml92
-rw-r--r--res/values-is-rIS/cm_strings.xml20
-rw-r--r--res/values-is-rIS/codeaurora_strings.xml43
-rw-r--r--res/values-it/cm_strings.xml21
-rw-r--r--res/values-it/codeaurora_strings.xml94
-rw-r--r--res/values-iw/cm_strings.xml21
-rw-r--r--res/values-iw/codeaurora_strings.xml94
-rw-r--r--res/values-ja/cm_strings.xml21
-rw-r--r--res/values-ja/codeaurora_strings.xml94
-rw-r--r--res/values-ka-rGE/cm_strings.xml20
-rw-r--r--res/values-ka-rGE/codeaurora_strings.xml43
-rw-r--r--res/values-kk-rKZ/cm_strings.xml20
-rw-r--r--res/values-kk-rKZ/codeaurora_strings.xml43
-rw-r--r--res/values-km-rKH/cm_strings.xml20
-rw-r--r--res/values-km-rKH/codeaurora_strings.xml43
-rw-r--r--res/values-kn-rIN/cm_strings.xml21
-rw-r--r--res/values-kn-rIN/codeaurora_strings.xml94
-rw-r--r--res/values-ko/cm_strings.xml21
-rw-r--r--res/values-ko/codeaurora_strings.xml94
-rw-r--r--res/values-ku/cm_strings.xml21
-rw-r--r--res/values-ku/codeaurora_strings.xml92
-rw-r--r--res/values-ku/filtershow_strings.xml292
-rw-r--r--res/values-ku/strings.xml852
-rw-r--r--res/values-ky-rKG/cm_strings.xml20
-rw-r--r--res/values-ky-rKG/codeaurora_strings.xml43
-rw-r--r--res/values-land/styles.xml14
-rw-r--r--res/values-lb/cm_strings.xml21
-rw-r--r--res/values-lb/codeaurora_strings.xml94
-rw-r--r--res/values-lb/filtershow_strings.xml294
-rw-r--r--res/values-lb/strings.xml856
-rw-r--r--res/values-lo-rLA/cm_strings.xml20
-rw-r--r--res/values-lo-rLA/codeaurora_strings.xml43
-rw-r--r--res/values-lt/cm_strings.xml21
-rw-r--r--res/values-lt/codeaurora_strings.xml94
-rw-r--r--res/values-lv/cm_strings.xml21
-rw-r--r--res/values-lv/codeaurora_strings.xml92
-rw-r--r--res/values-mk-rMK/cm_strings.xml20
-rw-r--r--res/values-mk-rMK/codeaurora_strings.xml43
-rw-r--r--res/values-ml-rIN/cm_strings.xml20
-rw-r--r--res/values-ml-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-mn-rMN/cm_strings.xml20
-rw-r--r--res/values-mn-rMN/codeaurora_strings.xml43
-rw-r--r--res/values-mr-rIN/cm_strings.xml20
-rw-r--r--res/values-mr-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-ms-rMY/cm_strings.xml20
-rw-r--r--res/values-ms-rMY/codeaurora_strings.xml43
-rw-r--r--res/values-my-rMM/cm_strings.xml20
-rw-r--r--res/values-my-rMM/codeaurora_strings.xml43
-rw-r--r--res/values-nb/cm_strings.xml21
-rw-r--r--res/values-nb/codeaurora_strings.xml94
-rw-r--r--res/values-ne-rNP/cm_strings.xml20
-rw-r--r--res/values-ne-rNP/codeaurora_strings.xml43
-rw-r--r--res/values-nl/cm_strings.xml21
-rw-r--r--res/values-nl/codeaurora_strings.xml94
-rw-r--r--res/values-oc-rFR/cm_strings.xml20
-rw-r--r--res/values-oc-rFR/codeaurora_strings.xml43
-rw-r--r--res/values-oc-rFR/filtershow_strings.xml162
-rw-r--r--res/values-oc-rFR/strings.xml468
-rw-r--r--res/values-or-rIN/cm_strings.xml20
-rw-r--r--res/values-or-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-pa-rIN/cm_strings.xml20
-rw-r--r--res/values-pa-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-pl/cm_strings.xml21
-rw-r--r--res/values-pl/codeaurora_strings.xml94
-rw-r--r--res/values-port/styles.xml6
-rw-r--r--res/values-pt-rBR/cm_strings.xml21
-rw-r--r--res/values-pt-rBR/codeaurora_strings.xml94
-rw-r--r--res/values-pt-rPT/cm_strings.xml21
-rw-r--r--res/values-pt-rPT/codeaurora_strings.xml94
-rw-r--r--res/values-rm/cm_strings.xml20
-rw-r--r--res/values-rm/codeaurora_strings.xml43
-rw-r--r--res/values-ro/cm_strings.xml21
-rw-r--r--res/values-ro/codeaurora_strings.xml94
-rw-r--r--res/values-ru/cm_strings.xml21
-rw-r--r--res/values-ru/codeaurora_strings.xml94
-rw-r--r--res/values-si-rLK/cm_strings.xml21
-rw-r--r--res/values-si-rLK/codeaurora_strings.xml87
-rw-r--r--res/values-sk/cm_strings.xml21
-rw-r--r--res/values-sk/codeaurora_strings.xml94
-rw-r--r--res/values-sl/cm_strings.xml21
-rw-r--r--res/values-sl/codeaurora_strings.xml93
-rw-r--r--res/values-sq-rAL/cm_strings.xml20
-rw-r--r--res/values-sq-rAL/codeaurora_strings.xml43
-rw-r--r--res/values-sr/cm_strings.xml21
-rw-r--r--res/values-sr/codeaurora_strings.xml94
-rw-r--r--res/values-sv/cm_strings.xml21
-rw-r--r--res/values-sv/codeaurora_strings.xml94
-rw-r--r--res/values-sw/cm_strings.xml20
-rw-r--r--res/values-sw/codeaurora_strings.xml43
-rw-r--r--res/values-ta-rIN/cm_strings.xml20
-rw-r--r--res/values-ta-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-te-rIN/cm_strings.xml20
-rw-r--r--res/values-te-rIN/codeaurora_strings.xml43
-rw-r--r--res/values-th/cm_strings.xml21
-rw-r--r--res/values-th/codeaurora_strings.xml94
-rw-r--r--res/values-tr/cm_strings.xml21
-rw-r--r--res/values-tr/codeaurora_strings.xml94
-rw-r--r--res/values-ug/cm_strings.xml21
-rw-r--r--res/values-ug/codeaurora_strings.xml92
-rw-r--r--res/values-ug/filtershow_strings.xml291
-rw-r--r--res/values-ug/strings.xml840
-rw-r--r--res/values-uk/cm_strings.xml21
-rw-r--r--res/values-uk/codeaurora_strings.xml94
-rw-r--r--res/values-ur-rPK/cm_strings.xml20
-rw-r--r--res/values-ur-rPK/codeaurora_strings.xml43
-rw-r--r--res/values-uz-rUZ/cm_strings.xml20
-rw-r--r--res/values-uz-rUZ/codeaurora_strings.xml43
-rw-r--r--res/values-v21/colors.xml50
-rw-r--r--res/values-v21/styles.xml64
-rw-r--r--res/values-vi/cm_strings.xml21
-rw-r--r--res/values-vi/codeaurora_strings.xml94
-rw-r--r--res/values-xlarge/dimensions.xml4
-rw-r--r--res/values-zh-rCN/cm_strings.xml21
-rw-r--r--res/values-zh-rCN/codeaurora_strings.xml94
-rwxr-xr-x[-rw-r--r--]res/values-zh-rCN/strings.xml6
-rw-r--r--res/values-zh-rHK/cm_strings.xml20
-rw-r--r--res/values-zh-rHK/codeaurora_strings.xml90
-rwxr-xr-x[-rw-r--r--]res/values-zh-rHK/strings.xml1
-rw-r--r--res/values-zh-rTW/cm_strings.xml21
-rw-r--r--res/values-zh-rTW/codeaurora_strings.xml92
-rwxr-xr-x[-rw-r--r--]res/values-zh-rTW/strings.xml1
-rw-r--r--res/values-zu/cm_strings.xml20
-rw-r--r--res/values-zu/codeaurora_strings.xml43
-rw-r--r--res/values/attrs.xml6
-rwxr-xr-x[-rw-r--r--]res/values/bool.xml7
-rw-r--r--res/values/cm_strings.xml20
-rw-r--r--res/values/codeaurora_strings.xml110
-rw-r--r--res/values/colors.xml9
-rw-r--r--res/values/config.xml8
-rw-r--r--res/values/dimens.xml36
-rw-r--r--res/values/filtershow_color.xml16
-rw-r--r--res/values/filtershow_ids.xml1
-rw-r--r--res/values/filtershow_strings.xml2
-rw-r--r--res/values/iconbutton_styles.xml4
-rwxr-xr-x[-rw-r--r--]res/values/strings.xml12
-rw-r--r--res/values/styles.xml44
-rw-r--r--res/xml/file_paths.xml18
-rw-r--r--res/xml/rtsp_settings_preferences.xml39
-rw-r--r--slim_manifest/AndroidManifest.xml246
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java66
-rw-r--r--src/com/android/gallery3d/app/AlbumDataLoader.java7
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java85
-rw-r--r--src/com/android/gallery3d/app/AlbumSetPage.java32
-rw-r--r--src/com/android/gallery3d/app/CommonControllerOverlay.java16
-rw-r--r--src/com/android/gallery3d/app/Config.java17
-rw-r--r--src/com/android/gallery3d/app/ControllerOverlay.java8
-rw-r--r--src/com/android/gallery3d/app/GalleryActionBar.java8
-rw-r--r--src/com/android/gallery3d/app/GalleryActivity.java5
-rw-r--r--src/com/android/gallery3d/app/GalleryAppImpl.java6
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java594
-rw-r--r--src/com/android/gallery3d/app/MovieControllerOverlay.java837
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/MoviePlayer.java1251
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/MuteVideo.java53
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/PhotoDataAdapter.java126
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/PhotoPage.java97
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/SinglePhotoDataAdapter.java17
-rw-r--r--src/com/android/gallery3d/app/StorageChangeReceiver.java39
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/TimeBar.java373
-rw-r--r--src/com/android/gallery3d/app/TrimControllerOverlay.java10
-rw-r--r--src/com/android/gallery3d/app/TrimVideo.java33
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/app/VideoUtils.java20
-rw-r--r--src/com/android/gallery3d/app/Wallpaper.java38
-rw-r--r--src/com/android/gallery3d/data/DecodeUtils.java44
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/data/FaceClustering.java2
-rw-r--r--src/com/android/gallery3d/data/FilterDeleteSet.java5
-rw-r--r--src/com/android/gallery3d/data/LocalAlbum.java6
-rw-r--r--src/com/android/gallery3d/data/LocalAlbumSet.java2
-rw-r--r--src/com/android/gallery3d/data/MediaDetails.java29
-rw-r--r--src/com/android/gallery3d/data/MediaItem.java1
-rw-r--r--src/com/android/gallery3d/data/MediaSet.java5
-rw-r--r--src/com/android/gallery3d/data/SecureAlbum.java2
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java74
-rw-r--r--src/com/android/gallery3d/filtershow/cache/ImageLoader.java6
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryAdapter.java3
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryPanel.java11
-rw-r--r--src/com/android/gallery3d/filtershow/category/MainPanel.java41
-rw-r--r--src/com/android/gallery3d/filtershow/controller/ColorChooser.java9
-rw-r--r--src/com/android/gallery3d/filtershow/controller/StyleChooser.java2
-rw-r--r--src/com/android/gallery3d/filtershow/crop/CropActivity.java25
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorMakeup.java44
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorPanel.java2
-rw-r--r--src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java21
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterCropRepresentation.java3
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java13
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java1
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilter.java2
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java17
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java12
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterDraw.java7
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java13
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java54
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java52
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java55
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java53
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java5
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java7
-rw-r--r--src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java82
-rw-r--r--src/com/android/gallery3d/filtershow/history/HistoryManager.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java7
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/Buffer.java4
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java8
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java2
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java12
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/PipelineInterface.java4
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java2
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java5
-rw-r--r--src/com/android/gallery3d/filtershow/state/StatePanel.java4
-rw-r--r--src/com/android/gallery3d/filtershow/tools/SaveImage.java14
-rw-r--r--src/com/android/gallery3d/filtershow/ui/ExportDialog.java8
-rw-r--r--src/com/android/gallery3d/gadget/WidgetClickHandler.java2
-rw-r--r--src/com/android/gallery3d/gadget/WidgetConfigure.java176
-rw-r--r--src/com/android/gallery3d/gadget/WidgetService.java8
-rw-r--r--src/com/android/gallery3d/glrenderer/UploadedTexture.java7
-rw-r--r--src/com/android/gallery3d/ui/ActionModeHandler.java2
-rw-r--r--src/com/android/gallery3d/ui/AlbumLabelMaker.java79
-rw-r--r--src/com/android/gallery3d/ui/DetailsHelper.java2
-rw-r--r--src/com/android/gallery3d/ui/DialogDetailsView.java34
-rw-r--r--src/com/android/gallery3d/ui/Knob.java337
-rw-r--r--src/com/android/gallery3d/ui/Paper.java62
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/ui/PhotoView.java22
-rw-r--r--src/com/android/gallery3d/ui/SlotView.java112
-rwxr-xr-xsrc/com/android/gallery3d/util/GIFView.java214
-rw-r--r--src/com/android/gallery3d/util/GalleryUtils.java21
-rw-r--r--src/com/android/gallery3d/util/GifAction.java5
-rwxr-xr-xsrc/com/android/gallery3d/util/GifDecoder.java723
-rwxr-xr-xsrc/com/android/gallery3d/util/GifFrame.java17
-rw-r--r--src/com/android/gallery3d/util/MediaSetUtils.java21
-rwxr-xr-xsrc/com/android/gallery3d/util/ViewGifImage.java67
-rw-r--r--src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java79
-rw-r--r--src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java39
-rw-r--r--src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java87
-rw-r--r--src/org/codeaurora/gallery3d/ext/ActivityHooker.java96
-rw-r--r--src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java150
-rw-r--r--src/org/codeaurora/gallery3d/ext/IActivityHooker.java128
-rw-r--r--src/org/codeaurora/gallery3d/ext/IContrllerOverlayExt.java51
-rw-r--r--src/org/codeaurora/gallery3d/ext/IMovieItem.java66
-rw-r--r--src/org/codeaurora/gallery3d/ext/IMovieList.java46
-rw-r--r--src/org/codeaurora/gallery3d/ext/IMovieListLoader.java51
-rw-r--r--src/org/codeaurora/gallery3d/ext/IMoviePlayer.java42
-rw-r--r--src/org/codeaurora/gallery3d/ext/MovieItem.java115
-rw-r--r--src/org/codeaurora/gallery3d/ext/MovieList.java72
-rw-r--r--src/org/codeaurora/gallery3d/ext/MovieListLoader.java269
-rw-r--r--src/org/codeaurora/gallery3d/ext/MovieUtils.java98
-rw-r--r--src/org/codeaurora/gallery3d/video/BookmarkActivity.java244
-rw-r--r--src/org/codeaurora/gallery3d/video/BookmarkEnhance.java138
-rw-r--r--src/org/codeaurora/gallery3d/video/BookmarkHooker.java76
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/CodeauroraVideoView.java1074
-rw-r--r--src/org/codeaurora/gallery3d/video/DmReceiver.java65
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/ExtensionHelper.java72
-rw-r--r--src/org/codeaurora/gallery3d/video/IControllerRewindAndForward.java35
-rw-r--r--src/org/codeaurora/gallery3d/video/LoopVideoHooker.java60
-rw-r--r--src/org/codeaurora/gallery3d/video/MovieHooker.java44
-rw-r--r--src/org/codeaurora/gallery3d/video/MovieListHooker.java116
-rw-r--r--src/org/codeaurora/gallery3d/video/MovieTitleHelper.java108
-rw-r--r--src/org/codeaurora/gallery3d/video/ScreenModeManager.java117
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/SettingsActivity.java308
-rw-r--r--src/org/codeaurora/gallery3d/video/SpeakerHooker.java210
-rw-r--r--src/org/codeaurora/gallery3d/video/StepOptionDialogFragment.java83
-rw-r--r--src/org/codeaurora/gallery3d/video/StepOptionSettingsHooker.java41
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/StereoAudioHooker.java118
-rwxr-xr-xsrc/org/codeaurora/gallery3d/video/StreamingHooker.java86
-rw-r--r--src/org/codeaurora/gallery3d/video/VideoSettingsActivity.java182
551 files changed, 31206 insertions, 809 deletions
diff --git a/Android.mk b/Android.mk
index 308851225..106299d31 100644..100755
--- a/Android.mk
+++ b/Android.mk
@@ -4,23 +4,14 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
+LOCAL_JAVA_LIBRARIES := telephony-common
+
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += com.android.gallery3d.common2
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
LOCAL_STATIC_JAVA_LIBRARIES += mp4parser
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v8-renderscript
-
-LOCAL_RENDERSCRIPT_TARGET_API := 18
-LOCAL_RENDERSCRIPT_COMPATIBILITY := 18
-LOCAL_RENDERSCRIPT_FLAGS := -rs-package-name=android.support.v8.renderscript
-
-# Keep track of previously compiled RS files too (from bundled GalleryGoogle).
-prev_compiled_rs_files := $(call all-renderscript-files-under, src)
-# We already have these files from GalleryGoogle, so don't install them.
-LOCAL_RENDERSCRIPT_SKIP_INSTALL := $(prev_compiled_rs_files)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(prev_compiled_rs_files)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd)
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
@@ -29,12 +20,26 @@ LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_PACKAGE_NAME := Gallery2
+LOCAL_CERTIFICATE := platform
+
LOCAL_OVERRIDES_PACKAGES := Gallery Gallery3D GalleryNew3D
-LOCAL_SDK_VERSION := current
+LOCAL_PROGUARD_ENABLED := disabled
+
+#LOCAL_SDK_VERSION := current
LOCAL_JNI_SHARED_LIBRARIES := libjni_eglfence libjni_filtershow_filters librsjni libjni_jpegstream
+ifeq ($(TARGET_TS_MAKEUP), true)
+ LOCAL_REQUIRED_MODULES := libts_detected_face_jni libts_face_beautify_jni
+endif
+
+ifeq ($(WITH_SLIM_GALLERY2), true)
+ LOCAL_MANIFEST_FILE := slim_manifest/AndroidManifest.xml
+else
+ LOCAL_MANIFEST_FILE := AndroidManifest.xml
+endif
+
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2aea5699c..937a46199 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,4 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
+ Not a Contribution.
+
+ 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.
+-->
<manifest android:versionCode="40030"
android:versionName="1.1.40030"
@@ -7,11 +24,14 @@
<original-package android:name="com.android.gallery3d" />
- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
+ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
<permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER"
android:protectionLevel="signatureOrSystem" />
+ <permission android:name="com.android.gallery3d.permission.STORAGE_CHANGE"
+ android:protectionLevel="signatureOrSystem" />
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -19,6 +39,7 @@
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
@@ -29,8 +50,11 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
<uses-permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER" />
+ <uses-permission android:name="android.permission.BLUETOOTH" />
<supports-screens android:smallScreens="false"
android:normalScreens="true" android:largeScreens="true"
@@ -64,6 +88,7 @@
<data android:scheme="https" />
<data android:scheme="content" />
<data android:scheme="file" />
+ <data android:scheme="rtsp" />
<data android:mimeType="video/mpeg4" />
<data android:mimeType="video/mp4" />
<data android:mimeType="video/3gp" />
@@ -72,6 +97,14 @@
<data android:mimeType="video/webm" />
<data android:mimeType="video/avi" />
<data android:mimeType="application/sdp" />
+ <data android:mimeType="video/mp2ts" />
+ <data android:mimeType="video/x-ms-asf" />
+ <data android:mimeType="video/x-ms-wmv" />
+ <data android:mimeType="video/x-matroska" />
+ <data android:mimeType="video/x-msvideo"/>
+ <data android:mimeType="video/divx" />
+ <data android:mimeType="video/mkv" />
+ <data android:mimeType="video/mpeg" />
</intent-filter>
<intent-filter>
<!-- HTTP live support -->
@@ -84,11 +117,13 @@
<data android:mimeType="audio/mpegurl" />
<data android:mimeType="application/vnd.apple.mpegurl" />
<data android:mimeType="application/x-mpegurl" />
+ <data android:mimeType="application/dash+xml" />
</intent-filter>
</activity>
- <activity android:name="com.android.gallery3d.app.GalleryActivity" android:label="@string/app_name"
- android:configChanges="keyboardHidden|orientation|screenSize">
+ <activity android:name="com.android.gallery3d.app.GalleryActivity"
+ android:label="@string/app_name"
+ android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
@@ -165,8 +200,7 @@
<!-- This activity acts as a trampoline to the new Gallery activity,
so that existing shortcuts are preserved. -->
- <activity android:name="com.android.gallery3d.app.Gallery"
- android:theme="@style/android:Theme.NoDisplay">
+ <activity android:name="com.android.gallery3d.app.Gallery">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
@@ -298,6 +332,16 @@
android:theme="@style/Theme.Gallery"
android:configChanges="orientation|keyboardHidden|screenSize" />
+ <activity android:name="com.android.gallery3d.util.ViewGifImage"
+ android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+ android:configChanges="orientation|keyboardHidden|screenSize|keyboard|navigation">
+ <intent-filter>
+ <action android:name="com.android.gallery3d.VIEW_GIF" />
+ <data android:mimeType="image/gif" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
<provider android:name="com.android.gallery3d.provider.GalleryProvider"
android:syncable="false"
android:grantUriPermissions="true"
@@ -354,6 +398,54 @@
</intent-filter>
</receiver>
+ <!-- Receiver to keep the storage path for the camera in sync -->
+ <receiver android:name="com.android.gallery3d.app.StorageChangeReceiver"
+ android:permission="com.android.gallery3d.permission.STORAGE_CHANGE" >
+ <intent-filter>
+ <action android:name="com.android.gallery3d.STORAGE_CHANGE" />
+ </intent-filter>
+ </receiver>
+
<service android:name="com.android.camera.MediaSaveService" />
+
+ <activity android:name="org.codeaurora.gallery3d.video.SettingsActivity"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:label="@string/streaming_settings" >
+ <intent-filter>
+ <action android:name="org.codeaurora.settings.streaming" />
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+ <receiver android:name="org.codeaurora.gallery3d.video.DmReceiver" >
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ <action android:name="streaming.action.WRITE_SETTINGS" />
+ </intent-filter>
+ </receiver>
+
+ <activity android:name="org.codeaurora.gallery3d.video.BookmarkActivity"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:icon="@drawable/ic_menu_display_bookmark"
+ android:label="@string/bookmark_list"
+ android:theme="@android:style/Theme.Holo" >
+ <intent-filter>
+ <action android:name="org.codeaurora.bookmark.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+ <activity android:name="org.codeaurora.gallery3d.video.VideoSettingsActivity"
+ android:label="@string/movie_view_label"
+ android:configChanges="orientation|keyboardHidden|screenSize|mnc|mcc">
+ </activity>
+ <provider
+ android:name="android.support.v4.content.FileProvider"
+ android:authorities="com.android.gallery3d.fileprovider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_paths" />
+ </provider>
</application>
</manifest>
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 20db30919..dede88e61 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -50,6 +50,8 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Gallery*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Gallery*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Gallery*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Gallery*)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Gallery2_intermediates)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java b/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
index a1cf0fc85..21422095e 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
@@ -318,6 +318,13 @@ public class ExifInterface {
public static final int TAG_INTEROPERABILITY_INDEX =
defineTag(IfdId.TYPE_IFD_INTEROPERABILITY, (short) 1);
+ private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
+ private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
+ public static final DateFormat DATETIME_FORMAT = new SimpleDateFormat(DATETIME_FORMAT_STR);
+ private final DateFormat mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
+ private final Calendar mGPSTimeStampCalendar = Calendar
+ .getInstance(TimeZone.getTimeZone("UTC"));
+
/**
* Tags that contain offset markers. These are included in the banned
* defines.
@@ -732,7 +739,7 @@ public class ExifInterface {
* @param inStream an InputStream containing a jpeg compressed image.
* @throws IOException
*/
- public void readExif(InputStream inStream) throws IOException {
+ public void readExif(InputStream inStream) throws IOException, NullPointerException {
if (inStream == null) {
throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
}
@@ -1944,13 +1951,6 @@ public class ExifInterface {
return latLon;
}
- private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
- private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
- private final DateFormat mDateTimeStampFormat = new SimpleDateFormat(DATETIME_FORMAT_STR);
- private final DateFormat mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
- private final Calendar mGPSTimeStampCalendar = Calendar
- .getInstance(TimeZone.getTimeZone("UTC"));
-
/**
* Creates, formats, and sets the DateTimeStamp tag for one of:
* {@link #TAG_DATE_TIME}, {@link #TAG_DATE_TIME_DIGITIZED},
@@ -1964,8 +1964,8 @@ public class ExifInterface {
public boolean addDateTimeStampTag(int tagId, long timestamp, TimeZone timezone) {
if (tagId == TAG_DATE_TIME || tagId == TAG_DATE_TIME_DIGITIZED
|| tagId == TAG_DATE_TIME_ORIGINAL) {
- mDateTimeStampFormat.setTimeZone(timezone);
- ExifTag t = buildTag(tagId, mDateTimeStampFormat.format(timestamp));
+ DATETIME_FORMAT.setTimeZone(timezone);
+ ExifTag t = buildTag(tagId, DATETIME_FORMAT.format(timestamp));
if (t == null) {
return false;
}
diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
index b8b387201..186cb81cf 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
@@ -17,7 +17,6 @@
package com.android.gallery3d.exif;
import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
@@ -102,8 +101,6 @@ public class ExifTag {
// Value offset in exif header.
private int mOffset;
- private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("yyyy:MM:dd kk:mm:ss");
-
/**
* Returns true if the given IFD is a valid IFD.
*/
@@ -314,13 +311,17 @@ public class ExifTag {
* Sets a string value into this tag. This method should be used for tags of
* type {@link #TYPE_ASCII}. The string is converted to an ASCII string.
* Characters that cannot be converted are replaced with '?'. The length of
- * the string must be equal to either (component count -1) or (component
- * count). The final byte will be set to the string null terminator '\0',
- * overwriting the last character in the string if the value.length is equal
- * to the component count. This method will fail if:
+ * the string must be equal to either
+ * <ul>
+ * <li>component count - 1 when the terminating '\0' is not present</li>
+ * <li>component count when the terminating '\0' is present</li>
+ * <li>to comply with some non-conformant implementations, the terminating
+ * '\0' will be appended if it's not present and component count equals
+ * the string length; the component count will be updated in that case</li>
+ * This method will fail if:
* <ul>
* <li>The data type is not {@link #TYPE_ASCII} or {@link #TYPE_UNDEFINED}.</li>
- * <li>The length of the string is not equal to (component count -1) or
+ * <li>The length of the string is not equal to (component count - 1) or
* (component count) in the definition for this tag.</li>
* </ul>
*/
@@ -331,11 +332,20 @@ public class ExifTag {
byte[] buf = value.getBytes(US_ASCII);
byte[] finalBuf = buf;
- if (buf.length > 0) {
- finalBuf = (buf[buf.length - 1] == 0 || mDataType == TYPE_UNDEFINED) ? buf : Arrays
- .copyOf(buf, buf.length + 1);
- } else if (mDataType == TYPE_ASCII && mComponentCountActual == 1) {
- finalBuf = new byte[] { 0 };
+ if (mDataType == TYPE_ASCII) {
+ if (buf.length > 0) {
+ if (buf[buf.length - 1] != 0) {
+ finalBuf = Arrays.copyOf(buf, buf.length + 1);
+ // Apply the workaround for non conformant implementations
+ // (e.g. Samsung Wave 2): Accept a string with missing
+ // termination character
+ if (mComponentCountActual == buf.length) {
+ mComponentCountActual++;
+ }
+ }
+ } else if (mComponentCountActual == 1) {
+ finalBuf = new byte[] { 0 };
+ }
}
int count = finalBuf.length;
if (checkBadComponentCount(count)) {
@@ -524,9 +534,10 @@ public class ExifTag {
* @return true on success
*/
public boolean setTimeValue(long time) {
- // synchronized on TIME_FORMAT as SimpleDateFormat is not thread safe
- synchronized (TIME_FORMAT) {
- return setValue(TIME_FORMAT.format(new Date(time)));
+ // synchronized on DATETIME_FORMAT as SimpleDateFormat is not thread
+ // safe
+ synchronized (ExifInterface.DATETIME_FORMAT) {
+ return setValue(ExifInterface.DATETIME_FORMAT.format(new Date(time)));
}
}
diff --git a/proguard.flags b/proguard.flags
index 65104ec1e..d190434b7 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -1,6 +1,10 @@
# Disable the warnings of using dynamic method call in common library.
-dontnote com.android.gallery3d.common.*
+#Avoid the library class dependency error
+-dontwarn android.view.inputmethod.InputMethodManager
+-dontwarn android.content.res.Resources
+
# Keep all classes extended from com.android.gallery3d.common.Entry
# Since we annotate on the fields and use reflection to create SQL
# according to those field.
@@ -84,3 +88,7 @@
-keep class com.android.gallery3d.jpegstream.JPEGOutputStream { *; }
-keep class com.android.gallery3d.jpegstream.JPEGInputStream { *; }
-keep class com.android.gallery3d.jpegstream.StreamUtils { *; }
+
+-keep class com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine{
+ *;
+}
diff --git a/res/drawable-hdpi/dropdown_ic_arrow_normal_holo_dark.png b/res/drawable-hdpi/dropdown_ic_arrow_normal_holo_dark.png
deleted file mode 100644
index 06e5b4730..000000000
--- a/res/drawable-hdpi/dropdown_ic_arrow_normal_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_overlay_gallery_camera.png b/res/drawable-hdpi/frame_overlay_gallery_camera.png
index b27bbe57f..aa3a3e571 100644
--- a/res/drawable-hdpi/frame_overlay_gallery_camera.png
+++ b/res/drawable-hdpi/frame_overlay_gallery_camera.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_cameraalbum_overlay.png b/res/drawable-hdpi/ic_cameraalbum_overlay.png
index e58777f11..90ffbbd1a 100644
--- a/res/drawable-hdpi/ic_cameraalbum_overlay.png
+++ b/res/drawable-hdpi/ic_cameraalbum_overlay.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_media_bigscreen.png b/res/drawable-hdpi/ic_media_bigscreen.png
new file mode 100644
index 000000000..b68002df8
--- /dev/null
+++ b/res/drawable-hdpi/ic_media_bigscreen.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_media_cropscreen.png b/res/drawable-hdpi/ic_media_cropscreen.png
new file mode 100644
index 000000000..d6e4e7009
--- /dev/null
+++ b/res/drawable-hdpi/ic_media_cropscreen.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_media_fullscreen.png b/res/drawable-hdpi/ic_media_fullscreen.png
new file mode 100644
index 000000000..a4569fb6e
--- /dev/null
+++ b/res/drawable-hdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_disabled_forward.png b/res/drawable-hdpi/ic_menu_disabled_forward.png
new file mode 100644
index 000000000..c9683df0a
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_disabled_forward.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_disabled_rewind.png b/res/drawable-hdpi/ic_menu_disabled_rewind.png
new file mode 100644
index 000000000..1f74fb8ea
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_disabled_rewind.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_disabled_stop.png b/res/drawable-hdpi/ic_menu_disabled_stop.png
new file mode 100644
index 000000000..292c49241
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_disabled_stop.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_display_bookmark.png b/res/drawable-hdpi/ic_menu_display_bookmark.png
new file mode 100644
index 000000000..a5118ea85
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_display_bookmark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_edit_holo_dark.png b/res/drawable-hdpi/ic_menu_edit_holo_dark.png
deleted file mode 100644
index 54952f5d3..000000000
--- a/res/drawable-hdpi/ic_menu_edit_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_forward.png b/res/drawable-hdpi/ic_menu_forward.png
new file mode 100644
index 000000000..468008269
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_forward.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_loop.png b/res/drawable-hdpi/ic_menu_loop.png
new file mode 100644
index 000000000..add463382
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_loop.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_rewind.png b/res/drawable-hdpi/ic_menu_rewind.png
new file mode 100644
index 000000000..37c5708fa
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_rewind.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_share_holo_light.png b/res/drawable-hdpi/ic_menu_share_holo_light.png
deleted file mode 100644
index 492d6090c..000000000
--- a/res/drawable-hdpi/ic_menu_share_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_stop.png b/res/drawable-hdpi/ic_menu_stop.png
new file mode 100644
index 000000000..aea1c458a
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_stop.png
Binary files 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
index 721ee5ca2..000000000
--- a/res/drawable-hdpi/ic_menu_trash_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_unloop.png b/res/drawable-hdpi/ic_menu_unloop.png
new file mode 100644
index 000000000..3140051d2
--- /dev/null
+++ b/res/drawable-hdpi/ic_menu_unloop.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_photoeditor_makeup.png b/res/drawable-hdpi/ic_photoeditor_makeup.png
new file mode 100644
index 000000000..06913d638
--- /dev/null
+++ b/res/drawable-hdpi/ic_photoeditor_makeup.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_separator_line.png b/res/drawable-hdpi/ic_separator_line.png
new file mode 100644
index 000000000..2ebff3fe7
--- /dev/null
+++ b/res/drawable-hdpi/ic_separator_line.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_switch_camera.png b/res/drawable-hdpi/ic_switch_camera.png
index 11dd39ad7..509657dac 100644
--- a/res/drawable-hdpi/ic_switch_camera.png
+++ b/res/drawable-hdpi/ic_switch_camera.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ts_makeup_bigeye.png b/res/drawable-hdpi/ic_ts_makeup_bigeye.png
new file mode 100644
index 000000000..bf7b6f5ab
--- /dev/null
+++ b/res/drawable-hdpi/ic_ts_makeup_bigeye.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ts_makeup_soften.png b/res/drawable-hdpi/ic_ts_makeup_soften.png
new file mode 100644
index 000000000..caa645158
--- /dev/null
+++ b/res/drawable-hdpi/ic_ts_makeup_soften.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ts_makeup_trimface.png b/res/drawable-hdpi/ic_ts_makeup_trimface.png
new file mode 100644
index 000000000..3ac43f793
--- /dev/null
+++ b/res/drawable-hdpi/ic_ts_makeup_trimface.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ts_makeup_whiten.png b/res/drawable-hdpi/ic_ts_makeup_whiten.png
new file mode 100644
index 000000000..a12560f09
--- /dev/null
+++ b/res/drawable-hdpi/ic_ts_makeup_whiten.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_vidcontrol_disable_pause.png b/res/drawable-hdpi/ic_vidcontrol_disable_pause.png
new file mode 100644
index 000000000..41b37256b
--- /dev/null
+++ b/res/drawable-hdpi/ic_vidcontrol_disable_pause.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_vidcontrol_disable_play.png b/res/drawable-hdpi/ic_vidcontrol_disable_play.png
new file mode 100644
index 000000000..fdc5380f6
--- /dev/null
+++ b/res/drawable-hdpi/ic_vidcontrol_disable_play.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_vidcontrol_disable_reload.png b/res/drawable-hdpi/ic_vidcontrol_disable_reload.png
new file mode 100644
index 000000000..5611a9202
--- /dev/null
+++ b/res/drawable-hdpi/ic_vidcontrol_disable_reload.png
Binary files differ
diff --git a/res/drawable-hdpi/knob.png b/res/drawable-hdpi/knob.png
new file mode 100644
index 000000000..1eba937fe
--- /dev/null
+++ b/res/drawable-hdpi/knob.png
Binary files differ
diff --git a/res/drawable-hdpi/knob_toggle_off.png b/res/drawable-hdpi/knob_toggle_off.png
new file mode 100644
index 000000000..a89595e2b
--- /dev/null
+++ b/res/drawable-hdpi/knob_toggle_off.png
Binary files differ
diff --git a/res/drawable-hdpi/knob_toggle_on.png b/res/drawable-hdpi/knob_toggle_on.png
new file mode 100644
index 000000000..ab8d3d7e3
--- /dev/null
+++ b/res/drawable-hdpi/knob_toggle_on.png
Binary files differ
diff --git a/res/drawable-hdpi/media_default_bkg.9.png b/res/drawable-hdpi/media_default_bkg.9.png
new file mode 100644
index 000000000..7b9523913
--- /dev/null
+++ b/res/drawable-hdpi/media_default_bkg.9.png
Binary files differ
diff --git a/res/drawable-hdpi/switch_thumb_activated.9.png b/res/drawable-hdpi/switch_thumb_activated.9.png
new file mode 100644
index 000000000..072aa649c
--- /dev/null
+++ b/res/drawable-hdpi/switch_thumb_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/switch_thumb_off.9.png b/res/drawable-hdpi/switch_thumb_off.9.png
new file mode 100644
index 000000000..45786a309
--- /dev/null
+++ b/res/drawable-hdpi/switch_thumb_off.9.png
Binary files differ
diff --git a/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png b/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png
deleted file mode 100644
index 81de1bb46..000000000
--- a/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_overlay_gallery_camera.png b/res/drawable-mdpi/frame_overlay_gallery_camera.png
index 3736a5c02..994b3f340 100644
--- a/res/drawable-mdpi/frame_overlay_gallery_camera.png
+++ b/res/drawable-mdpi/frame_overlay_gallery_camera.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_cameraalbum_overlay.png b/res/drawable-mdpi/ic_cameraalbum_overlay.png
index 5d14c32e9..2cce0d472 100644
--- a/res/drawable-mdpi/ic_cameraalbum_overlay.png
+++ b/res/drawable-mdpi/ic_cameraalbum_overlay.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_media_bigscreen.png b/res/drawable-mdpi/ic_media_bigscreen.png
new file mode 100644
index 000000000..f04026ead
--- /dev/null
+++ b/res/drawable-mdpi/ic_media_bigscreen.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_media_cropscreen.png b/res/drawable-mdpi/ic_media_cropscreen.png
new file mode 100644
index 000000000..a2517bd3d
--- /dev/null
+++ b/res/drawable-mdpi/ic_media_cropscreen.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_media_fullscreen.png b/res/drawable-mdpi/ic_media_fullscreen.png
new file mode 100644
index 000000000..a53cb3ddd
--- /dev/null
+++ b/res/drawable-mdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_camera_holo_light.png b/res/drawable-mdpi/ic_menu_camera_holo_light.png
index d42508410..aa3a3e571 100644
--- a/res/drawable-mdpi/ic_menu_camera_holo_light.png
+++ b/res/drawable-mdpi/ic_menu_camera_holo_light.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_disabled_forward.png b/res/drawable-mdpi/ic_menu_disabled_forward.png
new file mode 100644
index 000000000..bbc8920f0
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_disabled_forward.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_disabled_rewind.png b/res/drawable-mdpi/ic_menu_disabled_rewind.png
new file mode 100644
index 000000000..28acd42d8
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_disabled_rewind.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_disabled_stop.png b/res/drawable-mdpi/ic_menu_disabled_stop.png
new file mode 100644
index 000000000..0532cea84
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_disabled_stop.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_display_bookmark.png b/res/drawable-mdpi/ic_menu_display_bookmark.png
new file mode 100644
index 000000000..a3acdd64b
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_display_bookmark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_edit_holo_dark.png b/res/drawable-mdpi/ic_menu_edit_holo_dark.png
deleted file mode 100644
index ca9188e18..000000000
--- a/res/drawable-mdpi/ic_menu_edit_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_forward.png b/res/drawable-mdpi/ic_menu_forward.png
new file mode 100644
index 000000000..85b7057cb
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_forward.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_loop.png b/res/drawable-mdpi/ic_menu_loop.png
new file mode 100644
index 000000000..688b2c564
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_loop.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_rewind.png b/res/drawable-mdpi/ic_menu_rewind.png
new file mode 100644
index 000000000..8b46eee7c
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_rewind.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_share_holo_light.png b/res/drawable-mdpi/ic_menu_share_holo_light.png
deleted file mode 100644
index 29574f5bd..000000000
--- a/res/drawable-mdpi/ic_menu_share_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_stop.png b/res/drawable-mdpi/ic_menu_stop.png
new file mode 100644
index 000000000..96cf8f46d
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_stop.png
Binary files 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
index f45540b21..000000000
--- a/res/drawable-mdpi/ic_menu_trash_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_unloop.png b/res/drawable-mdpi/ic_menu_unloop.png
new file mode 100644
index 000000000..e47496414
--- /dev/null
+++ b/res/drawable-mdpi/ic_menu_unloop.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_photoeditor_makeup.png b/res/drawable-mdpi/ic_photoeditor_makeup.png
new file mode 100644
index 000000000..606f591af
--- /dev/null
+++ b/res/drawable-mdpi/ic_photoeditor_makeup.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_switch_camera.png b/res/drawable-mdpi/ic_switch_camera.png
index a97811757..90dd073be 100644
--- a/res/drawable-mdpi/ic_switch_camera.png
+++ b/res/drawable-mdpi/ic_switch_camera.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ts_makeup_bigeye.png b/res/drawable-mdpi/ic_ts_makeup_bigeye.png
new file mode 100644
index 000000000..8d8da29c1
--- /dev/null
+++ b/res/drawable-mdpi/ic_ts_makeup_bigeye.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ts_makeup_soften.png b/res/drawable-mdpi/ic_ts_makeup_soften.png
new file mode 100644
index 000000000..a36d189c7
--- /dev/null
+++ b/res/drawable-mdpi/ic_ts_makeup_soften.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ts_makeup_trimface.png b/res/drawable-mdpi/ic_ts_makeup_trimface.png
new file mode 100644
index 000000000..e27370f92
--- /dev/null
+++ b/res/drawable-mdpi/ic_ts_makeup_trimface.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ts_makeup_whiten.png b/res/drawable-mdpi/ic_ts_makeup_whiten.png
new file mode 100644
index 000000000..7ac882312
--- /dev/null
+++ b/res/drawable-mdpi/ic_ts_makeup_whiten.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_vidcontrol_disable_pause.png b/res/drawable-mdpi/ic_vidcontrol_disable_pause.png
new file mode 100644
index 000000000..c5c42cb8c
--- /dev/null
+++ b/res/drawable-mdpi/ic_vidcontrol_disable_pause.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_vidcontrol_disable_play.png b/res/drawable-mdpi/ic_vidcontrol_disable_play.png
new file mode 100644
index 000000000..70374fb09
--- /dev/null
+++ b/res/drawable-mdpi/ic_vidcontrol_disable_play.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_vidcontrol_disable_reload.png b/res/drawable-mdpi/ic_vidcontrol_disable_reload.png
new file mode 100644
index 000000000..052df4cfc
--- /dev/null
+++ b/res/drawable-mdpi/ic_vidcontrol_disable_reload.png
Binary files differ
diff --git a/res/drawable-mdpi/media_default_bkg.9.png b/res/drawable-mdpi/media_default_bkg.9.png
new file mode 100644
index 000000000..20bb10878
--- /dev/null
+++ b/res/drawable-mdpi/media_default_bkg.9.png
Binary files differ
diff --git a/res/drawable-sw600dp/ic_vidcontrol_disable_pause.png b/res/drawable-sw600dp/ic_vidcontrol_disable_pause.png
new file mode 100644
index 000000000..41b37256b
--- /dev/null
+++ b/res/drawable-sw600dp/ic_vidcontrol_disable_pause.png
Binary files differ
diff --git a/res/drawable-sw600dp/ic_vidcontrol_disable_play.png b/res/drawable-sw600dp/ic_vidcontrol_disable_play.png
new file mode 100644
index 000000000..fdc5380f6
--- /dev/null
+++ b/res/drawable-sw600dp/ic_vidcontrol_disable_play.png
Binary files differ
diff --git a/res/drawable-sw600dp/ic_vidcontrol_disable_reload.png b/res/drawable-sw600dp/ic_vidcontrol_disable_reload.png
new file mode 100644
index 000000000..5611a9202
--- /dev/null
+++ b/res/drawable-sw600dp/ic_vidcontrol_disable_reload.png
Binary files differ
diff --git a/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png b/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png
deleted file mode 100644
index 36d8cf47e..000000000
--- a/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/frame_overlay_gallery_camera.png b/res/drawable-xhdpi/frame_overlay_gallery_camera.png
index e2109ac4d..aa3a3e571 100644
--- a/res/drawable-xhdpi/frame_overlay_gallery_camera.png
+++ b/res/drawable-xhdpi/frame_overlay_gallery_camera.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cameraalbum_overlay.png b/res/drawable-xhdpi/ic_cameraalbum_overlay.png
index bf71eaacf..6056fcc88 100644
--- a/res/drawable-xhdpi/ic_cameraalbum_overlay.png
+++ b/res/drawable-xhdpi/ic_cameraalbum_overlay.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_media_bigscreen.png b/res/drawable-xhdpi/ic_media_bigscreen.png
new file mode 100644
index 000000000..ba367097e
--- /dev/null
+++ b/res/drawable-xhdpi/ic_media_bigscreen.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_media_cropscreen.png b/res/drawable-xhdpi/ic_media_cropscreen.png
new file mode 100644
index 000000000..e08c1db60
--- /dev/null
+++ b/res/drawable-xhdpi/ic_media_cropscreen.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_media_fullscreen.png b/res/drawable-xhdpi/ic_media_fullscreen.png
new file mode 100644
index 000000000..ffcb4de7c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_camera_holo_light.png b/res/drawable-xhdpi/ic_menu_camera_holo_light.png
new file mode 100644
index 000000000..c1a3549bf
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_camera_holo_light.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_disabled_forward.png b/res/drawable-xhdpi/ic_menu_disabled_forward.png
new file mode 100644
index 000000000..e73d4d4a5
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_disabled_forward.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_disabled_rewind.png b/res/drawable-xhdpi/ic_menu_disabled_rewind.png
new file mode 100644
index 000000000..ad3be649b
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_disabled_rewind.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_disabled_stop.png b/res/drawable-xhdpi/ic_menu_disabled_stop.png
new file mode 100644
index 000000000..ba0fc5f61
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_disabled_stop.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_display_bookmark.png b/res/drawable-xhdpi/ic_menu_display_bookmark.png
new file mode 100644
index 000000000..4ad8414be
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_display_bookmark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_edit_holo_dark.png b/res/drawable-xhdpi/ic_menu_edit_holo_dark.png
deleted file mode 100644
index 65e72c1e2..000000000
--- a/res/drawable-xhdpi/ic_menu_edit_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_forward.png b/res/drawable-xhdpi/ic_menu_forward.png
new file mode 100644
index 000000000..f225ffc91
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_forward.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_loop.png b/res/drawable-xhdpi/ic_menu_loop.png
new file mode 100644
index 000000000..e664915ce
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_loop.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_rewind.png b/res/drawable-xhdpi/ic_menu_rewind.png
new file mode 100644
index 000000000..fbfa5cab6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_rewind.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_stop.png b/res/drawable-xhdpi/ic_menu_stop.png
new file mode 100644
index 000000000..43e77bee4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_stop.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_unloop.png b/res/drawable-xhdpi/ic_menu_unloop.png
new file mode 100644
index 000000000..89d1da2bc
--- /dev/null
+++ b/res/drawable-xhdpi/ic_menu_unloop.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photoeditor_makeup.png b/res/drawable-xhdpi/ic_photoeditor_makeup.png
new file mode 100644
index 000000000..834c899b7
--- /dev/null
+++ b/res/drawable-xhdpi/ic_photoeditor_makeup.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_switch_camera.png b/res/drawable-xhdpi/ic_switch_camera.png
index 7d2406290..852225124 100644
--- a/res/drawable-xhdpi/ic_switch_camera.png
+++ b/res/drawable-xhdpi/ic_switch_camera.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ts_makeup_bigeye.png b/res/drawable-xhdpi/ic_ts_makeup_bigeye.png
new file mode 100644
index 000000000..f4b85005c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ts_makeup_bigeye.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ts_makeup_soften.png b/res/drawable-xhdpi/ic_ts_makeup_soften.png
new file mode 100644
index 000000000..cdd699569
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ts_makeup_soften.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ts_makeup_trimface.png b/res/drawable-xhdpi/ic_ts_makeup_trimface.png
new file mode 100644
index 000000000..e419c19a6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ts_makeup_trimface.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ts_makeup_whiten.png b/res/drawable-xhdpi/ic_ts_makeup_whiten.png
new file mode 100644
index 000000000..6fc305f36
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ts_makeup_whiten.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_vidcontrol_disable_pause.png b/res/drawable-xhdpi/ic_vidcontrol_disable_pause.png
new file mode 100644
index 000000000..0b1a136c6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_vidcontrol_disable_pause.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_vidcontrol_disable_play.png b/res/drawable-xhdpi/ic_vidcontrol_disable_play.png
new file mode 100644
index 000000000..f2c2f1116
--- /dev/null
+++ b/res/drawable-xhdpi/ic_vidcontrol_disable_play.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_vidcontrol_disable_reload.png b/res/drawable-xhdpi/ic_vidcontrol_disable_reload.png
new file mode 100644
index 000000000..37a394f1e
--- /dev/null
+++ b/res/drawable-xhdpi/ic_vidcontrol_disable_reload.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cameraalbum_overlay.png b/res/drawable-xxhdpi/ic_cameraalbum_overlay.png
new file mode 100644
index 000000000..abf97ec64
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_cameraalbum_overlay.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photoeditor_makeup_xx.png b/res/drawable-xxhdpi/ic_photoeditor_makeup_xx.png
new file mode 100644
index 000000000..3db1df26c
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_photoeditor_makeup_xx.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cameraalbum_overlay.png b/res/drawable-xxxhdpi/ic_cameraalbum_overlay.png
new file mode 100644
index 000000000..762a41f18
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_cameraalbum_overlay.png
Binary files differ
diff --git a/res/drawable/dropdown_ic_arrow.xml b/res/drawable/dropdown_ic_arrow.xml
new file mode 100644
index 000000000..f9464faf3
--- /dev/null
+++ b/res/drawable/dropdown_ic_arrow.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M7,10l5,5l5-5H7Z" />
+</vector>
diff --git a/res/drawable/fab_accent.xml b/res/drawable/fab_accent.xml
new file mode 100644
index 000000000..f334676e8
--- /dev/null
+++ b/res/drawable/fab_accent.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod 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.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
+ <solid android:color="@color/fab" />
+</shape>
diff --git a/res/drawable/filtershow_background.png b/res/drawable/filtershow_background.png
deleted file mode 100644
index 22e1641dd..000000000
--- a/res/drawable/filtershow_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/filtershow_background_new.png b/res/drawable/filtershow_background_new.png
deleted file mode 100644
index a11538944..000000000
--- a/res/drawable/filtershow_background_new.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/floating_action_button.xml b/res/drawable/floating_action_button.xml
new file mode 100644
index 000000000..57a4c8fa9
--- /dev/null
+++ b/res/drawable/floating_action_button.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod 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.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/floating_action_button_touch_tint">
+ <item android:id="@android:id/mask">
+ <shape android:shape="oval">
+ <solid android:color="@color/fab" />
+ </shape>
+ </item>
+</ripple>
diff --git a/res/drawable/ic_edit.xml b/res/drawable/ic_edit.xml
new file mode 100644
index 000000000..1116c1c09
--- /dev/null
+++ b/res/drawable/ic_edit.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="30dp"
+ android:height="30dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M14,28c-3.31,0-6,2.689-6,6c0,2.62-2.31,4-4,4c1.84,
+ 2.439,4.99,4,8,4c4.42,0,8-3.58,8-8C20,30.689,17.31,28,14,28Z
+ M41.41,9.26l-2.67-2.67c-0.78-0.78-2.051-0.78-2.83,0L18,
+ 24.5l5.5,5.5l17.91-17.91C42.2,11.3,42.2,10.04,41.41,9.26z" />
+ </vector>
diff --git a/res/drawable/ic_menu_share.xml b/res/drawable/ic_menu_share.xml
new file mode 100644
index 000000000..4f15606c0
--- /dev/null
+++ b/res/drawable/ic_menu_share.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M36,32.17c-1.52,0-2.891,0.59-3.93,1.54L17.82,
+ 25.4C17.93,24.95,18,24.48,18,24s-0.07-0.95-0.18-1.4l14.1-8.23
+ c1.07,1,2.5,1.62,4.08,1.62c3.311,0,6-2.69,6-6c0-3.31-2.689-6-6-6s-6,
+ 2.69-6,6c0,0.48,0.07,0.95,0.18,1.4l-14.1,8.23
+ c-1.07-1-2.5-1.62-4.08-1.62c-3.31,0-6,2.69-6,6c0,3.311,2.69,6,6,6c1.58,
+ 0,3.01-0.62,4.08-1.62l14.25,8.31c-0.1,0.42-0.16,0.86-0.16,1.311c0,
+ 3.221,2.609,5.83,5.83,5.83s5.83-2.609,5.83-5.83S39.221,32.17,36,32.17Z"
+ />
+</vector>
diff --git a/res/drawable/ic_menu_single_track.xml b/res/drawable/ic_menu_single_track.xml
new file mode 100644
index 000000000..9ca139a18
--- /dev/null
+++ b/res/drawable/ic_menu_single_track.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M24,4C12.97,4,4,12.97,4,24c0,11.029,8.97,20,20,
+ 20c11.029,0,20-8.971,20-20C44,12.97,35.029,4,24,4ZM24,40c-8.82,
+ 0-16-7.18-16-16c0-8.82,7.18-16,16-16c8.82,0,16,7.18,16,16C40,32.82,
+ 32.82,40,24,40zM30,24c0,3.311-2.689,6-6,6
+ c-3.31,0-6-2.689-6-6c0-3.31,2.69-6,6-6C27.311,18,30,20.69,30,24z" />
+</vector>
diff --git a/res/drawable/ic_menu_stereo.xml b/res/drawable/ic_menu_stereo.xml
new file mode 100644
index 000000000..1d105878f
--- /dev/null
+++ b/res/drawable/ic_menu_stereo.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M34,4H14c-2.21,0-4,1.79-4,4v32c0,2.21,1.79,3.98,4,
+ 3.98L34,44c2.21,0,4-1.79,4-4V8C38,5.79,36.21,4,34,4Z
+ M24,8 c2.21,0,4,1.79,4,4s-1.79,4-4,4s-4-1.79-4-4S21.79,8,24,8z
+ M24,40c-5.52,0-10-4.48-10-10c0-5.52,4.48-10,10-10c5.52,0,10,4.48,10,10
+ C34,35.52,29.52,40,24,40zM24,24c-3.31,0-6,2.689-6,6s2.69,6,6,6c3.311,
+ 0,6-2.689,6-6S27.311,24,24,24z" />
+</vector>
diff --git a/res/drawable/ic_menu_trash.xml b/res/drawable/ic_menu_trash.xml
new file mode 100644
index 000000000..8c5f85ab2
--- /dev/null
+++ b/res/drawable/ic_menu_trash.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="#ffffff"
+ android:pathData="M12,38c0,2.21,1.79,4,4,4h16c2.21,0,4-1.79,
+ 4-4V14H12V38ZM38,8h-7l-2-2H19l-2,2h-7v4h28V8z" />
+</vector>
diff --git a/res/drawable/icn_media_forward.xml b/res/drawable/icn_media_forward.xml
new file mode 100644
index 000000000..374ca5d07
--- /dev/null
+++ b/res/drawable/icn_media_forward.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_menu_forward" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_menu_disabled_forward" />
+</selector>
diff --git a/res/drawable/icn_media_rewind.xml b/res/drawable/icn_media_rewind.xml
new file mode 100644
index 000000000..b6066373d
--- /dev/null
+++ b/res/drawable/icn_media_rewind.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_menu_rewind" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_menu_disabled_rewind" />
+</selector>
diff --git a/res/drawable/icn_media_stop.xml b/res/drawable/icn_media_stop.xml
new file mode 100644
index 000000000..31d85555b
--- /dev/null
+++ b/res/drawable/icn_media_stop.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_menu_stop" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_menu_disabled_stop" />
+</selector>
diff --git a/res/drawable/videoplayer_pause.xml b/res/drawable/videoplayer_pause.xml
new file mode 100644
index 000000000..39a436156
--- /dev/null
+++ b/res/drawable/videoplayer_pause.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_vidcontrol_pause" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_vidcontrol_disable_pause" />
+</selector>
diff --git a/res/drawable/videoplayer_play.xml b/res/drawable/videoplayer_play.xml
new file mode 100644
index 000000000..be78a7be1
--- /dev/null
+++ b/res/drawable/videoplayer_play.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_vidcontrol_play" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_vidcontrol_disable_play" />
+</selector>
diff --git a/res/drawable/videoplayer_reload.xml b/res/drawable/videoplayer_reload.xml
new file mode 100644
index 000000000..b5d48bff7
--- /dev/null
+++ b/res/drawable/videoplayer_reload.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:drawable="@drawable/ic_vidcontrol_reload" />
+ <item android:state_enabled="false"
+ android:drawable="@drawable/ic_vidcontrol_disable_reload" />
+</selector>
diff --git a/res/layout-land/camera_controls.xml b/res/layout-land/camera_controls.xml
index d1772401e..4baf23ebf 100644
--- a/res/layout-land/camera_controls.xml
+++ b/res/layout-land/camera_controls.xml
@@ -24,13 +24,13 @@
android:clickable="true"
android:layout_height="match_parent"
android:layout_width="@dimen/switcher_size"
- android:layout_gravity="right" />
+ android:layout_gravity="end" />
<include layout="@layout/menu_indicators"
android:layout_width="64dip"
android:layout_height="64dip"
android:layout_marginTop="-5dip"
- android:layout_marginRight="6dip"
+ android:layout_marginEnd="6dip"
android:layout_gravity="top|right"/>
<com.android.camera.ui.PieMenuButton
@@ -38,13 +38,13 @@
style="@style/SwitcherButton"
android:contentDescription="@string/accessibility_menu_button"
android:layout_gravity="right|top"
- android:layout_marginRight="2dip" />
+ android:layout_marginEnd="2dip" />
<com.android.camera.ui.CameraSwitcher
android:id="@+id/camera_switcher"
style="@style/SwitcherButton"
android:layout_gravity="right|bottom"
- android:layout_marginRight="2dip"
+ android:layout_marginEnd="2dip"
android:contentDescription="@string/accessibility_mode_picker" />
<com.android.camera.ShutterButton
@@ -52,7 +52,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
- android:layout_marginRight="@dimen/shutter_offset"
+ android:layout_marginEnd="@dimen/shutter_offset"
android:clickable="true"
android:contentDescription="@string/accessibility_shutter_button"
android:focusable="true"
diff --git a/res/layout-land/filtershow_activity.xml b/res/layout-land/filtershow_activity.xml
index f4380126e..c1c7e0e69 100644
--- a/res/layout-land/filtershow_activity.xml
+++ b/res/layout-land/filtershow_activity.xml
@@ -19,7 +19,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainView"
- android:background="@drawable/filtershow_tiled_background">
+ android:background="@color/filtershow_background">
<LinearLayout
android:layout_width="match_parent"
@@ -35,7 +35,7 @@
<ProgressBar
android:id="@+id/loading"
- style="@android:style/Widget.Holo.ProgressBar.Large"
+ style="@android:style/Widget.Material.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/res/layout-land/filtershow_color_border_ui.xml b/res/layout-land/filtershow_color_border_ui.xml
index 9945d9d63..82fe14a7d 100644
--- a/res/layout-land/filtershow_color_border_ui.xml
+++ b/res/layout-land/filtershow_color_border_ui.xml
@@ -46,14 +46,14 @@
<TextView
android:id="@+id/controlName1"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/color_border_size"/>
<TextView
android:id="@+id/colorBorderSizeValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold"/>
<SeekBar
@@ -74,14 +74,14 @@
<TextView
android:id="@+id/controlName2"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/color_border_corner_size"/>
<TextView
android:id="@+id/colorBorderCornerValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold"/>
<SeekBar
@@ -122,7 +122,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/draw_color"
- android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip"
android:id="@+id/textView"/>
@@ -130,8 +130,8 @@
android:id="@+id/btnSelect"
android:layout_width="match_parent"
android:layout_height="32dp"
- android:layout_marginLeft="18dp"
- android:layout_marginRight="18dp"
+ android:layout_marginStart="18dp"
+ android:layout_marginEnd="18dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
/>
@@ -142,7 +142,7 @@
android:layout_height="@dimen/draw_ui_width"
android:layout_gravity="center"
android:layout_marginTop="8dp"
- android:layout_marginRight="1dp"/>
+ android:layout_marginEnd="1dp"/>
<com.android.gallery3d.filtershow.colorpicker.ColorHueView
android:id="@+id/ColorHueView"
@@ -164,8 +164,8 @@
android:orientation="horizontal"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
- android:layout_marginLeft="1dp"
- android:layout_marginRight="1dp">
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp">
<LinearLayout
android:layout_width="match_parent"
@@ -173,8 +173,8 @@
android:orientation="horizontal"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
- android:layout_marginLeft="1dp"
- android:layout_marginRight="1dp">
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp">
<LinearLayout
android:id="@+id/listColors"
@@ -189,7 +189,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button02"
@@ -197,7 +197,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button03"
@@ -205,7 +205,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button04"
@@ -213,7 +213,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button05"
@@ -221,7 +221,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
</LinearLayout>
<FrameLayout
diff --git a/res/layout-land/filtershow_draw_ui.xml b/res/layout-land/filtershow_draw_ui.xml
index 5e0a32725..642a7bdb6 100644
--- a/res/layout-land/filtershow_draw_ui.xml
+++ b/res/layout-land/filtershow_draw_ui.xml
@@ -55,14 +55,14 @@
<TextView
android:id="@+id/controlName1"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/draw_size"/>
<TextView
android:id="@+id/drawSizeValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold"/>
<SeekBar
@@ -106,7 +106,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/draw_color"
- android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip"
android:id="@+id/textView"
android:visibility="gone"/>
@@ -114,8 +114,8 @@
android:id="@+id/btnSelect"
android:layout_width="match_parent"
android:layout_height="32dp"
- android:layout_marginLeft="18dp"
- android:layout_marginRight="18dp"
+ android:layout_marginStart="18dp"
+ android:layout_marginEnd="18dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
/>
@@ -126,7 +126,7 @@
android:layout_height="@dimen/draw_ui_width"
android:layout_gravity="center"
android:layout_marginTop="8dp"
- android:layout_marginRight="1dp"/>
+ android:layout_marginEnd="1dp"/>
<com.android.gallery3d.filtershow.colorpicker.ColorHueView
android:id="@+id/ColorHueView"
@@ -149,8 +149,8 @@
android:orientation="horizontal"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
- android:layout_marginLeft="1dp"
- android:layout_marginRight="1dp">
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp">
<LinearLayout
@@ -166,7 +166,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button02"
@@ -174,7 +174,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button03"
@@ -182,7 +182,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button04"
@@ -190,7 +190,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button05"
@@ -198,7 +198,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
</LinearLayout>
diff --git a/res/layout-land/filtershow_grad_ui.xml b/res/layout-land/filtershow_grad_ui.xml
index fd09beebb..8f6a8ae09 100644
--- a/res/layout-land/filtershow_grad_ui.xml
+++ b/res/layout-land/filtershow_grad_ui.xml
@@ -30,14 +30,14 @@
<TextView
android:id="@+id/controlName1"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/editor_grad_brightness" />
<TextView
android:id="@+id/gradBrightnessValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold" />
<SeekBar
@@ -58,14 +58,14 @@
<TextView
android:id="@+id/controlName2"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/editor_grad_saturation"/>
<TextView
android:id="@+id/gradSaturationValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold" />
<SeekBar
@@ -84,14 +84,14 @@
<TextView
android:id="@+id/controlName3"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip"
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip"
android:text="@string/editor_grad_contrast"/>
<TextView
android:id="@+id/gradContrastValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold" />
<SeekBar
@@ -120,7 +120,7 @@
android:background="@drawable/filtershow_button_background"
android:src="@drawable/filtershow_addpoint"
android:paddingBottom="8dp"
- android:layout_marginLeft="48dp" />
+ android:layout_marginStart="48dp" />
<View
android:layout_width="wrap_content"
@@ -136,9 +136,9 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/ic_menu_trash_holo_light"
+ android:src="@drawable/ic_menu_trash"
android:paddingBottom="8dp"
- android:layout_marginRight="48dp" />
+ android:layout_marginEnd="48dp" />
</LinearLayout>
diff --git a/res/layout-land/filtershow_main_panel.xml b/res/layout-land/filtershow_main_panel.xml
index 6a36de2d7..e508e767b 100644
--- a/res/layout-land/filtershow_main_panel.xml
+++ b/res/layout-land/filtershow_main_panel.xml
@@ -83,6 +83,16 @@
android:padding="2dip"
android:scaleType="centerInside"
android:src="@drawable/ic_photoeditor_color"/>
+ <ImageButton
+ android:id="@+id/makeupButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@drawable/filtershow_button_background"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ android:src="@drawable/ic_photoeditor_makeup"/>
</LinearLayout>
diff --git a/res/layout-land/filtershow_saturation_controls.xml b/res/layout-land/filtershow_saturation_controls.xml
index f452a6487..6003b7389 100644
--- a/res/layout-land/filtershow_saturation_controls.xml
+++ b/res/layout-land/filtershow_saturation_controls.xml
@@ -25,11 +25,11 @@
android:text="@string/editor_chan_sat_red"
android:textStyle="bold"
android:textColor="#ff8080"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/redValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/redSeekBar"
android:layout_width="match_parent"
@@ -42,11 +42,11 @@
android:text="@string/editor_chan_sat_yellow"
android:textStyle="bold"
android:textColor="#ffff80"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/yellowValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/yellowSeekBar"
android:layout_width="match_parent"
@@ -59,11 +59,11 @@
android:text="@string/editor_chan_sat_green"
android:textStyle="bold"
android:textColor="#80ff80"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/greenValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/greenSeekBar"
android:layout_width="match_parent"
@@ -76,11 +76,11 @@
android:text="@string/editor_chan_sat_cyan"
android:textStyle="bold"
android:textColor="#80ffff"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/cyanValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/cyanSeekBar"
android:layout_width="match_parent"
@@ -93,11 +93,11 @@
android:text="@string/editor_chan_sat_blue"
android:textStyle="bold"
android:textColor="#8080ff"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/blueValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/blueSeekBar"
android:layout_width="match_parent"
@@ -110,11 +110,11 @@
android:text="@string/editor_chan_sat_magenta"
android:textStyle="bold"
android:textColor="#ff80ff"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/magentaValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/magentaSeekBar"
android:layout_width="match_parent"
@@ -137,11 +137,11 @@
<TextView
android:layout_gravity="left|center_vertical"
android:text="@string/editor_chan_sat_main"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/mainValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/mainSeekbar"
android:layout_width="match_parent"
diff --git a/res/layout-land/filtershow_vignette_controls.xml b/res/layout-land/filtershow_vignette_controls.xml
index 9bfb29f41..7cb27e9e2 100644
--- a/res/layout-land/filtershow_vignette_controls.xml
+++ b/res/layout-land/filtershow_vignette_controls.xml
@@ -24,12 +24,12 @@
android:layout_gravity="left|center_vertical"
android:text="@string/vignette_exposure"
android:textStyle="bold"
- android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
android:visibility="gone"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/exposureValue"
- android:layout_marginRight="16dp"
+ android:layout_marginEnd="16dp"
android:visibility="gone"/>
<SeekBar
android:id="@+id/exposureSeekBar"
@@ -43,11 +43,11 @@
android:layout_gravity="left|center_vertical"
android:text="@string/vignette_saturation"
android:textStyle="bold"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/saturationValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/saturationSeekBar"
android:layout_width="match_parent"
@@ -59,11 +59,11 @@
android:layout_gravity="left|center_vertical"
android:text="@string/vignette_contrast"
android:textStyle="bold"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/contrastValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/contrastSeekBar"
android:layout_width="match_parent"
@@ -75,11 +75,11 @@
android:layout_gravity="left|center_vertical"
android:text="@string/vignette_falloff"
android:textStyle="bold"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/falloffValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/falloffSeekBar"
android:layout_width="match_parent"
@@ -103,11 +103,11 @@
<TextView
android:layout_gravity="left|center_vertical"
android:text="@string/vignette_main"
- android:layout_marginLeft="8dp"/>
+ android:layout_marginStart="8dp"/>
<TextView
android:layout_gravity="right|center_vertical"
android:id="@+id/mainVignetteValue"
- android:layout_marginRight="16dp"/>
+ android:layout_marginEnd="16dp"/>
<SeekBar
android:id="@+id/mainVignetteSeekbar"
android:layout_width="match_parent"
diff --git a/res/layout-land/keyguard_widget.xml b/res/layout-land/keyguard_widget.xml
index f0f4362aa..68396230c 100644
--- a/res/layout-land/keyguard_widget.xml
+++ b/res/layout-land/keyguard_widget.xml
@@ -25,8 +25,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- android:layout_marginRight="@dimen/shutter_offset"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="@dimen/shutter_offset"
android:contentDescription="@string/accessibility_shutter_button"
android:scaleType="center"
android:src="@drawable/btn_new_shutter" />
@@ -35,8 +35,8 @@
android:layout_width="64dip"
android:layout_height="64dip"
android:layout_above="@id/shutter_button"
- android:layout_alignParentRight="true"
- android:layout_marginRight="6dip"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="6dip"
android:layout_marginTop="-5dip"
layout="@layout/menu_indicators_keyguard" />
@@ -44,8 +44,8 @@
android:id="@+id/camera_switcher"
style="@style/SwitcherButton"
android:layout_below="@id/shutter_button"
- android:layout_alignParentRight="true"
- android:layout_marginRight="2dip"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="2dip"
android:contentDescription="@string/accessibility_mode_picker"
android:scaleType="center"
android:src="@drawable/ic_switch_camera" />
@@ -54,8 +54,8 @@
android:id="@+id/camera_switcher_ind"
style="@style/SwitcherButton"
android:layout_below="@id/shutter_button"
- android:layout_alignParentRight="true"
- android:layout_marginRight="2dip"
+ android:layout_alignParentEnd="true"
+ android:layout_marginEnd="2dip"
android:contentDescription="@string/accessibility_mode_picker"
android:scaleType="center"
android:src="@drawable/ic_switcher_menu_indicator" />
diff --git a/res/layout-land/review_module_control.xml b/res/layout-land/review_module_control.xml
index 9f8b0cd46..6e0ee4a48 100644
--- a/res/layout-land/review_module_control.xml
+++ b/res/layout-land/review_module_control.xml
@@ -16,21 +16,21 @@
<com.android.camera.ui.RotatableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/CameraControls"
- android:layout_gravity="right|center_vertical"
- android:layout_marginRight="2dip">
+ android:layout_gravity="end|center_vertical"
+ android:layout_marginEnd="2dip">
<ImageView android:id="@+id/btn_done"
style="@style/ReviewControlIcon"
android:contentDescription="@string/accessibility_review_ok"
android:visibility="gone"
android:scaleType="center"
- android:layout_gravity="top|right"
+ android:layout_gravity="top|end"
android:background="@drawable/bg_pressed"
android:src="@drawable/ic_menu_done_holo_light" />
<ImageView android:id="@+id/btn_retake"
style="@style/ReviewControlIcon"
android:contentDescription="@string/accessibility_review_retake"
- android:layout_gravity="right|center_vertical"
+ android:layout_gravity="end|center_vertical"
android:scaleType="center"
android:focusable="true"
android:visibility="gone"
@@ -42,7 +42,7 @@
android:contentDescription="@string/accessibility_review_cancel"
android:visibility="gone"
android:scaleType="center"
- android:layout_gravity="bottom|right"
+ android:layout_gravity="bottom|end"
android:background="@drawable/bg_pressed"
android:src="@drawable/ic_menu_cancel_holo_light" />
</com.android.camera.ui.RotatableLayout>
diff --git a/res/layout-land/switcher_popup.xml b/res/layout-land/switcher_popup.xml
index fc2d7bc77..ebb4243f6 100644
--- a/res/layout-land/switcher_popup.xml
+++ b/res/layout-land/switcher_popup.xml
@@ -19,10 +19,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
- android:layout_marginRight="8dip"
+ android:layout_marginEnd="8dip"
android:layout_marginBottom="8dip"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
+ android:paddingStart="8dip"
+ android:paddingEnd="8dip"
android:paddingTop="16dip"
android:paddingBottom="16dip"
android:background="#80000000" />
diff --git a/res/layout-port/camera_controls.xml b/res/layout-port/camera_controls.xml
index 5f89830c5..e3ad8c152 100644
--- a/res/layout-port/camera_controls.xml
+++ b/res/layout-port/camera_controls.xml
@@ -31,7 +31,7 @@
android:layout_height="64dip"
android:layout_gravity="bottom|right"
android:layout_marginBottom="6dip"
- android:layout_marginRight="-5dip" />
+ android:layout_marginEnd="-5dip" />
<com.android.camera.ui.PieMenuButton
android:id="@+id/menu"
diff --git a/res/layout-port/keyguard_widget.xml b/res/layout-port/keyguard_widget.xml
index 28b59c44d..40a601f57 100644
--- a/res/layout-port/keyguard_widget.xml
+++ b/res/layout-port/keyguard_widget.xml
@@ -32,15 +32,15 @@
<include layout="@layout/menu_indicators_keyguard"
android:layout_width="64dip"
android:layout_height="64dip"
- android:layout_toRightOf="@id/shutter"
+ android:layout_toEndOf="@id/shutter"
android:layout_alignParentBottom="true"
android:layout_marginBottom="6dip"
- android:layout_marginRight="-5dip" />
+ android:layout_marginEnd="-5dip" />
<ImageView
android:id="@+id/camera_switcher"
style="@style/SwitcherButton"
- android:layout_toLeftOf="@id/shutter"
+ android:layout_toStartOf="@id/shutter"
android:layout_alignParentBottom="true"
android:layout_marginBottom="2dip"
android:scaleType="center"
@@ -50,7 +50,7 @@
<ImageView
android:id="@+id/camera_switcher_ind"
style="@style/SwitcherButton"
- android:layout_toLeftOf="@id/shutter"
+ android:layout_toStartOf="@id/shutter"
android:layout_alignParentBottom="true"
android:layout_marginBottom="2dip"
android:scaleType="center"
diff --git a/res/layout-port/review_module_control.xml b/res/layout-port/review_module_control.xml
index 3c4280ed2..c7b04f79a 100644
--- a/res/layout-port/review_module_control.xml
+++ b/res/layout-port/review_module_control.xml
@@ -23,7 +23,7 @@
android:contentDescription="@string/accessibility_review_ok"
android:visibility="gone"
android:scaleType="center"
- android:layout_gravity="right|bottom"
+ android:layout_gravity="end|bottom"
android:background="@drawable/bg_pressed"
android:src="@drawable/ic_menu_done_holo_light" />
@@ -42,7 +42,7 @@
android:contentDescription="@string/accessibility_review_cancel"
android:visibility="gone"
android:scaleType="center"
- android:layout_gravity="left|bottom"
+ android:layout_gravity="start|bottom"
android:background="@drawable/bg_pressed"
android:src="@drawable/ic_menu_cancel_holo_light" />
</com.android.camera.ui.RotatableLayout>
diff --git a/res/layout-port/switcher_popup.xml b/res/layout-port/switcher_popup.xml
index 8fe09a361..609f869db 100644
--- a/res/layout-port/switcher_popup.xml
+++ b/res/layout-port/switcher_popup.xml
@@ -19,10 +19,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|left"
- android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip"
android:layout_marginBottom="8dip"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
android:paddingTop="8dip"
android:paddingBottom="8dip"
android:background="#80000000" />
diff --git a/res/layout/action_bar_text.xml b/res/layout/action_bar_text.xml
index a33264702..10839eaa0 100644
--- a/res/layout/action_bar_text.xml
+++ b/res/layout/action_bar_text.xml
@@ -21,8 +21,8 @@
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:gravity="center_vertical"
- android:paddingLeft="18dp"
- android:paddingRight="18dp"
+ android:paddingStart="18dp"
+ android:paddingEnd="18dp"
android:singleLine="true"
android:minHeight="?attr/listPreferredItemHeightSmall"
/>
diff --git a/res/layout/action_bar_two_line_text.xml b/res/layout/action_bar_two_line_text.xml
index 92a4af926..6233d8eb0 100644
--- a/res/layout/action_bar_two_line_text.xml
+++ b/res/layout/action_bar_two_line_text.xml
@@ -19,7 +19,7 @@
android:orientation="vertical"
android:gravity="center_vertical"
android:duplicateParentState="false"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_width="wrap_content" >
<TextView
android:id="@android:id/text1"
@@ -35,7 +35,7 @@
android:singleLine="true"
android:ellipsize="end"
android:includeFontPadding="false"
- android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
android:layout_below="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
diff --git a/res/layout/action_mode.xml b/res/layout/action_mode.xml
index 6c516e618..096187b95 100644
--- a/res/layout/action_mode.xml
+++ b/res/layout/action_mode.xml
@@ -14,35 +14,22 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/navigation_bar"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal">
-
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
android:layout_height="match_parent">
- <ImageView android:layout_gravity="right"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:src="@drawable/dropdown_ic_arrow_normal_holo_dark" />
- <Button android:id="@+id/selection_menu"
- style="?android:attr/actionButtonStyle"
- android:divider="?android:attr/listDividerAlertDialog"
- android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
- android:textColor="?android:attr/actionMenuTextColor"
- android:singleLine="true"
- android:gravity="left|center_vertical"
- android:paddingRight="25dip"
- android:layout_width="wrap_content"
- android:layout_height="match_parent" />
- </FrameLayout>
- <ImageView android:layout_marginLeft="16dip"
- android:layout_marginRight="8dip"
+ <Button android:id="@+id/selection_menu"
+ style="?android:attr/actionButtonStyle"
+ android:divider="?android:attr/listDividerAlertDialog"
+ android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
+ android:textColor="?android:attr/actionMenuTextColor"
+ android:singleLine="true"
+ android:gravity="left|center_vertical"
+ android:paddingRight="25dip"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="bottom"
- android:src="@drawable/cab_divider_vertical_dark" />
-</LinearLayout>
+ android:layout_height="match_parent" />
+ <ImageView android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:src="@drawable/dropdown_ic_arrow"
+ android:layout_toRightOf="@id/selection_menu"/>
+
+</RelativeLayout>
diff --git a/res/layout/album_header.xml b/res/layout/album_header.xml
index 76c9a457f..caae962b3 100644
--- a/res/layout/album_header.xml
+++ b/res/layout/album_header.xml
@@ -27,8 +27,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:paddingLeft="15dip"
+ android:layout_alignParentStart="true"
+ android:paddingStart="15dip"
android:paddingBottom="10dip"
android:paddingTop="20dip"
android:background="@drawable/white_text_bg_gradient"
diff --git a/res/layout/appwidget_main.xml b/res/layout/appwidget_main.xml
index 0accabb50..368d90bc5 100644
--- a/res/layout/appwidget_main.xml
+++ b/res/layout/appwidget_main.xml
@@ -31,6 +31,7 @@
android:layout_width="@dimen/stack_photo_width"
android:layout_height="@dimen/stack_photo_height"
android:gravity="center"
+ android:textColor="@android:color/black"
android:text="@string/appwidget_empty_text"/>
</FrameLayout>
</RelativeLayout>
diff --git a/res/layout/audio_effects_dialog.xml b/res/layout/audio_effects_dialog.xml
new file mode 100644
index 000000000..49dcafb56
--- /dev/null
+++ b/res/layout/audio_effects_dialog.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center_horizontal"
+ android:paddingBottom="10dp">
+
+ <LinearLayout
+ android:id="@+id/aEffectsPanel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="10dp"
+ android:gravity="center_vertical">
+
+ <com.android.gallery3d.ui.Knob
+ android:id="@+id/bBStrengthKnob"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ custom:label="@string/bass_boost_strength"
+ custom:foreground="@drawable/knob" />
+
+ <com.android.gallery3d.ui.Knob
+ android:id="@+id/vIStrengthKnob"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ custom:label="@string/virtualizer_strength"
+ custom:foreground="@drawable/knob" />
+
+ </LinearLayout>
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/audio_effects_title.xml b/res/layout/audio_effects_title.xml
new file mode 100644
index 000000000..fcfb11d1e
--- /dev/null
+++ b/res/layout/audio_effects_title.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2014, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="left|center_vertical">
+
+ <TextView
+ android:text="@string/audio_effects_dialog_title"
+ android:gravity="left|center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="10dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginBottom="10dp"
+ android:textSize="20dp" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1" />
+
+ <ToggleButton
+ android:id="@+id/audio_effects_switch"
+ android:textOn=""
+ android:textOff=""
+ android:layout_width="72dp"
+ android:layout_height="34dp"
+ android:layout_marginEnd="4dp"/>
+</LinearLayout>
diff --git a/res/layout/bookmark.xml b/res/layout/bookmark.xml
new file mode 100644
index 000000000..ac4ac34a4
--- /dev/null
+++ b/res/layout/bookmark.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+ <TextView
+ android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_centerInParent="true"
+ android:gravity="center"
+ android:paddingBottom="30dip"
+ android:text="@string/bookmark_empty"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:visibility="gone" />
+</FrameLayout>
diff --git a/res/layout/bookmark_edit_dialog.xml b/res/layout/bookmark_edit_dialog.xml
new file mode 100644
index 000000000..8282d39af
--- /dev/null
+++ b/res/layout/bookmark_edit_dialog.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="8dip" >
+
+ <TextView
+ style="?android:attr/textAppearanceSmallInverse"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/bookmark_title" />
+
+ <EditText
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="2dip"
+ android:inputType="text"
+ android:scrollHorizontally="true"
+ android:singleLine="true" />
+
+ <TextView
+ style="?android:attr/textAppearanceSmallInverse"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/bookmark_location" />
+
+ <EditText
+ android:id="@+id/data"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="2dip"
+ android:inputType="textUri"
+ android:scrollHorizontally="true"
+ android:singleLine="true" />
+ </LinearLayout>
+
+</ScrollView>
diff --git a/res/layout/bookmark_item.xml b/res/layout/bookmark_item.xml
new file mode 100644
index 000000000..3fb2fab89
--- /dev/null
+++ b/res/layout/bookmark_item.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/panel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="6dip" >
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@+id/data"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent" />
+
+</LinearLayout>
diff --git a/res/layout/camera_filmstrip.xml b/res/layout/camera_filmstrip.xml
index d94a9d2a8..6fbc62114 100644
--- a/res/layout/camera_filmstrip.xml
+++ b/res/layout/camera_filmstrip.xml
@@ -32,8 +32,8 @@
android:background="@drawable/transparent_button_background"
android:clickable="true"
android:paddingBottom="5dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
android:paddingTop="5dp"
android:visibility="gone"
android:src="@drawable/ic_view_photosphere" />
@@ -44,8 +44,8 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:paddingBottom="52dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
android:paddingTop="5dp"
android:visibility="gone"
android:orientation="vertical">
@@ -61,10 +61,10 @@
android:shadowRadius="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:paddingBottom="8dp"
android:visibility="visible"
- android:layout_gravity="right"/>
+ android:layout_gravity="end"/>
<ProgressBar
android:id="@+id/pano_stitching_progress_bar"
diff --git a/res/layout/choose_widget_type.xml b/res/layout/choose_widget_type.xml
index 5f1739ad3..d8af048b9 100644
--- a/res/layout/choose_widget_type.xml
+++ b/res/layout/choose_widget_type.xml
@@ -16,8 +16,8 @@
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_type"
- android:paddingLeft="32dp"
- android:paddingRight="32dp"
+ android:paddingStart="32dp"
+ android:paddingEnd="32dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@@ -42,8 +42,8 @@
<View android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_weight="0"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
android:background="?android:attr/dividerHorizontal" />
<Button style="?android:attr/buttonBarButtonStyle"
android:id="@+id/cancel"
diff --git a/res/layout/count_down_to_capture.xml b/res/layout/count_down_to_capture.xml
index 68276ad40..5cf1e3f94 100644
--- a/res/layout/count_down_to_capture.xml
+++ b/res/layout/count_down_to_capture.xml
@@ -27,7 +27,7 @@
<TextView android:id="@+id/count_down_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingLeft="10dp"
+ android:paddingStart="10dp"
android:paddingTop="20dp"
android:textSize="20sp"
android:textColor="@android:color/white"
diff --git a/res/layout/countdown_setting_popup.xml b/res/layout/countdown_setting_popup.xml
index 22acd9251..1a314ad56 100644
--- a/res/layout/countdown_setting_popup.xml
+++ b/res/layout/countdown_setting_popup.xml
@@ -55,8 +55,8 @@
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
android:focusable="false" />
</LinearLayout>
diff --git a/res/layout/dialog_picker.xml b/res/layout/dialog_picker.xml
index ccc512154..fc5f2877a 100644
--- a/res/layout/dialog_picker.xml
+++ b/res/layout/dialog_picker.xml
@@ -26,8 +26,8 @@
</FrameLayout>
<ImageView android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
android:background="@drawable/list_divider_holo_dark" />
<Button style="?android:attr/buttonBarButtonStyle"
android:id="@+id/cancel"
diff --git a/res/layout/editor_grad_button.xml b/res/layout/editor_grad_button.xml
index 4d1b10b6b..032eb686a 100644
--- a/res/layout/editor_grad_button.xml
+++ b/res/layout/editor_grad_button.xml
@@ -20,7 +20,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentTop="true"
- android:layout_marginLeft="26dp"
+ android:layout_marginStart="26dp"
android:layout_marginTop="21dp"
android:orientation="horizontal" >
diff --git a/res/layout/filtershow_actionbar.xml b/res/layout/filtershow_actionbar.xml
index 5f0aa3ff6..924d7178d 100644
--- a/res/layout/filtershow_actionbar.xml
+++ b/res/layout/filtershow_actionbar.xml
@@ -17,11 +17,10 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:background="@drawable/filtershow_button_background"
android:id="@+id/filtershow_done"
android:textAllCaps="true"
android:text="@string/save"
android:gravity="center_vertical"
android:textSize="14sp"
- android:drawableLeft="@drawable/menu_save_photo"
+ android:drawableStart="@drawable/menu_save_photo"
android:drawablePadding="8dip" /> \ No newline at end of file
diff --git a/res/layout/filtershow_activity.xml b/res/layout/filtershow_activity.xml
index 79c315b7b..e3f4a0eeb 100644
--- a/res/layout/filtershow_activity.xml
+++ b/res/layout/filtershow_activity.xml
@@ -19,7 +19,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainView"
- android:background="@drawable/filtershow_tiled_background">
+ android:background="@color/filtershow_background">
<LinearLayout
android:layout_width="match_parent"
@@ -33,7 +33,7 @@
<ProgressBar
android:id="@+id/loading"
- style="@android:style/Widget.Holo.ProgressBar.Large"
+ style="@android:style/Widget.Material.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/res/layout/filtershow_color_picker.xml b/res/layout/filtershow_color_picker.xml
index e56bc0d49..7b05765fc 100644
--- a/res/layout/filtershow_color_picker.xml
+++ b/res/layout/filtershow_color_picker.xml
@@ -30,8 +30,8 @@
android:id="@+id/btnSelect"
android:layout_width="match_parent"
android:layout_height="32dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="0dp"
/>
@@ -40,7 +40,7 @@
android:layout_width="match_parent"
android:layout_height="256dp"
android:layout_marginTop="0dp"
- android:layout_marginRight="1dp"/>
+ android:layout_marginEnd="1dp"/>
<com.android.gallery3d.filtershow.colorpicker.ColorHueView
android:id="@+id/ColorHueView"
diff --git a/res/layout/filtershow_control_action_slider.xml b/res/layout/filtershow_control_action_slider.xml
index 34eac1e69..ebaf7be18 100644
--- a/res/layout/filtershow_control_action_slider.xml
+++ b/res/layout/filtershow_control_action_slider.xml
@@ -48,7 +48,7 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/ic_menu_trash_holo_light"
+ android:src="@drawable/ic_menu_trash"
android:paddingBottom="8dp" />
</LinearLayout>
diff --git a/res/layout/filtershow_control_color_chooser.xml b/res/layout/filtershow_control_color_chooser.xml
index 5bfe46031..145041cf0 100644
--- a/res/layout/filtershow_control_color_chooser.xml
+++ b/res/layout/filtershow_control_color_chooser.xml
@@ -33,7 +33,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button02"
@@ -41,7 +41,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button03"
@@ -49,7 +49,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button04"
@@ -57,7 +57,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
<Button
android:id="@+id/draw_color_button05"
@@ -65,7 +65,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginRight="4dp"/>
+ android:layout_marginEnd="4dp"/>
</LinearLayout>
diff --git a/res/layout/filtershow_control_style_chooser.xml b/res/layout/filtershow_control_style_chooser.xml
index 9588ea208..d0004ffe2 100644
--- a/res/layout/filtershow_control_style_chooser.xml
+++ b/res/layout/filtershow_control_style_chooser.xml
@@ -18,7 +18,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.imagefilterharness"
android:layout_width="match_parent"
- android:layout_height="32dp"
+ android:layout_height="wrap_content"
android:orientation="horizontal" >
<HorizontalScrollView
android:id="@+id/scrollList"
diff --git a/res/layout/filtershow_control_title_slider.xml b/res/layout/filtershow_control_title_slider.xml
index 584e015fa..23a59785c 100644
--- a/res/layout/filtershow_control_title_slider.xml
+++ b/res/layout/filtershow_control_title_slider.xml
@@ -23,13 +23,13 @@
<TextView
android:id="@+id/controlName"
- android:layout_gravity="left"
- android:layout_marginLeft="8dip" />
+ android:layout_gravity="start"
+ android:layout_marginStart="8dip" />
<TextView
android:id="@+id/controlValue"
- android:layout_gravity="right"
- android:layout_marginRight="8dip"
+ android:layout_gravity="end"
+ android:layout_marginEnd="8dip"
android:textStyle="bold" />
<SeekBar
diff --git a/res/layout/filtershow_cp_custom_title.xml b/res/layout/filtershow_cp_custom_title.xml
index cef8b6c05..5d7ed924b 100644
--- a/res/layout/filtershow_cp_custom_title.xml
+++ b/res/layout/filtershow_cp_custom_title.xml
@@ -21,6 +21,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp" >
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp" >
</TextView> \ No newline at end of file
diff --git a/res/layout/filtershow_export_dialog.xml b/res/layout/filtershow_export_dialog.xml
index 4e13f39da..8dc5fc386 100644
--- a/res/layout/filtershow_export_dialog.xml
+++ b/res/layout/filtershow_export_dialog.xml
@@ -40,7 +40,7 @@
<TextView
android:text="@string/size"
- android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
android:layout_gravity="start|center_vertical"/>
<EditText
@@ -61,7 +61,7 @@
<TextView
android:id="@+id/estimadedSize"
- android:layout_marginRight="8dp"
+ android:layout_marginEnd="8dp"
android:layout_gravity="end|center_vertical"/>
<LinearLayout
diff --git a/res/layout/filtershow_info_panel.xml b/res/layout/filtershow_info_panel.xml
index 43878b6ac..1ca64bd6d 100644
--- a/res/layout/filtershow_info_panel.xml
+++ b/res/layout/filtershow_info_panel.xml
@@ -74,7 +74,7 @@
android:layout_width="0dp"
android:layout_height="196dp"
android:scaleType="centerCrop"
- android:layout_marginRight="16dp"
+ android:layout_marginEnd="16dp"
android:background="@null"
/>
diff --git a/res/layout/filtershow_main_panel.xml b/res/layout/filtershow_main_panel.xml
index d3400fae5..f8b26b088 100644
--- a/res/layout/filtershow_main_panel.xml
+++ b/res/layout/filtershow_main_panel.xml
@@ -95,8 +95,19 @@
android:scaleType="centerInside"
android:src="@drawable/ic_photoeditor_color"/>
+ <ImageButton
+ android:id="@+id/makeupButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:padding="2dip"
+ android:background="@drawable/filtershow_button_background"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ android:src="@drawable/ic_photoeditor_makeup"/>
+
</LinearLayout>
</com.android.gallery3d.filtershow.CenteredLinearLayout>
-</LinearLayout> \ No newline at end of file
+</LinearLayout>
diff --git a/res/layout/filtershow_presets_management_row.xml b/res/layout/filtershow_presets_management_row.xml
index bd3e47928..d4e05bafe 100644
--- a/res/layout/filtershow_presets_management_row.xml
+++ b/res/layout/filtershow_presets_management_row.xml
@@ -47,6 +47,6 @@
android:background="@android:color/transparent"
android:layout_weight=".1"
android:gravity="center"
- android:src="@drawable/ic_menu_trash_holo_light"
+ android:src="@drawable/ic_menu_trash"
android:visibility="gone"/>
</LinearLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_splashscreen.xml b/res/layout/filtershow_splashscreen.xml
index 06958cab2..8d7fe3eb3 100644
--- a/res/layout/filtershow_splashscreen.xml
+++ b/res/layout/filtershow_splashscreen.xml
@@ -23,7 +23,7 @@
android:padding="10dip">
<ProgressBar android:id="@+id/progress_bar"
- android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
diff --git a/res/layout/ingest_date_tile.xml b/res/layout/ingest_date_tile.xml
index 8cd63e9a0..b04221361 100644
--- a/res/layout/ingest_date_tile.xml
+++ b/res/layout/ingest_date_tile.xml
@@ -61,4 +61,4 @@
android:fontFamily="sans-serif"
android:textColor="@color/ingest_date_tile_text" />
</GridLayout>
-</com.android.gallery3d.ingest.ui.DateTileView> \ No newline at end of file
+</com.android.gallery3d.ingest.ui.DateTileView>
diff --git a/res/layout/ingest_fullsize.xml b/res/layout/ingest_fullsize.xml
index d57c4ae50..91a3fcf20 100644
--- a/res/layout/ingest_fullsize.xml
+++ b/res/layout/ingest_fullsize.xml
@@ -41,4 +41,4 @@
android:layout_alignParentRight="true"
android:text="@string/ingest_import" />
-</com.android.gallery3d.ingest.ui.MtpFullscreenView> \ No newline at end of file
+</com.android.gallery3d.ingest.ui.MtpFullscreenView>
diff --git a/res/layout/knob.xml b/res/layout/knob.xml
new file mode 100644
index 000000000..d504774e7
--- /dev/null
+++ b/res/layout/knob.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <ImageView
+ android:id="@+id/knob_foreground"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ <ImageView
+ android:id="@+id/knob_toggle_on"
+ android:layout_gravity="center_horizontal|center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/knob_toggle_on"
+ android:visibility="gone" />
+ <ImageView
+ android:id="@+id/knob_toggle_off"
+ android:layout_gravity="center_horizontal|center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/knob_toggle_off"
+ android:visibility="gone" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_horizontal"
+ android:orientation="vertical"
+ android:gravity="center_horizontal">
+
+ <TextView
+ android:id="@+id/knob_value"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
+ <TextView
+ android:id="@+id/knob_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:ellipsize="marquee"
+ android:visibility="gone" />
+ </LinearLayout>
+
+</FrameLayout>
diff --git a/res/layout/main.xml b/res/layout/main.xml
index 08e595959..e26e0fc6b 100644
--- a/res/layout/main.xml
+++ b/res/layout/main.xml
@@ -13,8 +13,8 @@
<FrameLayout android:id="@+id/footer"
android:visibility="gone"
android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentEnd="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
diff --git a/res/layout/manage_offline_bar.xml b/res/layout/manage_offline_bar.xml
index 5c716133d..6996180f0 100644
--- a/res/layout/manage_offline_bar.xml
+++ b/res/layout/manage_offline_bar.xml
@@ -39,23 +39,23 @@
</RelativeLayout>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="@dimen/manage_cache_bottom_height"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
android:background="#1f1f1f">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/make_available_offline"
android:textSize="14sp"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:gravity="center_vertical"
- android:drawableLeft="@drawable/ic_menu_make_offline"
+ android:drawableStart="@drawable/ic_menu_make_offline"
android:drawablePadding="3dp"/>
<Button android:id="@+id/done"
android:layout_width="74dp"
android:layout_height="match_parent"
android:text="@string/done"
android:textSize="14sp"
- android:layout_alignParentRight="true"/>
+ android:layout_alignParentEnd="true"/>
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout/menu_indicators_keyguard.xml b/res/layout/menu_indicators_keyguard.xml
index 7a8795d23..b8f36cf78 100644
--- a/res/layout/menu_indicators_keyguard.xml
+++ b/res/layout/menu_indicators_keyguard.xml
@@ -21,7 +21,7 @@
<ImageView
android:id="@+id/menu_scenemode_indicator"
style="@style/MenuIndicator"
- android:layout_gravity="left|top"
+ android:layout_gravity="start|top"
android:src="@drawable/ic_indicator_sce_off" />
<ImageView
@@ -33,13 +33,13 @@
<ImageView
android:id="@+id/menu_flash_indicator"
style="@style/MenuIndicator"
- android:layout_gravity="right|top"
+ android:layout_gravity="end|top"
android:src="@drawable/ic_indicator_flash_auto" />
<ImageView
android:id="@+id/menu_exposure_indicator"
style="@style/MenuIndicator"
- android:layout_gravity="left|bottom"
+ android:layout_gravity="start|bottom"
android:src="@drawable/ic_indicator_ev_0" />
<ImageView
@@ -51,7 +51,7 @@
<ImageView
android:id="@+id/menu_wb_indicator"
style="@style/MenuIndicator"
- android:layout_gravity="right|bottom"
+ android:layout_gravity="end|bottom"
android:src="@drawable/ic_indicator_wb_off" />
</FrameLayout> \ No newline at end of file
diff --git a/res/layout/movie_view.xml b/res/layout/movie_view.xml
index 75b8dfd4f..a08679280 100644
--- a/res/layout/movie_view.xml
+++ b/res/layout/movie_view.xml
@@ -19,7 +19,7 @@
android:background="@android:color/black"
android:layout_width="match_parent"
android:layout_height="match_parent">
- <VideoView android:id="@+id/surface_view"
+ <org.codeaurora.gallery3d.video.CodeauroraVideoView android:id="@+id/surface_view"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/layout/multigrid_content.xml b/res/layout/multigrid_content.xml
index b1cb145a2..618af4898 100644
--- a/res/layout/multigrid_content.xml
+++ b/res/layout/multigrid_content.xml
@@ -36,7 +36,7 @@
</LinearLayout>
- <FrameLayout android:id="@+id/gridContainer"
+ <HorizontalScrollView android:id="@+id/gridContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -52,6 +52,6 @@
android:layout_height="match_parent"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
- </FrameLayout>
+ </HorizontalScrollView>
-</FrameLayout> \ No newline at end of file
+</FrameLayout>
diff --git a/res/layout/photo_frame.xml b/res/layout/photo_frame.xml
index deadaebc1..63faf539d 100755
--- a/res/layout/photo_frame.xml
+++ b/res/layout/photo_frame.xml
@@ -19,8 +19,8 @@
android:layout_height="match_parent"
android:paddingTop="4dp"
android:paddingBottom="23dp"
- android:paddingLeft="12dp"
- android:paddingRight="12dp">
+ android:paddingStart="12dp"
+ android:paddingEnd="12dp">
<ImageView android:id="@+id/photo"
android:layout_gravity="center"
android:layout_width="wrap_content"
diff --git a/res/layout/photopage_bottom_controls.xml b/res/layout/photopage_bottom_controls.xml
index f3226e68c..51f714ede 100644
--- a/res/layout/photopage_bottom_controls.xml
+++ b/res/layout/photopage_bottom_controls.xml
@@ -1,50 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/photopage_bottom_controls"
- android:padding="10dp"
- android:layout_width="match_parent"
+ android:id="@+id/photopage_bottom_controls"
+ android:padding="10dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:orientation="horizontal"
+ android:visibility="gone">
+
+ <FrameLayout
+ android:id="@+id/photopage_bottom_control_tiny_planet"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/floating_action_button_margin_left"
+ android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentBottom="true"
+ android:background="@drawable/floating_action_button"
+ android:elevation="@dimen/floating_action_button_translation_z"
+ android:clickable="true"
+ android:visibility="gone">
+ <ImageButton
+ android:layout_width="@dimen/floating_action_button_width"
+ android:layout_height="@dimen/floating_action_button_height"
+ android:id="@+id/floating_action_button_tiny_planet"
+ android:background="@drawable/floating_action_button"
+ android:tint="@color/floating_action_button_icon_color"
+ android:src="@drawable/ic_menu_tiny_planet"
+ android:clickable="false"
+ android:duplicateParentState="true"/>
+ </FrameLayout>
+
+ <FrameLayout
+ android:id="@+id/photopage_bottom_control_panorama"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/floating_action_button_margin_left"
+ android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+ android:layout_centerHorizontal="true"
+ android:layout_alignParentBottom="true"
+ android:background="@drawable/floating_action_button"
+ android:elevation="@dimen/floating_action_button_translation_z"
+ android:clickable="true"
+ android:visibility="gone">
+ <ImageButton
+ android:layout_width="70dp"
+ android:layout_height="70dp"
+ android:id="@+id/floating_action_button_panorama"
+ android:background="@drawable/floating_action_button"
+ android:tint="@color/floating_action_button_icon_color"
+ android:src="@drawable/ic_view_photosphere"
+ android:clickable="false"
+ android:duplicateParentState="true"/>
+ </FrameLayout>
+
+ <FrameLayout
+ android:id="@+id/photopage_bottom_control_edit"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/floating_action_button_margin_right"
+ android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+ android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:orientation="horizontal"
+ android:background="@drawable/fab_accent"
+ android:elevation="@dimen/floating_action_button_translation_z"
+ android:clickable="true"
android:visibility="gone">
<ImageButton
- android:id="@+id/photopage_bottom_control_edit"
- android:src="@drawable/ic_menu_edit_holo_dark"
- android:background="@drawable/photopage_bottom_button_background"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingLeft="15dp"
- android:paddingRight="15dp"
- android:visibility="gone"/>
- <ImageButton
- android:id="@+id/photopage_bottom_control_panorama"
- android:src="@drawable/ic_view_photosphere"
- android:background="@drawable/transparent_button_background"
- android:layout_width="70dp"
- android:layout_height="70dp"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:visibility="gone"/>
- <ImageButton
- android:id="@+id/photopage_bottom_control_tiny_planet"
- android:src="@drawable/ic_menu_tiny_planet"
- android:background="@drawable/photopage_bottom_button_background"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingLeft="15dp"
- android:paddingRight="15dp"
- android:visibility="gone"/>
-</RelativeLayout>
+ android:layout_width="@dimen/floating_action_button_width"
+ android:layout_height="@dimen/floating_action_button_height"
+ android:id="@+id/floating_action_button_edit"
+ android:background="@drawable/floating_action_button"
+ android:tint="@color/floating_action_button_icon_color"
+ android:src="@drawable/ic_edit"
+ android:clickable="false"
+ android:duplicateParentState="true"/>
+ </FrameLayout>
+ </RelativeLayout>
diff --git a/res/layout/photopage_progress_bar.xml b/res/layout/photopage_progress_bar.xml
index 778feb365..57b78320b 100644
--- a/res/layout/photopage_progress_bar.xml
+++ b/res/layout/photopage_progress_bar.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:padding="25dp"
android:visibility="invisible">
<View
@@ -19,7 +19,7 @@
android:background="#ff33b5e5"
android:layout_width="10dp"
android:layout_height="8dp"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:visibility="visible"/>
<TextView
@@ -33,7 +33,7 @@
android:shadowRadius="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:layout_above="@id/photopage_progress_background"
android:paddingBottom="8dp"
android:visibility="visible"/>
diff --git a/res/layout/popup_list_item.xml b/res/layout/popup_list_item.xml
index 5a87af7cc..837da0a5d 100644
--- a/res/layout/popup_list_item.xml
+++ b/res/layout/popup_list_item.xml
@@ -21,8 +21,8 @@
android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
android:singleLine="true"
android:gravity="center_vertical"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
android:minHeight="?android:attr/listPreferredItemHeight"
android:minWidth="196dp"
/>
diff --git a/res/layout/rotate_dialog.xml b/res/layout/rotate_dialog.xml
index c62ce915b..c1cf866b7 100644
--- a/res/layout/rotate_dialog.xml
+++ b/res/layout/rotate_dialog.xml
@@ -44,8 +44,8 @@
<TextView android:id="@+id/rotate_dialog_title"
style="@style/TextAppearance.DialogWindowTitle"
android:gravity="center_vertical"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="64dp"/>
diff --git a/res/layout/setting_list.xml b/res/layout/setting_list.xml
new file mode 100644
index 000000000..51ad7538e
--- /dev/null
+++ b/res/layout/setting_list.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <!--
+ /* * Copyright (C) 2008 Esmertec AG. * Copyright (C) 2008 The Android
+ Open Source Project * * Licensed under the Apache License, Version 2.0
+ (the "License"); * you may not use this file except in compliance with
+ the License. * You may obtain a copy of the License at * *
+ http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by
+ applicable law or agreed to in writing, software * distributed under the
+ License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR
+ CONDITIONS OF ANY KIND, either express or implied. * See the License for
+ the specific language governing permissions and * limitations under the
+ License. */
+ -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical" android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <ListView android:id="@android:id/list" android:layout_width="match_parent"
+ android:layout_height="0px" android:layout_weight="1"
+ android:paddingStart="16dip" android:paddingEnd="16dip"
+ android:paddingTop="0dp" android:paddingBottom="0dp"
+ android:clipToPadding="false" android:scrollbarStyle="outsideOverlay"
+ android:drawSelectorOnTop="false" android:cacheColorHint="@android:color/transparent"
+ android:listPreferredItemHeight="48dp"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+</LinearLayout>
+
diff --git a/res/layout/time_interval_picker.xml b/res/layout/time_interval_picker.xml
index d2a946273..daab1c8b8 100644
--- a/res/layout/time_interval_picker.xml
+++ b/res/layout/time_interval_picker.xml
@@ -40,8 +40,8 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="16dip"
- android:paddingRight="16dip" >
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip" >
<!-- time interval duration -->
<NumberPicker
@@ -57,7 +57,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
- android:layout_marginLeft="20dip"
+ android:layout_marginStart="20dip"
android:focusable="false" />
</LinearLayout>
diff --git a/res/layout/time_interval_popup.xml b/res/layout/time_interval_popup.xml
index 9cf224a7a..2eadf9005 100644
--- a/res/layout/time_interval_popup.xml
+++ b/res/layout/time_interval_popup.xml
@@ -38,8 +38,8 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
- android:layout_marginRight="8dp"
- android:layout_gravity="right|center_vertical" />
+ android:layout_marginEnd="8dp"
+ android:layout_gravity="end|center_vertical" />
</LinearLayout>
<View style="@style/PopupTitleSeparator" />
@@ -54,8 +54,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="16dip"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
android:paddingBottom="16dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/set_time_interval_help"/>
diff --git a/res/layout/trim_menu.xml b/res/layout/trim_menu.xml
index e2333921a..c46be4c4b 100644
--- a/res/layout/trim_menu.xml
+++ b/res/layout/trim_menu.xml
@@ -20,13 +20,13 @@
android:layout_centerVertical="true">
<TextView
android:id="@+id/start_trim"
- android:layout_marginLeft="8dp"
+ android:layout_marginStart="8dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/save"
android:textAllCaps="true"
android:textSize="14sp"
android:gravity="left|center_vertical"
- android:drawableLeft="@drawable/menu_save_photo"
+ android:drawableStart="@drawable/menu_save_photo"
android:drawablePadding="8dp" />
</FrameLayout>
diff --git a/res/layout/undo_bar.xml b/res/layout/undo_bar.xml
index 33ec91d85..bd4274d16 100644
--- a/res/layout/undo_bar.xml
+++ b/res/layout/undo_bar.xml
@@ -27,5 +27,5 @@
<TextView android:id="@+id/undo_button"
style="@style/UndoButton"
android:text="@string/undo"
- android:drawableLeft="@drawable/ic_menu_revert_holo_dark"/>
+ android:drawableStart="@drawable/ic_menu_revert_holo_dark"/>
</LinearLayout>
diff --git a/res/layout/view_gif_image.xml b/res/layout/view_gif_image.xml
new file mode 100644
index 000000000..976549a6b
--- /dev/null
+++ b/res/layout/view_gif_image.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:id="@+id/image_absoluteLayout"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+ <ImageView android:id="@+id/image_display_area"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:clickable="true">
+ </ImageView>
+ </LinearLayout>
+
+</RelativeLayout>
diff --git a/res/layout/viewfinder_labels_video.xml b/res/layout/viewfinder_labels_video.xml
index cfe3b0211..1ed7f3947 100644
--- a/res/layout/viewfinder_labels_video.xml
+++ b/res/layout/viewfinder_labels_video.xml
@@ -21,7 +21,7 @@
<TextView android:id="@+id/recording_time"
style="@style/OnViewfinderLabel"
android:gravity="center"
- android:drawableLeft="@drawable/ic_recording_indicator"
+ android:drawableStart="@drawable/ic_recording_indicator"
android:drawablePadding="5dp"
android:visibility="gone" />
<TextView android:id="@+id/time_lapse_label"
diff --git a/res/menu/albumset.xml b/res/menu/albumset.xml
index 8ac8cbbd2..1a33ba25a 100644
--- a/res/menu/albumset.xml
+++ b/res/menu/albumset.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 Google Inc.
+<!-- Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ Not a Contribution.
+
+ Copyright (C) 2010 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -21,17 +24,30 @@
<item android:id="@+id/action_select"
android:title="@string/select_album"
android:showAsAction="never" />
+
+<!-- These items do not serve a purpose due to the lack of built in
+ picasa support. -->
<item android:id="@+id/action_manage_offline"
android:title="@string/make_available_offline"
+ android:visible="false"
android:showAsAction="never" />
<item android:id="@+id/action_sync_picasa_albums"
android:title="@string/sync_picasa_albums"
+ android:visible="false"
android:showAsAction="never" />
+
+<!-- Settings visibility in menu set to false because they are empty.
+ This should be set to true when GallerySettings.java has content. -->
<item android:id="@+id/action_settings"
android:title="@string/settings"
+ android:visible="false"
android:showAsAction="never" />
+
<item android:id="@+id/action_general_help"
android:title="@string/help"
android:visible="false"
android:showAsAction="never" />
+ <item android:id="@+id/action_more_image"
+ android:title="@string/more_image"
+ android:showAsAction="never" />
</menu>
diff --git a/res/menu/movie.xml b/res/menu/movie.xml
index fde235cba..0676efb73 100644
--- a/res/menu/movie.xml
+++ b/res/menu/movie.xml
@@ -15,7 +15,7 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_share"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:enabled="true"
android:actionProviderClass="android.widget.ShareActionProvider"
diff --git a/res/menu/operation.xml b/res/menu/operation.xml
index d1791e22f..b915f39c5 100644
--- a/res/menu/operation.xml
+++ b/res/menu/operation.xml
@@ -23,21 +23,21 @@
But, if share_panorama is set to never, it doesn't seem to get promoted
to the action bar and stays on the overflow menu. -->
<item android:id="@+id/action_share_panorama"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/ic_menu_share"
android:title="@string/share_panorama"
android:visible="false"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom">
</item>
<item android:id="@+id/action_share"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:visible="false"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="never">
</item>
<item android:id="@+id/action_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
+ android:icon="@drawable/ic_menu_trash"
android:title="@string/delete"
android:visible="false"
android:showAsAction="ifRoom" />
diff --git a/res/menu/photo.xml b/res/menu/photo.xml
index bcd452e28..91bf0441f 100644
--- a/res/menu/photo.xml
+++ b/res/menu/photo.xml
@@ -23,19 +23,19 @@
But, if share_panorama is set to never, it doesn't seem to get promoted
to the action bar and stays on the overflow menu. -->
<item android:id="@+id/action_share_panorama"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/ic_menu_share"
android:title="@string/share_panorama"
android:visible="false"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom" />
<item android:id="@+id/action_share"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:visible="false"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="never" />
<item android:id="@+id/action_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
+ android:icon="@drawable/ic_menu_trash"
android:title="@string/delete"
android:visible="false"
android:showAsAction="never" />
diff --git a/res/mipmap-hdpi/ic_launcher_gallery.png b/res/mipmap-hdpi/ic_launcher_gallery.png
index 23ea99890..65d9f3c7f 100644
--- a/res/mipmap-hdpi/ic_launcher_gallery.png
+++ b/res/mipmap-hdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_gallery.png b/res/mipmap-mdpi/ic_launcher_gallery.png
index e1a99498d..5eb1f6235 100644
--- a/res/mipmap-mdpi/ic_launcher_gallery.png
+++ b/res/mipmap-mdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_gallery.png b/res/mipmap-xhdpi/ic_launcher_gallery.png
index 79544a2b6..aacb61b5f 100644
--- a/res/mipmap-xhdpi/ic_launcher_gallery.png
+++ b/res/mipmap-xhdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_gallery.png b/res/mipmap-xxhdpi/ic_launcher_gallery.png
new file mode 100644
index 000000000..19b1750c1
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_gallery.png b/res/mipmap-xxxhdpi/ic_launcher_gallery.png
new file mode 100644
index 000000000..f13b7349c
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/values-af/cm_strings.xml b/res/values-af/cm_strings.xml
new file mode 100644
index 000000000..0801e5c96
--- /dev/null
+++ b/res/values-af/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tyd van opname</string>
+</resources>
diff --git a/res/values-af/codeaurora_strings.xml b/res/values-af/codeaurora_strings.xml
new file mode 100644
index 000000000..16720fcf3
--- /dev/null
+++ b/res/values-af/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Stap</string>
+ <string name="step_option_desc">Verpersoonlik vinnige vorentoe/terugspeel stap</string>
+ <string name="setp_option_three_second">3 sekondes</string>
+ <string name="setp_option_six_second">6 sekondes</string>
+ <string name="loop">"Omkring"</string>
+ <string name="single">"Enkel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Luidspreker AAN</string>
+ <string name="speaker_off">Luidspreker AF</string>
+ <string name="speaker_need_headset">Prop in oorfone om hierdie funksie te gebruik.</string>
+ <string name="single_track">"Enkele snit"</string>
+ <string name="input_url">"Sleutel URL in"</string>
+ <string name="streaming_settings">"Stroom instellings"</string>
+ <string name="next">"Volgende"</string>
+ <string name="previous">"Vorige"</string>
+ <string name="buffer_size">Buffer grootte</string>
+ <string name="apn">Voorkeur TPN</string>
+ <string name="rtp_min_port">Min poort</string>
+ <string name="rtp_max_port">Maks poort</string>
+ <string name="set_rtp_min_port">Stel min poort</string>
+ <string name="set_rtp_max_port">Stel maks poort</string>
+ <string name="set_buffer_size">Stel buffer grootte</string>
+ <string name="set_apn">Kies gewenste TPN</string>
+ <string name="setting">Instellings</string>
+ <string name="server_timeout_title">"Bediener tydverstreke"</string>
+ <string name="server_timeout_message">"Herkonnekteer met die bediener om die video te speel?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Verbinding het misluk, probeer weer om aan te sluit na %1$d\u2026"</string>
+ <string name="media_controller_live">Regstreeks</string>
+ <string name="media_controller_playing">Speel</string>
+ <string name="media_controller_connecting">Koppel\u2026</string>
+ <string name="bookmark_add">"Voeg boekmerk by"</string>
+ <string name="bookmark_display">"Wys boekmerk"</string>
+ <string name="bookmark_empty">"Geen boekmerk"</string>
+ <string name="bookmark_exist">"Boekmerk bestaan alreeds"</string>
+ <string name="bookmark_add_success">"Boekmerk bygevoeg"</string>
+ <string name="bookmark_list">"Boekmerke"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Ligging"</string>
+ <string name="delete_all">"Verwyder alles"</string>
+ <string name="default_title">"Standaard titel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Nog prente</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kan nie klank afskakel: video nie ondersteun</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Daar is geen kaart program geïnstalleer om die plek te wys nie.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Versterk bas</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D Effek</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Klank effekte</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Prop in oorfone vir hierdie effekte.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Oudio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Jammer, hierdie video lêer kan nie afgewerk word nie</string>
+ <string name="no_permission_for_drm">Jammer, maar DRM beskermde leërs kan nie gedeel word nie</string>
+ <string name="drm_license_info">DRM lisensie inligting</string>
+</resources>
diff --git a/res/drawable/filtershow_tiled_background.xml b/res/values-am/cm_strings.xml
index dfc7592d0..6b111e056 100644
--- a/res/drawable/filtershow_tiled_background.xml
+++ b/res/values-am/cm_strings.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
<!--
- Copyright (C) 2013 The Android Open Source Project
+ Copyright (C) 2012-2014 The CyanogenMod Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +15,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<bitmap
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/filtershow_background_new"
- android:tileMode="repeat"
- android:dither="false" /> \ No newline at end of file
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-am/codeaurora_strings.xml b/res/values-am/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-am/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ar/cm_strings.xml b/res/values-ar/cm_strings.xml
new file mode 100644
index 000000000..c9a2139fd
--- /dev/null
+++ b/res/values-ar/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">مدة التسجيل</string>
+</resources>
diff --git a/res/values-ar/codeaurora_strings.xml b/res/values-ar/codeaurora_strings.xml
new file mode 100644
index 000000000..2a36c5d5b
--- /dev/null
+++ b/res/values-ar/codeaurora_strings.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">خطوة</string>
+ <string name="step_option_desc">تخصيص خطوة التقديم/الترجيع السريع</string>
+ <string name="setp_option_three_second">3 ثوان
+</string>
+ <string name="setp_option_six_second">6 ثوانٍ</string>
+ <string name="loop">"تكرار"</string>
+ <string name="single">"واحد"</string>
+ <string name="stereo">"استيريو"</string>
+ <string name="speaker_on">تشغيل مكبّر الصوت</string>
+ <string name="speaker_off">إيقاف مكبّر الصوت</string>
+ <string name="speaker_need_headset">قم بتوصيل سماعات الرأس لاستخدام هذه الميزة.</string>
+ <string name="single_track">"أغنية واحدة"</string>
+ <string name="input_url">"أدخل عنوان URL"</string>
+ <string name="streaming_settings">"إعدادات التدفق"</string>
+ <string name="next">"التالي"</string>
+ <string name="previous">"السابق"</string>
+ <string name="buffer_size">حجم المخزن المؤقت</string>
+ <string name="apn">APN المفضل</string>
+ <string name="rtp_min_port">منفذ الحد الأدنى </string>
+ <string name="rtp_max_port">منفذ الحد الأقصى</string>
+ <string name="set_rtp_min_port">تعيين الحد الأدنى للمنفذ</string>
+ <string name="set_rtp_max_port">تعيين الحد الأقصى للمنفذ</string>
+ <string name="set_buffer_size">تعيين حجم المخزن المؤقت</string>
+ <string name="set_apn">حدد APN المفضل</string>
+ <string name="setting">إعدادات</string>
+ <string name="server_timeout_title">"مهلة الخادم"</string>
+ <string name="server_timeout_message">"هل تود إعادة الاتصال بالخادم لتشغيل الفيديو؟"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"فشل الاتصال، جاري محاولة إعادة الاتصال ب%1$d\u2026"</string>
+ <string name="media_controller_live">مباشر</string>
+ <string name="media_controller_playing">قيد التشغيل</string>
+ <string name="media_controller_connecting">جاري الاتصال\u2026</string>
+ <string name="bookmark_add">"إضافة إشارة مرجعية"</string>
+ <string name="bookmark_display">"عرض الإشارات المرجعية"</string>
+ <string name="bookmark_empty">"لا توجد إشارات مرجعية"</string>
+ <string name="bookmark_exist">"هذه الإشارة المرجعية موجودة بالفعل"</string>
+ <string name="bookmark_add_success">"تمت إضافة الإشارة المرجعية"</string>
+ <string name="bookmark_list">"الإشارات المرجعيّة"</string>
+ <string name="bookmark_title">"العنوان"</string>
+ <string name="bookmark_location">"الموقع"</string>
+ <string name="delete_all">"حذف الكل"</string>
+ <string name="default_title">"العنوان الافتراضي"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">مزيد من الصور</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">لا يمكن كتم الصوت : الفيديو غير مدعوم</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">لا يوجد تطبيق خرائط مثبت لإظهار الموقع.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">التقوية</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">تأثير ثلاثي الأبعاد</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">التأثيرات الصوتية</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">قم بتوصيل سماعات الرأس لاستخدام هذه الآثار.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">صوت سناب دراغون+ </string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">عذراً، لا يمكن الاقتطاع من ملف الفيديو هذا</string>
+ <string name="no_permission_for_drm">معذرة، يتعذر مشاركة الملفات المحمية لإدارة الحقوق الرقمية</string>
+ <string name="drm_license_info">معلومات ترخيص إدارة الحقوق الرقمية</string>
+</resources>
diff --git a/res/values-as-rIN/cm_strings.xml b/res/values-as-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-as-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-as-rIN/codeaurora_strings.xml b/res/values-as-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-as-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ast-rES/cm_strings.xml b/res/values-ast-rES/cm_strings.xml
new file mode 100644
index 000000000..9996c8a7a
--- /dev/null
+++ b/res/values-ast-rES/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Hora de grabación</string>
+</resources>
diff --git a/res/values-ast-rES/codeaurora_strings.xml b/res/values-ast-rES/codeaurora_strings.xml
new file mode 100644
index 000000000..93dc0be18
--- /dev/null
+++ b/res/values-ast-rES/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">saltu</string>
+ <string name="step_option_desc">Personalizar el saltu rápidu hacia alantre o hacia atrás</string>
+ <string name="setp_option_three_second">3 segundos</string>
+ <string name="setp_option_six_second">6 segundos</string>
+ <string name="loop">"Bucle"</string>
+ <string name="single">"Simple"</string>
+ <string name="stereo">"Estereu"</string>
+ <string name="speaker_on">Altavoz encesu</string>
+ <string name="speaker_off">Altavoz apagáu</string>
+ <string name="speaker_need_headset">Coneuta unos auriculares pa usar esta carauterística.</string>
+ <string name="single_track">"Una pista"</string>
+ <string name="input_url">"Introducir URL"</string>
+ <string name="streaming_settings">"Axustes de fluxu de datos"</string>
+ <string name="next">"Siguiente"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Tamañu del buffer</string>
+ <string name="apn">APN preferíu</string>
+ <string name="rtp_min_port">Puertu min.</string>
+ <string name="rtp_max_port">Puertu máx.</string>
+ <string name="set_rtp_min_port">Afitar el puertu min.</string>
+ <string name="set_rtp_max_port">Afitar el puertu máx.</string>
+ <string name="set_buffer_size">Afitar el tamañu del buffer</string>
+ <string name="set_apn">Seleicionar APN preferíu</string>
+ <string name="setting">Axustes</string>
+ <string name="server_timeout_title">"Tiempu d'espera del sirvidor"</string>
+ <string name="server_timeout_message">"¿Volver a coneutar al sirvidor pa reproducir el videu?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Falló la conexón. Intentando volver a coneutar con %1$d\u2026"</string>
+ <string name="media_controller_live">En direutu</string>
+ <string name="media_controller_playing">Reproduciendo</string>
+ <string name="media_controller_connecting">Coneutando\u2026</string>
+ <string name="bookmark_add">"Amestar marcador"</string>
+ <string name="bookmark_display">"Amosar marcadores"</string>
+ <string name="bookmark_empty">"Ensin marcadores"</string>
+ <string name="bookmark_exist">"Esti marcador yá esiste"</string>
+ <string name="bookmark_add_success">"Marcador amestáu"</string>
+ <string name="bookmark_list">"Marcadores"</string>
+ <string name="bookmark_title">"Títulu"</string>
+ <string name="bookmark_location">"Llocalización"</string>
+ <string name="delete_all">"Desanicialo too"</string>
+ <string name="default_title">"Títulu por defeutu"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Más imáxenes</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nun pue silenciase: videu non sofitáu</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nun hai nenguna aplicación de mapes instalada p\'amosar la llocalización.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplificación de graves</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efeutu 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efeutos d\'audiu</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Coneuta los auriculares pa estos efectos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">El videu nun pue retayase</string>
+ <string name="no_permission_for_drm">Perdón, los ficheros protexíos con DRM nun puen compartise</string>
+ <string name="drm_license_info">Información de llicencia de DRM</string>
+</resources>
diff --git a/res/values-ast-rES/filtershow_strings.xml b/res/values-ast-rES/filtershow_strings.xml
new file mode 100644
index 000000000..5efde3207
--- /dev/null
+++ b/res/values-ast-rES/filtershow_strings.xml
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <string name="title_activity_filter_show">Editor de semeyes</string>
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <string name="cannot_load_image">Fallu al cargar la imaxe!</string>
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <string name="cannot_edit_original">Nun pue editase l\'orixinal</string>
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <string name="setting_wallpaper">Afitando fondu de pantalla...</string>
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <string name="download_failure">Nun pudo descargase la semeya porque la rede nun ta disponible.</string>
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <string name="original">Orixinal</string>
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <string name="borders" msgid="4461692156695893616">Marcu</string>
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <string name="custom_border">Personalizáu</string>
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_undo">Desfacer</string>
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_redo">Refacer</string>
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <string name="show_imagestate_panel">Amosar efeutos aplicaos</string>
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <string name="hide_imagestate_panel">Anubrir efeutos aplicaos</string>
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <string name="export_image">Esportar</string>
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <string name="print_image">Imprentar</string>
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <string name="export_flattened">Esportar imaxe aplastada</string>
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <string name="select_output_settings">La imaxe esportada va ser una copia y nun va incluyir l\'historial.</string>
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <string name="quality">Calidá</string>
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <string name="size">Tamañu</string>
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <string name="x">x</string>
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <string name="menu_settings">Axustes</string>
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="unsaved">Hai cambeos ensin guardar nesta imaxe.</string>
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="save_before_exit">¿Quies guardar enantes de salir?</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_exit">Guardar y salir</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_processing">Procesando imaxe con resolución completa...</string>
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <string name="exit">Salir</string>
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <string name="history">Historial</string>
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <string name="reset">Restablecer</string>
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <string name="history_original">@string/original</string>
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <string name="imageState">Efeutos aplicaos</string>
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <string name="compare_original">Comparar</string>
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <string name="apply_effect">Aplicar</string>
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <string name="reset_effect">Restablecer</string>
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <string name="aspect">Aspeutu</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect1to1_effect">1:1</string>
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to3_effect">4:3</string>
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <string name="aspect3to4_effect">3:4</string>
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to6_effect">4:6</string>
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect5to7_effect">5:7</string>
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <string name="aspect7to5_effect">7:5</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect9to16_effect">16:9</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <string name="aspectNone_effect">Nengún</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <string name="Fixed">Fixu</string>
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <string name="tinyplanet">Pequeñu planeta</string>
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <string name="exposure" msgid="1229093066434614811">Esposición</string>
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <string name="sharpness">Nitidez</string>
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <string name="contrast">Contraste</string>
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <string name="vibrance">Intensidá</string>
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <string name="saturation">Saturación</string>
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <string name="bwfilter">Filtru b/n</string>
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <string name="wbalance">Color automáticu</string>
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <string name="hue">Tonalidá</string>
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <string name="shadow_recovery">Solombres</string>
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <string name="highlight_recovery">Destacáu</string>
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <string name="curvesRGB">Curvar</string>
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <string name="vignette">Viñeta</string>
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_main">Viñeta</string>
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_exposure">Esposición</string>
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_saturation">Saturación</string>
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_contrast">Contraste</string>
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <string name="vignette_falloff">Atenuación</string>
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <string name="redeye">Güeyos bermeyos</string>
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <string name="imageDraw">Dibuxu</string>
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <string name="straighten" msgid="5217801513491493491">Enderezar</string>
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <string name="crop" msgid="5584000454518174632">Recortar</string>
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <string name="rotate" msgid="460017689320955494">Xirar</string>
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <string name="mirror">Espeyu</string>
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <string name="negative">Negativu</string>
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <string name="none" msgid="3601545724573307541">Nengún</string>
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <string name="edge">Bordes</string>
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <string name="kmeans">Posterizar</string>
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <string name="downsample">Amenorgar calidá</string>
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <string name="grad">Graduada</string>
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_brightness">Brillu</string>
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_contrast">Contraste</string>
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_saturation">Saturación</string>
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_main">Principal</string>
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_red">Bermeyu</string>
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_yellow">Mariellu</string>
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_green">Verde</string>
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_cyan">Cianu</string>
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_blue">Azul</string>
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_magenta">Maxenta</string>
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_style">Estilu</string>
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <string name="editor_grad_new">Nueva</string>
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <string name="curves_channel_rgb">RGB</string>
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_red">Bermeyu</string>
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_green">Verde</string>
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_blue">Azul</string>
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <string name="draw_style">Estilu</string>
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <string name="draw_size">Tamañu</string>
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <string name="draw_hue">Matiz</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_saturation">Saturación</string>
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <string name="draw_value">Brillu</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_color">Color</string>
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_line">Llinies</string>
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_spatter">Rotulador</string>
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_marker">Manches</string>
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <string name="draw_clear">Llimpiar</string>
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <string name="color_border_size">Grosor</string>
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <string name="color_border_corner_size">Tamañu esquina</string>
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <string name="color_border_color">Color</string>
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <string name="color_border_clear">Llimpiar</string>
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <string name="color_pick_select">Escoyer un color personalizáu</string>
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <string name="color_pick_title">Seleicionar color</string>
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <string name="draw_size_title">Seleicionar tamañu</string>
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <string name="draw_size_accept">Aceutar</string>
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_original">Orixinal</string>
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_result">Resultáu</string>
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_label">Guardando imaxe</string>
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_message">Procesando...</string>
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <string name="filtershow_save_preset">Guardar valor predetermináu</string>
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <string name="filtershow_manage_preset">Alministrar predeterminaos</string>
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <string name="filtershow_new_preset">Valor predetermináu nuevu</string>
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <string name="filtershow_preset_name">Nome predetermináu</string>
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_show_info_panel">Información</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_name">Nome de la imaxe</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_size">Tamañu de la imaxe</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_histogram">Histograma</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_exif">Datos de EXIF</string>
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_looks">Predetermináu</string>
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_versions">Versión</string>
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_original">Orixinal</string>
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_current">Actual</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_model">Modelu</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_aperture">Apertura</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_focal_length">Llonxitú focal</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_iso">ISO</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_subject_distance">Distancia del suxetu</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_date">Data de creación</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_f_stop">Númberu f</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_exposure_time">Tiempu d\'esposición</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_copyright">Copyright</string>
+</resources>
diff --git a/res/values-ast-rES/strings.xml b/res/values-ast-rES/strings.xml
new file mode 100644
index 000000000..40ba7d342
--- /dev/null
+++ b/res/values-ast-rES/strings.xml
@@ -0,0 +1,850 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name">Galería</string>
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <string name="gadget_title">Marcu de semeya</string>
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <string name="details_ms">%1$02d:%2$02d</string>
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <string name="details_hms">%1$d:%2$02d:%3$02d</string>
+ <!-- Activity label. This might show up in the activity-picker -->
+ <string name="movie_view_label">Reproductor de videu</string>
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <string name="loading_video">Cargando videu…</string>
+ <string name="loading_image">Cargando imaxe…</string>
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <string name="loading_account">Cargando cuenta...</string>
+ <!-- Movie View Resume Playing dialog title -->
+ <string name="resume_playing_title">Reanudar videu</string>
+ <!-- Movie View Start Playing dialog title -->
+ <string name="resume_playing_message">Reanudar reproducción a partir de %s ?</string>
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <string name="resume_playing_resume">Reanudar reproducción</string>
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <string name="loading">Cargando...</string>
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load">Fallu al cargar</string>
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load_image">Nun pue cargase la imaxe.</string>
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <string name="no_thumbnail">Nun hai miniatures.</string>
+ <!-- Movie View Start Playing button "Beginning" -->
+ <string name="resume_playing_restart">Volver a reproducir</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="crop_save_text">Aceutar</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="ok">Aceutar</string>
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <string name="multiface_crop_help">Toca una cara pa entamar.</string>
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <string name="saving_image">Guardando imaxe...</string>
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <string name="filtershow_saving_image">Guardando imaxe en <xliff:g id="ALBUM_NAME">%1$s</xliff:g> …</string>
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <string name="save_error">Fallu al guardar la imaxe recortada</string>
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <string name="crop_label">Recortar</string>
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <string name="trim_label">Recortar videu</string>
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <string name="select_image">Esbillar semeya</string>
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <string name="select_video">Esbillar videu</string>
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <string name="select_item">Esbillar elementu</string>
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <string name="select_album">Esbillar álbum</string>
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <string name="select_group">Esbillar grupu</string>
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <string name="set_image">Afitar como...</string>
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <string name="set_wallpaper">Afitar fondu de pantalla</string>
+ <!-- Toast/alert after saving wallpaper -->
+ <string name="wallpaper">Afitando fondu de pantalla...</string>
+ <string name="camera_setas_wallpaper">Fondu de pantalla</string>
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <string name="delete">Desaniciar</string>
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <string name="confirm">Confirmar</string>
+ <string name="cancel">Encaboxar</string>
+ <string name="share">Compartir</string>
+ <string name="share_panorama">Compartir panorámica</string>
+ <string name="share_as_photo">Compartir como semeya</string>
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <string name="deleted">Desaniciada</string>
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <string name="undo">DESFACER</string>
+ <!-- String indicating more actions are available -->
+ <string name="select_all">Marcalo too</string>
+ <string name="deselect_all">Desmarcalo too</string>
+ <string name="slideshow">Presentación</string>
+ <string name="details">Detalles</string>
+ <string name="details_title">Elementu: %1$d de %2$d</string>
+ <string name="close">Zarrar</string>
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <string name="switch_to_camera">Cambiar a la cámara</string>
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <string name="show_on_map">Amosar nel mapa</string>
+ <string name="rotate_left">Xirar a la esquierda</string>
+ <string name="rotate_right">Xirar a la derecha</string>
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <string name="no_such_item">Nun pudo alcontrase l\'elementu.</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="edit">Editar</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="simple_edit">Edición simple</string>
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <string name="process_caching_requests">Procesando solicitúes d\'almacenamientu en caché</string>
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <string name="caching_label">Almacenando en caché...</string>
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <string name="crop_action">Recortar</string>
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <string name="trim_action">Recortar</string>
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <string name="mute_action">Silenciar</string>
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <string name="set_as">Afitar como</string>
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <string name="video_mute_err">Nun pue silenciase\'l videu.</string>
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <string name="video_err">Nun pue reproducise\'l videu.</string>
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <string name="group_by_location">Per llocalización</string>
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <string name="group_by_time">Per data</string>
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <string name="group_by_tags">Por etiquetes</string>
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <string name="group_by_faces">Por persones</string>
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <string name="group_by_album">Por álbum</string>
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <string name="group_by_size">Por tamañu</string>
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <string name="untagged">Ensin etiquetes</string>
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <string name="no_location">Ensin llocalización</string>
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <string name="no_connectivity">Nun pudieron identificase dalgunes llocalizaciones por fallos na rede.</string>
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <string name="sync_album_error">Nun pudieron descargase les semeyes del álbum. Inténtalo de nueves más tarde.</string>
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <string name="show_images_only">Namái imáxenes</string>
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <string name="show_videos_only">Namái vídeos</string>
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <string name="show_all">Imáxenes y vídeos</string>
+ <!-- Title of the StackView AppWidget -->
+ <string name="appwidget_title">Galería de semeyes</string>
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <string name="appwidget_empty_text">Nun hai semeyes.</string>
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <string name="crop_saved">La imaxe recortada guardóse en <xliff:g id="FOLDER_NAME">%s</xliff:g>.</string>
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <string name="no_albums_alert">Nun hai álbumes disponibles.</string>
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <string name="empty_album">Nun hai imáxenes nin vídeos disponibles.</string>
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <string name="picasa_posts">Publicaciones</string>
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <string name="make_available_offline">Disponible ensin conexón</string>
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <string name="sync_picasa_albums">Anovar</string>
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <string name="done">Fecho</string>
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <string name="sequence_in_set">Elementu: %1$d de %2$d</string>
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <string name="title">Títulu</string>
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <string name="description">Descripción</string>
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="time">Hora</string>
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <string name="location">Llocalización</string>
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <string name="path">Camín</string>
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <string name="width">Anchor</string>
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <string name="height">Altor</string>
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <string name="orientation">Orientación</string>
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <string name="duration">Duración</string>
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <string name="mimetype">Tipu de MIME</string>
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <string name="file_size">Tamañu del ficheru</string>
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <string name="maker">Creador</string>
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <string name="model">Modelu</string>
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <string name="flash">Flash</string>
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <string name="aperture">Apertura</string>
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <string name="focal_length">Llonxitú focal</string>
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <string name="white_balance">Balance de blancos</string>
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="exposure_time">Tiempu esposición</string>
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <string name="iso">ISO</string>
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <string name="unit_mm">mm</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="manual">Manual</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="auto">Automáticu</string>
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <string name="flash_on">Flash activáu</string>
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <string name="flash_off">Ensin flash</string>
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <string name="unknown">Desconocíu</string>
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <string name="ffx_original">Orixinal</string>
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <string name="ffx_vintage">Vintage</string>
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <string name="ffx_instant">Instantánea</string>
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <string name="ffx_bleach">Decolorar</string>
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <string name="ffx_blue_crush">Azul</string>
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <string name="ffx_bw_contrast">Blancu y prietu</string>
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <string name="ffx_punch">Punch</string>
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <string name="ffx_x_process">Procesamientu X</string>
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <string name="ffx_washout">Latte</string>
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <string name="ffx_washout_color">Litho</string>
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <string name="try_to_set_local_album_available_offline">L\'elementu almacenóse de forma llocal y ta disponible ensin conexón.</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <string name="set_label_all_albums">Tolos álbumes</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <string name="set_label_local_albums">Álbumes llocales</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <string name="set_label_mtp_devices">Preseos MTP</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <string name="set_label_picasa_albums">Álbumes de Picasa</string>
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="free_space_format"><xliff:g id="BYTES">%s</xliff:g> llibres</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_below"><xliff:g id="SIZE">%1$s</xliff:g> o inferior</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_above"><xliff:g id="SIZE">%1$s</xliff:g> o superior</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_between">De <xliff:g id="MIN_SIZE">%1$s</xliff:g> a <xliff:g id="MAX_SIZE">%2$s</xliff:g></string>
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <string name="Import">Importar</string>
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <string name="import_complete">Importación completada</string>
+ <string name="import_fail">Fallu al importar</string>
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <string name="camera_connected">Cámara coneutada</string>
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <string name="camera_disconnected">Cámara desconeutada</string>
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <string name="click_import">Toca equí pa facer la importación.</string>
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <string name="widget_type_album">Esbillar un álbum</string>
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <string name="widget_type_shuffle">Amosar imáxenes al debalu</string>
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <string name="widget_type_photo">Esbillar una imaxe</string>
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <string name="widget_type">Esbillar imáxenes</string>
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <string name="slideshow_dream_name">Presentación</string>
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="albums">Álbumes</string>
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="times">Data</string>
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="locations">Llocalizaciones</string>
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="people">Persones</string>
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="tags">Etiquetes</string>
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <string name="group_by">Agrupar por</string>
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <string name="settings">Axustes</string>
+ <!-- The title of menu item where user can add a new account -->
+ <string name="add_account">Amestar cuenta</string>
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <string name="folder_camera">Cámara</string>
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <string name="folder_download">Descargaes</string>
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <string name="folder_edited_online_photos">Semeyes online editaes</string>
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <string name="folder_imported">Importaes</string>
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <string name="folder_screenshot">Captures de pantalla</string>
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <string name="help">Ayuda</string>
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <string name="no_external_storage_title">Ensin almacenamientu</string>
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <string name="no_external_storage">Nun hai almacenamientu esternu disponible.</string>
+ <!-- Label for album filmstrip button -->
+ <string name="switch_photo_filmstrip">Vista de tira de película</string>
+ <!-- Label for album grid button -->
+ <string name="switch_photo_grid">Vista de cuadrícula</string>
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <string name="switch_photo_fullscreen">Pantalla completa</string>
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <string name="trimming">Recortando...</string>
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <string name="muting">Silenciando...</string>
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <string name="please_wait">Espera...</string>
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <string name="save_into">Guardando videu en <xliff:g id="ALBUM_NAME">%1$s</xliff:g>…</string>
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <string name="trim_too_short">Nun se pue recortar: el videu de destín ye enforma curtiu.</string>
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <string name="pano_progress_text">Creando panorámica...</string>
+ <!-- The label on the button that will save an edited image -->
+ <string name="save" msgid="8140440041190264400">Guardar</string>
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <string name="ingest_scanning" msgid="2048262851775139720">Analizando conteníu...</string>
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <string name="ingest_sorting" msgid="624687230903648118">Ordenando...</string>
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <string name="ingest_scanning_done">Análisis completu</string>
+ <!-- Status message shown when content from an external camera is being imported -->
+ <string name="ingest_importing">Importando...</string>
+ <!-- Status message shown when there is no content available to be imported -->
+ <string name="ingest_empty_device">Nun hai conteníu disponible pa importar nesti preséu.</string>
+ <!-- Status message shown when there is no MTP device connected -->
+ <string name="ingest_no_device">Nun hai preseos MTP coneutaos</string>
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <string name="camera_error_title">Fallu de cámara</string>
+ <!-- message for the dialog showing the error of camera hardware -->
+ <string name="cannot_connect_camera">Nun pue accedese a la cámara.</string>
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <string name="camera_disabled">Inhabilitóse la cámara por polítiques de seguridá.</string>
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <string name="camera_label">Cámara</string>
+ <!-- alert to the user to wait for some operation to complete -->
+ <string name="wait">Por favor, espera...</string>
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <string name="no_storage" product="nosdcard">Pa poder usar la cámara, activa l\'almacenamientu USB.</string>
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <string name="no_storage" product="default">Pa poder usar la cámara, inxerta una tarxeta SD.</string>
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <string name="preparing_sd" product="nosdcard">Tresnando almacenamientu USB…</string>
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <string name="preparing_sd" product="default">Tresnando tarxeta SD…</string>
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <string name="access_sd_fail" product="nosdcard">Nun pudo accedese al almacenamientu USB.</string>
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <string name="access_sd_fail" product="default">Nun pudo accedese a la tarxeta SD.</string>
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <string name="review_cancel">ENCABOXAR</string>
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <string name="review_ok">FECHO</string>
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <string name="time_lapse_title">Grabación a intervalos de tiempu</string>
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <string name="pref_camera_id_title">Seleicionar cámara</string>
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_back">Trasera</string>
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_front">Delantera</string>
+ <!-- Settings screen, setting title text -->
+ <string name="pref_camera_recordlocation_title">Amestar llocalización</string>
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <string name="pref_camera_location_label">LLOCALIZACIÓN</string>
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_title">Temporizador de cuenta atrás</string>
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_sound_default">@string/setting_on_value</string>
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <string name="pref_camera_timer_sound_title">Usar pitíu</string>
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <string name="setting_off">Desactiváu</string>
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <string name="setting_on">Activáu</string>
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <string name="pref_video_quality_title">Calidá de videu</string>
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_high">Alta</string>
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_low">Baxa</string>
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <string name="pref_video_time_lapse_frame_interval_title">Intervalu de tiempu</string>
+ <!-- Settings screen, Camera setting category title -->
+ <string name="pref_camera_settings_category">Axustes de la cámara</string>
+ <!-- Settings screen, Camcorder setting category title -->
+ <string name="pref_camcorder_settings_category">Configuración de videocámara</string>
+ <!-- Settings screen, Picture size title -->
+ <string name="pref_camera_picturesize_title">Tamañu imaxe</string>
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_13mp">13 MP</string>
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_8mp">8 MP</string>
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_5mp">5 MP</string>
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_4mp">4 MP</string>
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_3mp">3 MP</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp">2 MP</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp_wide">2 MP (16:9)</string>
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1_3mp">1,3 MP</string>
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1mp">1 MP</string>
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_vga">VGA</string>
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_qvga">QVGA</string>
+ <!-- Settings screen, Focus mode title -->
+ <string name="pref_camera_focusmode_title">Mou d\'enfoque</string>
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <string name="pref_camera_focusmode_entry_auto">Auto</string>
+ <string name="pref_camera_focusmode_entry_infinity">Infinitu</string>
+ <string name="pref_camera_focusmode_entry_macro">Macro</string>
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_focusmode_label_auto">AUTOMÁTICU</string>
+ <string name="pref_camera_focusmode_label_infinity">INFINITU</string>
+ <string name="pref_camera_focusmode_label_macro">MACRO</string>
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <string name="pref_camera_flashmode_title">Flash</string>
+ <!-- flash label [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label">MOU FLASH</string>
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <string name="pref_camera_flashmode_entry_auto">Automáticu</string>
+ <string name="pref_camera_flashmode_entry_on">Activáu</string>
+ <string name="pref_camera_flashmode_entry_off">Desactiváu</string>
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label_auto">FLASH AUTOMÁTICU</string>
+ <string name="pref_camera_flashmode_label_on">FLASH ACTIVÁU</string>
+ <string name="pref_camera_flashmode_label_off">FLASH DESACTIVÁU</string>
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <string name="pref_camera_whitebalance_title">Balance de blancos</string>
+ <!-- Menu, white balance label -->
+ <string name="pref_camera_whitebalance_label">BALANCE DE BLANCOS</string>
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <string name="pref_camera_whitebalance_entry_auto">Automáticu</string>
+ <string name="pref_camera_whitebalance_entry_incandescent">Incandescente</string>
+ <string name="pref_camera_whitebalance_entry_daylight">Lluz natural</string>
+ <string name="pref_camera_whitebalance_entry_fluorescent">Fluorescente</string>
+ <string name="pref_camera_whitebalance_entry_cloudy">Ñuble</string>
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_whitebalance_label_auto">AUTOMÁTICU</string>
+ <string name="pref_camera_whitebalance_label_incandescent">INCANDESCENTE</string>
+ <string name="pref_camera_whitebalance_label_daylight">LLUZ NATURAL</string>
+ <string name="pref_camera_whitebalance_label_fluorescent">FLUORESCENTE</string>
+ <string name="pref_camera_whitebalance_label_cloudy">ÑUBLE</string>
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <string name="pref_camera_scenemode_title">Mou d\'escena</string>
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_auto">Automáticu</string>
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_hdr">HDR</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_action">Aición</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_night">Nocherniegu</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_sunset">Atapecer</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_party">Folixa</string>
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_auto">NENGÚN</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_action">AICIÓN</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_night">NUECHE</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_sunset">ATAPECER</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_party">FOLIXA</string>
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label">TEMPORIZADOR DE CUENTA ATRÁS</string>
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_off">TEMPORIZADOR DESACTIVÁU</string>
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_one">1 SEGUNDU</string>
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_three">3 SEGUNDOS</string>
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_ten">10 SEGUNDOS</string>
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_fifteen">15 SEGUNDOS</string>
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <string name="not_selectable_in_scene_mode">Nun pue seleicionase nel mou d\'escena.</string>
+ <!-- Exposure settings in preference -->
+ <string name="pref_exposure_title">Esposición</string>
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <string name="pref_exposure_label">ESPOSICIÓN</string>
+ <!-- Default HDR entry value -->
+ <string name="pref_camera_hdr_default">@string/setting_off_value</string>
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <string name="pref_camera_hdr_label">HDR</string>
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_back">CÁMARA FRONTAL</string>
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_front">CÁMARA TRASERA</string>
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <string name="dialog_ok">Aceutar</string>
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <string name="spaceIsLow_content" product="nosdcard">Nun hai espaciu nel almacenamientu USB. Cambia la configuración de calidá o desanicia dalgunes imáxenes o otros ficheros.</string>
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <string name="spaceIsLow_content" product="default">Nun hai espaciu na tarxeta SD. Cambia la configuración de calidá o desanicia dalgunes imáxenes o otros ficheros.</string>
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <string name="video_reach_size_limit">Algamóse la llende de tamañu.</string>
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <string name="pano_too_fast_prompt">Mui rápidu</string>
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <string name="pano_dialog_prepare_preview">Preparando mou panorámicu</string>
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <string name="pano_dialog_panorama_failed">Fallu al guardar imaxe panorámica</string>
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <string name="pano_dialog_title">Panorámicu</string>
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <string name="pano_capture_indication">Capturando panorámica</string>
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <string name="pano_dialog_waiting_previous">Esperando semeya panorámica anterior...</string>
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <string name="pano_review_saving_indication_str">Guardando...</string>
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <string name="pano_review_rendering">Creando panorámica...</string>
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <string name="tap_to_focus">Toca pa enfocar</string>
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <string name="pref_video_effect_title">Efeutos</string>
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <string name="effect_none">Nengún</string>
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_squeeze">Comprimir</string>
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_eyes">Güeyos grandes</string>
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_mouth">Boca grande</string>
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_mouth">Boca pequeña</string>
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_nose">Nariz grande</string>
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_eyes">Güeyos pequeños</string>
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_space">Nel espaciu</string>
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_sunset">Atapecer</string>
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_gallery">El to videu</string>
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <string name="bg_replacement_message">Desactiva\'l preséu.\nDexa d\'usalu unos minutos.</string>
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <string name="video_snapshot_hint">Toca pa facer una semeya mientres grabes un videu.</string>
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <string name="video_recording_started">Anicióse la grabación de videu.</string>
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <string name="video_recording_stopped">La grabación de videu detúvose.</string>
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <string name="disable_video_snapshot_hint">La instantánea de videu inhabilítase al activar efeutos especiales.</string>
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <string name="clear_effects">Quitar efeutos</string>
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <string name="effect_silly_faces">CARES GRACIOSES</string>
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <string name="effect_background">FONDU</string>
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_shutter_button">Botón del obturador</string>
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_menu_button">Botón de menú</string>
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_thumbnail">Semeya más recién</string>
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_camera_picker">Opción de cámara trasera y delantera</string>
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_mode_picker">Cámara, videu o mou panorámicu</string>
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_second_level_indicators">Más controles de configuración</string>
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_back_to_first_level">Zarrar controles de configuración</string>
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_zoom_control">Control de zoom</string>
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_decrement">Amenorgar %1$s</string>
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_increment">Aumentar %1$s</string>
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_check_box">Caxellu de verificación %1$s</string>
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_camera">Cambiar a la cámara</string>
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_video">Cambiar a videu</string>
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_panorama">Cambiar a mou panorámicu</string>
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_new_panorama">Cambiar a nueva panorámica</string>
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_refocus">Cambiar a reenfoque</string>
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_cancel">Encaboxar</string>
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_ok">Fecho</string>
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_retake">Revisar repetición</string>
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_play_video">Ver un videu</string>
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_pause_video">Posar videu</string>
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_reload_video">Volver a cargar videu</string>
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_time_bar">Barra de tiempu del reproductor de videu</string>
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_on">SÍ</string>
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_off">NON</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_off">Desactiváu</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_500">0,5 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1000">1 segundu</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1500">1,5 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2000">2 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2500">2,5 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3000">3 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_4000">4 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5000">5 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_6000">6 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10000">10 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_12000">12 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_15000">15 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_24000">24 segundos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_30000">0,5 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_60000">1 minutu</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_90000">1,5 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_120000">2 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_150000">2,5 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_180000">3 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_240000">4 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_300000">5 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_360000">6 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_600000">10 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_720000">12 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_900000">15 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1440000">24 minutos</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1800000">0,5 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3600000">1 hora</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5400000">1,5 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_7200000">2 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_9000000">2,5 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10800000">3 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_14400000">4 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_18000000">5 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_21600000">6 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_36000000">10 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_43200000">12 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_54000000">15 hores</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_86400000">24 hores</string>
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_seconds">segundos</string>
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_minutes">minutos</string>
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_hours">hores</string>
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_interval_set">Fecho</string>
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <string name="set_time_interval">Afita intervalu de tiempu</string>
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_time_interval_help">L\'intervalu de tiempu ta desactiváu. Activa esta función p\'afitar un intervalu.</string>
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_timer_help">El temporizador de cuenta atrás ta desactiváu. Activa esta opción pa ver la cuenta atrás enantes de facer una semeya.</string>
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <string name="set_duration">Definir duración en segundos</string>
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <string name="count_down_title_text">Cuenta atrás pa facer una semeya</string>
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <string name="remember_location_title">¿Recordar llocalizaciones de les semeyes?</string>
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <string name="remember_location_prompt">Etiqueta les tos semeyes y vídeos coles llocalizaciones au se fexeron.\n\nOtres aplicaciones puen acceder a esta información, asina como a les imáxenes guardaes.</string>
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_no">Non, gracies</string>
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_yes">Sí</string>
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <string name="menu_camera">Cámara</string>
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <string name="menu_search">Guetar</string>
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <string name="tab_photos">Semeyes</string>
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <string name="tab_albums">Álbumes</string>
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <string name="camera_menu_more_label">MÁS OPCIONES</string>
+ <!-- settings label [CHAR LIMIT=50] -->
+ <string name="camera_menu_settings_label">AXUSTES</string>
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-az-rAZ/cm_strings.xml b/res/values-az-rAZ/cm_strings.xml
new file mode 100644
index 000000000..4cd31b1e2
--- /dev/null
+++ b/res/values-az-rAZ/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Səsyazma vaxtı</string>
+</resources>
diff --git a/res/values-az-rAZ/codeaurora_strings.xml b/res/values-az-rAZ/codeaurora_strings.xml
new file mode 100644
index 000000000..32ec922ac
--- /dev/null
+++ b/res/values-az-rAZ/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Addım</string>
+ <string name="step_option_desc">Sürətli irəli/geri çəkmə aralıqlarını özəlləşdir</string>
+ <string name="setp_option_three_second">3 saniyə</string>
+ <string name="setp_option_six_second">6 saniyə</string>
+ <string name="loop">"Dövr"</string>
+ <string name="single">"Tək"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Səsucaldan AÇIQ</string>
+ <string name="speaker_off">Səsucaldan QAPALI</string>
+ <string name="speaker_need_headset">Bu özəllikdən istifadə etmək üçün qulaqlıq taxın.</string>
+ <string name="single_track">"Tək parça"</string>
+ <string name="input_url">"URL daxil edin"</string>
+ <string name="streaming_settings">"Axın tənzimləmələri"</string>
+ <string name="next">"Sonrakı"</string>
+ <string name="previous">"Əvvəlki"</string>
+ <string name="buffer_size">Bufer ölçüsü</string>
+ <string name="apn">Üstünlük verilən APN</string>
+ <string name="rtp_min_port">Min. bağlantı nöqtəsi</string>
+ <string name="rtp_max_port">Maks. bağlantı nöqtəsi</string>
+ <string name="set_rtp_min_port">Min bağlantı nöqtəsini tənzimlə</string>
+ <string name="set_rtp_max_port">Max bağlantı nöqtəsini tənzimlə</string>
+ <string name="set_buffer_size">Bufer ölçüsünü tənzimlə</string>
+ <string name="set_apn">Üstünlük verilən APN\'i seçin</string>
+ <string name="setting">Tənzimləmələr</string>
+ <string name="server_timeout_title">"Serverə qoyulan vaxt"</string>
+ <string name="server_timeout_message">"Videonu oynatmaq üçün serverə yenidən bağlansın?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Bağlanma xətası, %1$d üçün yenidən bağlantı yaradılır\u2026"</string>
+ <string name="media_controller_live">Canlı</string>
+ <string name="media_controller_playing">Oynadılır</string>
+ <string name="media_controller_connecting">Bağlanır\u2026</string>
+ <string name="bookmark_add">"Əlfəcin əlavə et"</string>
+ <string name="bookmark_display">"Əlfəcinləri göstər"</string>
+ <string name="bookmark_empty">"Əlfəcin yoxdur"</string>
+ <string name="bookmark_exist">"Əlfəcin artıq mövcuddur"</string>
+ <string name="bookmark_add_success">"Əlfəcin əlavə edildi"</string>
+ <string name="bookmark_list">"Əlfəcinlər"</string>
+ <string name="bookmark_title">"Başlıq"</string>
+ <string name="bookmark_location">"Yer"</string>
+ <string name="delete_all">"Hamısını sil"</string>
+ <string name="default_title">"Standart başlıq"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Daha çox təsvir</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Səsi kəsilə bilmir : video dəstəklənmir</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Yeri göstərmək üçün quraşdırılmış xəritə tətbiqetməsi yoxdur.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bas yüksəldici</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D effekti</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Səs effekti</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Bu effektlər üçün qulaqcıq taxın.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Bağışlayın, bu video fayl kəsilə bilməz</string>
+ <string name="no_permission_for_drm">Bağışlayın, DRM qorumalı fayllar paylaşıla bilməz</string>
+ <string name="drm_license_info">DRM lisenziya məlumatı</string>
+</resources>
diff --git a/res/values-be/cm_strings.xml b/res/values-be/cm_strings.xml
new file mode 100644
index 000000000..21cc7435c
--- /dev/null
+++ b/res/values-be/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Час запісу</string>
+</resources>
diff --git a/res/values-be/codeaurora_strings.xml b/res/values-be/codeaurora_strings.xml
new file mode 100644
index 000000000..8d6497a0a
--- /dev/null
+++ b/res/values-be/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Крок перамоткі</string>
+ <string name="step_option_desc">Налада інтэрвалу для хуткага прагляду наперад ці назад</string>
+ <string name="setp_option_three_second">3 секунды</string>
+ <string name="setp_option_six_second">6 секундаў</string>
+ <string name="loop">"Паўтор"</string>
+ <string name="single">"Аднаразова"</string>
+ <string name="stereo">"Стэрэа"</string>
+ <string name="speaker_on">УКЛ. дынамік</string>
+ <string name="speaker_off">ВЫКЛ. дынамік</string>
+ <string name="speaker_need_headset">Далучыце вушоўкі для выкарыстання гэтай функцыі.</string>
+ <string name="single_track">"Адна дарожка"</string>
+ <string name="input_url">"Увядзіце URL"</string>
+ <string name="streaming_settings">"\"Струменевая перадача"</string>
+ <string name="next">"Наступны трэк"</string>
+ <string name="previous">"Папярэдні трэк"</string>
+ <string name="buffer_size">Памер буфера</string>
+ <string name="apn">Кропка доступу па змаўчанні</string>
+ <string name="rtp_min_port">Мінімальны порт</string>
+ <string name="rtp_max_port">Максімальны порт</string>
+ <string name="set_rtp_min_port">Усталёўка мінімальнага нумара порта</string>
+ <string name="set_rtp_max_port">Усталёўка максімальнага нумара порта</string>
+ <string name="set_buffer_size">Усталёўка памеру буфера перадачы</string>
+ <string name="set_apn">Пераважная кропка доступу</string>
+ <string name="setting">Налады</string>
+ <string name="server_timeout_title">"Тайм-аўт сервера"</string>
+ <string name="server_timeout_message">"Перападключыцца да сервера для прайгравання відэафайла?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Збой сувязі. Паўторнае падлучэнне да %1$d\u2026"</string>
+ <string name="media_controller_live">Просты эфір</string>
+ <string name="media_controller_playing">Прайграванне</string>
+ <string name="media_controller_connecting">Падлучэнне\u2026</string>
+ <string name="bookmark_add">"Дадаць закладку"</string>
+ <string name="bookmark_display">"Паказаць закладкі"</string>
+ <string name="bookmark_empty">"Няма закладак"</string>
+ <string name="bookmark_exist">"Закладка ўжо існуе"</string>
+ <string name="bookmark_add_success">"Закладка дададзена"</string>
+ <string name="bookmark_list">"Закладкі"</string>
+ <string name="bookmark_title">"Назва"</string>
+ <string name="bookmark_location">"Месцазнаходжанне"</string>
+ <string name="delete_all">"Выдаліць усё"</string>
+ <string name="default_title">"Загаловак па змаўчанні"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Іншыя выявы</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Немагчыма адключыць гук: відэафайл не падтрымваецца</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Дадатак для працы з картамі не ўсталяваны. Паказ месцазнаходжання немагчымы.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Узмацненне басоў</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-эфект</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Аўдыя эфекты</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Падлучыце навушнікі для гэтых эфектаў.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Дадзены відэафайл не можа быць абрэзаны</string>
+ <string name="no_permission_for_drm">Адпраўка абароненых DRM файлаў немагчымая</string>
+ <string name="drm_license_info">Звесткі пра ліцэнзію DRM</string>
+</resources>
diff --git a/res/values-be/filtershow_strings.xml b/res/values-be/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-be/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-be/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-bg/cm_strings.xml b/res/values-bg/cm_strings.xml
new file mode 100644
index 000000000..f80d59223
--- /dev/null
+++ b/res/values-bg/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Време на запис</string>
+</resources>
diff --git a/res/values-bg/codeaurora_strings.xml b/res/values-bg/codeaurora_strings.xml
new file mode 100644
index 000000000..6193d036f
--- /dev/null
+++ b/res/values-bg/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Стъпка</string>
+ <string name="step_option_desc">Бърза настройка стъпка напред или назад</string>
+ <string name="setp_option_three_second">3 секунди</string>
+ <string name="setp_option_six_second">6 секунди</string>
+ <string name="loop">"Контур"</string>
+ <string name="single">"Единично"</string>
+ <string name="stereo">"Стерео"</string>
+ <string name="speaker_on">Високоговорител включен</string>
+ <string name="speaker_off">Високоговорител изключен</string>
+ <string name="speaker_need_headset">Включете слушалките, за да използвате тази функция.</string>
+ <string name="single_track">"Една песен"</string>
+ <string name="input_url">"Въведете URL адрес"</string>
+ <string name="streaming_settings">"Поточни настройки"</string>
+ <string name="next">"Следваща"</string>
+ <string name="previous">"Предишна"</string>
+ <string name="buffer_size">Размер на буфера</string>
+ <string name="apn">Предпочитан APN</string>
+ <string name="rtp_min_port">Минимален порт</string>
+ <string name="rtp_max_port">Максимален порт</string>
+ <string name="set_rtp_min_port">Задаване минимален порт</string>
+ <string name="set_rtp_max_port">Задаване максимален порт</string>
+ <string name="set_buffer_size">Задаване размер на буфера</string>
+ <string name="set_apn">Изберете предпочитана точка за достъп</string>
+ <string name="setting">Настройки</string>
+ <string name="server_timeout_title">"Време за изчакване на сървъра"</string>
+ <string name="server_timeout_message">"Да се свържа ли повторно със сървъра, за да изпълни видеото?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Неуспешна връзка, опитайте да се свържете с %1$d\u2026"</string>
+ <string name="media_controller_live">На живо</string>
+ <string name="media_controller_playing">Възпроизвеждане на</string>
+ <string name="media_controller_connecting">Свързване\u2026</string>
+ <string name="bookmark_add">"Добавяне на показалец"</string>
+ <string name="bookmark_display">"Показване на показалци"</string>
+ <string name="bookmark_empty">"Няма показалци"</string>
+ <string name="bookmark_exist">"Вече съществува показалец"</string>
+ <string name="bookmark_add_success">"Показалеца е добавен"</string>
+ <string name="bookmark_list">"Показалец"</string>
+ <string name="bookmark_title">"Заглавие"</string>
+ <string name="bookmark_location">"Местоположение"</string>
+ <string name="delete_all">"Изтрий всички"</string>
+ <string name="default_title">"Заглавие по подразбиране"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Още снимки</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Не може да изключите звука: видеото не се поддържа</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Няма инсталирано приложение което да покаже местоположението.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Усилване на баса</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D ефект</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Аудио ефекти</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Включете слушалки за тези ефекти.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Аудио +</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">За съжаление, този видео файл не може да бъде орязан</string>
+ <string name="no_permission_for_drm">За съжаление DRM защитените файлове не могат да бъдат споделени</string>
+ <string name="drm_license_info">DRM лицензна информация</string>
+</resources>
diff --git a/res/values-bn-rBD/cm_strings.xml b/res/values-bn-rBD/cm_strings.xml
new file mode 100644
index 000000000..df86aa1d7
--- /dev/null
+++ b/res/values-bn-rBD/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">রেকর্ডের সময়</string>
+</resources>
diff --git a/res/values-bn-rBD/codeaurora_strings.xml b/res/values-bn-rBD/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-bn-rBD/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-br-rFR/cm_strings.xml b/res/values-br-rFR/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-br-rFR/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-br-rFR/codeaurora_strings.xml b/res/values-br-rFR/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-br-rFR/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-br-rFR/filtershow_strings.xml b/res/values-br-rFR/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-br-rFR/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-br-rFR/strings.xml b/res/values-br-rFR/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-br-rFR/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ca/cm_strings.xml b/res/values-ca/cm_strings.xml
new file mode 100644
index 000000000..2971b7c75
--- /dev/null
+++ b/res/values-ca/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Temps de gravació</string>
+</resources>
diff --git a/res/values-ca/codeaurora_strings.xml b/res/values-ca/codeaurora_strings.xml
new file mode 100644
index 000000000..0372113be
--- /dev/null
+++ b/res/values-ca/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Pas</string>
+ <string name="step_option_desc">Personalitza el salt ràpid endavant/rebobina ràpid</string>
+ <string name="setp_option_three_second">3 segons</string>
+ <string name="setp_option_six_second">6 segons</string>
+ <string name="loop">"Bucle"</string>
+ <string name="single">"Individual"</string>
+ <string name="stereo">"Estèreo"</string>
+ <string name="speaker_on">Altaveu Activat</string>
+ <string name="speaker_off">Altaveu Desactivat</string>
+ <string name="speaker_need_headset">Endolla els auriculars per utilitzar aquesta característica.</string>
+ <string name="single_track">"Una pista"</string>
+ <string name="input_url">"Introdueix URL"</string>
+ <string name="streaming_settings">"Ajustaments del flux de dades"</string>
+ <string name="next">"Següent"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Mida del buffer</string>
+ <string name="apn">APN preferida</string>
+ <string name="rtp_min_port">Port min</string>
+ <string name="rtp_max_port">Port max</string>
+ <string name="set_rtp_min_port">Estableix el port min</string>
+ <string name="set_rtp_max_port">Estableix el port max</string>
+ <string name="set_buffer_size">Estableix la mida del buffer</string>
+ <string name="set_apn">Selecciona l\'APN preferida</string>
+ <string name="setting">Ajustaments</string>
+ <string name="server_timeout_title">"Temps d'espera del servidor"</string>
+ <string name="server_timeout_message">"vols tornar a connectar amb el servidor per reproduir el vídeo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"La connexió ha fallat, intentant tornar a connectar a %1$d\u2026"</string>
+ <string name="media_controller_live">En directe</string>
+ <string name="media_controller_playing">S\'està reproduïnt</string>
+ <string name="media_controller_connecting">S\'està connectant\u2026</string>
+ <string name="bookmark_add">"Afegeix un marcador"</string>
+ <string name="bookmark_display">"Mostra els marcadors"</string>
+ <string name="bookmark_empty">"Sense marcadors"</string>
+ <string name="bookmark_exist">"El marcador ja existeix"</string>
+ <string name="bookmark_add_success">"S'ha afegit un marcador"</string>
+ <string name="bookmark_list">"Marcadors"</string>
+ <string name="bookmark_title">"Títol"</string>
+ <string name="bookmark_location">"Ubicació"</string>
+ <string name="delete_all">"Esborrar-ho tot"</string>
+ <string name="default_title">"Títol predefinit"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Més imatges</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">No s\'ha pogut silenciar: vídeo no suportat</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">No hi ha cap aplicació de mapes instal·lada per mostrar la ubicació.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplificació de greus</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efecte 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efectes de so</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Endolla els auriculars per aquests efectes.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">So Snapdragon+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Ho sento, aquest fitxer de vídeo no es pot retallar</string>
+ <string name="no_permission_for_drm">Ho sento, no es poden compartir arxius DRM protegits</string>
+ <string name="drm_license_info">Informació de llicència DRM</string>
+</resources>
diff --git a/res/values-cs/cm_strings.xml b/res/values-cs/cm_strings.xml
new file mode 100644
index 000000000..f7742e36a
--- /dev/null
+++ b/res/values-cs/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Čas nahrávky</string>
+</resources>
diff --git a/res/values-cs/codeaurora_strings.xml b/res/values-cs/codeaurora_strings.xml
new file mode 100644
index 000000000..6582553db
--- /dev/null
+++ b/res/values-cs/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Krok</string>
+ <string name="step_option_desc">Přizpůsobit krok vpřed/vzad</string>
+ <string name="setp_option_three_second">3 sekundy</string>
+ <string name="setp_option_six_second">6 sekund</string>
+ <string name="loop">"Opakování"</string>
+ <string name="single">"Jednou"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Reproduktor zapnut</string>
+ <string name="speaker_off">Reproduktor vypnut</string>
+ <string name="speaker_need_headset">Pro využití této funkce připojte sluchátka.</string>
+ <string name="single_track">"Jedna stopa"</string>
+ <string name="input_url">"Zadejte URL"</string>
+ <string name="streaming_settings">"Nastavení pro datové toky"</string>
+ <string name="next">"Další"</string>
+ <string name="previous">"Předchozí"</string>
+ <string name="buffer_size">Velikost vyrovnávací paměti</string>
+ <string name="apn">Upřednostňované APN</string>
+ <string name="rtp_min_port">Min. č. portu</string>
+ <string name="rtp_max_port">Max. č. portu</string>
+ <string name="set_rtp_min_port">Nastavit min. č. portu</string>
+ <string name="set_rtp_max_port">Nastavit max. č. portu</string>
+ <string name="set_buffer_size">Nastavit velikost vyrovnávací paměťi</string>
+ <string name="set_apn">Vyberte upřednostňovaný APN</string>
+ <string name="setting">Nastavení</string>
+ <string name="server_timeout_title">"Časový limit serveru"</string>
+ <string name="server_timeout_message">"Znovu připojit k serveru a spustit video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Připojení se nezdařilo, pokus o obnovení spojení k „%1$d“\u2026"</string>
+ <string name="media_controller_live">Živě</string>
+ <string name="media_controller_playing">Přehrávání</string>
+ <string name="media_controller_connecting">Připojování\u2026</string>
+ <string name="bookmark_add">"Přidat záložku"</string>
+ <string name="bookmark_display">"Zobrazit záložky"</string>
+ <string name="bookmark_empty">"Žádné záložky"</string>
+ <string name="bookmark_exist">"Záložka již existuje"</string>
+ <string name="bookmark_add_success">"Založka přidána"</string>
+ <string name="bookmark_list">"Záložky"</string>
+ <string name="bookmark_title">"Název"</string>
+ <string name="bookmark_location">"Poloha"</string>
+ <string name="delete_all">"Odstranit vše"</string>
+ <string name="default_title">"Výchozí název"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Další obrázky</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nelze ztlumit: video není podporované</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Není nainstalována žádná mapová aplikace pro zobrazení polohy.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Zvýraznění basů</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Zvukové efekty</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Při připojení sluchátek použít tyto efekty.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Toto video nelze oříznout</string>
+ <string name="no_permission_for_drm">Omlouváme se, soubory chráněné DRM nelze sdílet</string>
+ <string name="drm_license_info">Informace o licenci DRM</string>
+</resources>
diff --git a/res/values-cy/cm_strings.xml b/res/values-cy/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-cy/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-cy/codeaurora_strings.xml b/res/values-cy/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-cy/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-cy/filtershow_strings.xml b/res/values-cy/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-cy/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-cy/strings.xml b/res/values-cy/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-cy/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-da/cm_strings.xml b/res/values-da/cm_strings.xml
new file mode 100644
index 000000000..df00327d7
--- /dev/null
+++ b/res/values-da/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Optagelsestidspunkt</string>
+</resources>
diff --git a/res/values-da/codeaurora_strings.xml b/res/values-da/codeaurora_strings.xml
new file mode 100644
index 000000000..b54b51693
--- /dev/null
+++ b/res/values-da/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Trin</string>
+ <string name="step_option_desc">Tilpas trin for hurtig frem- og tilbagespoling</string>
+ <string name="setp_option_three_second">3 sekunder</string>
+ <string name="setp_option_six_second">6 sekunder</string>
+ <string name="loop">"Gentagelse"</string>
+ <string name="single">"Enkel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Højttaler TIL</string>
+ <string name="speaker_off">Højttaler FRA</string>
+ <string name="speaker_need_headset">Tilslut hovedtelefonerne for at bruge denne funktion.</string>
+ <string name="single_track">"Enkelt spor"</string>
+ <string name="input_url">"Angiv URL"</string>
+ <string name="streaming_settings">"Streaming-indstillinger"</string>
+ <string name="next">"Næste"</string>
+ <string name="previous">"Forrige"</string>
+ <string name="buffer_size">Bufferstørrelse</string>
+ <string name="apn">Foretrukne APN</string>
+ <string name="rtp_min_port">Min. port</string>
+ <string name="rtp_max_port">Maks. port</string>
+ <string name="set_rtp_min_port">Angiv min. port</string>
+ <string name="set_rtp_max_port">Angiv maks. port</string>
+ <string name="set_buffer_size">Angiv Bufferstørrelse</string>
+ <string name="set_apn">Vælg foretrukne APN</string>
+ <string name="setting">Indstillinger</string>
+ <string name="server_timeout_title">"Servertimeout"</string>
+ <string name="server_timeout_message">"Genopret forbindelsen til serveren for at afspille videoen?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Tilslutning mislykkedes, forsøger at genoprette forbindelsen til %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Afspiller</string>
+ <string name="media_controller_connecting">Forbinder\u2026</string>
+ <string name="bookmark_add">"Tilføj bogmærke"</string>
+ <string name="bookmark_display">"Vis bogmærker"</string>
+ <string name="bookmark_empty">"Ingen bogmærker"</string>
+ <string name="bookmark_exist">"Bogmærket findes allerede"</string>
+ <string name="bookmark_add_success">"Bogmærke tilføjet"</string>
+ <string name="bookmark_list">"Bogmærker"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Lokation"</string>
+ <string name="delete_all">"Slet alt"</string>
+ <string name="default_title">"Standardtitel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Flere billeder</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kan ikke slå lyden fra : video understøttes ikke</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Der er ikke installeret en kort-app til at vise placeringen.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basforstærkning</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-effekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Lydeffekter</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Tilslut hovedtelefoner for disse effekter.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Desværre, denne videofil kan ikke trimmes</string>
+ <string name="no_permission_for_drm">Beklager, DRM-beskyttede filer ikke kan deles</string>
+ <string name="drm_license_info">DRM licens info</string>
+</resources>
diff --git a/res/values-de/cm_strings.xml b/res/values-de/cm_strings.xml
new file mode 100644
index 000000000..bb4a6877d
--- /dev/null
+++ b/res/values-de/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Aufzeichnungszeit</string>
+</resources>
diff --git a/res/values-de/codeaurora_strings.xml b/res/values-de/codeaurora_strings.xml
new file mode 100644
index 000000000..3f6b32ce3
--- /dev/null
+++ b/res/values-de/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Schritt</string>
+ <string name="step_option_desc">Vor- und Zurückspul-Schritt anpassen</string>
+ <string name="setp_option_three_second">3 Sekunden</string>
+ <string name="setp_option_six_second">6 Sekunden</string>
+ <string name="loop">"Endlosschleife"</string>
+ <string name="single">"Einzeln"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Lautsprecher AN</string>
+ <string name="speaker_off">Lautsprecher AUS</string>
+ <string name="speaker_need_headset">Für diese Funktionen müssen Sie Kopfhörer verwenden.</string>
+ <string name="single_track">"Einzelner Titel"</string>
+ <string name="input_url">"Geben Sie eine URL ein."</string>
+ <string name="streaming_settings">"Streaming-Einstellungen"</string>
+ <string name="next">"Weiter"</string>
+ <string name="previous">"Zurück"</string>
+ <string name="buffer_size">Puffergröße</string>
+ <string name="apn">Bevorzugter APN</string>
+ <string name="rtp_min_port">Min. Wert für Port</string>
+ <string name="rtp_max_port">Max. Wert für Port</string>
+ <string name="set_rtp_min_port">Min. Wert für Port festlegen</string>
+ <string name="set_rtp_max_port">Max. Wert für Port festlegen</string>
+ <string name="set_buffer_size">Puffergröße einstellen</string>
+ <string name="set_apn">Bevorzugten APN auswählen</string>
+ <string name="setting">Einstellungen</string>
+ <string name="server_timeout_title">"Zeitüberschreitung beim Server"</string>
+ <string name="server_timeout_message">"Erneut zum Server verbinden, um das Video abzuspielen?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Verbindung fehlgeschlagen, neuer Verbindungsversuch zu %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Derzeit läuft</string>
+ <string name="media_controller_connecting">Verbindung wird hergestellt\u2026</string>
+ <string name="bookmark_add">"Lesezeichen hinzufügen"</string>
+ <string name="bookmark_display">"Lesezeichen anzeigen"</string>
+ <string name="bookmark_empty">"Keine Lesezeichen"</string>
+ <string name="bookmark_exist">"Lesezeichen ist bereits vorhanden"</string>
+ <string name="bookmark_add_success">"Lesezeichen hinzugefügt"</string>
+ <string name="bookmark_list">"Lesezeichen"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Ort"</string>
+ <string name="delete_all">"Alle löschen"</string>
+ <string name="default_title">"Standardtitel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Weitere Bilder</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Stummschalten nicht möglich – das Video wird nicht unterstützt.</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Es ist keine Karten-App zum Anzeigen des Standorts installiert.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bassverstärkung</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-Effekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audioeffekte</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Schließen Sie Kopfhörer für diese Effekte an.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon-Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Diese Videodatei kann nicht gekürzt werden.</string>
+ <string name="no_permission_for_drm">Durch DRM geschützte Dateien können leider nicht geteilt werden.</string>
+ <string name="drm_license_info">DRM-Lizenzinformationen</string>
+</resources>
diff --git a/res/values-el/cm_strings.xml b/res/values-el/cm_strings.xml
new file mode 100644
index 000000000..87732e692
--- /dev/null
+++ b/res/values-el/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Ημερομηνία καταγραφής</string>
+</resources>
diff --git a/res/values-el/codeaurora_strings.xml b/res/values-el/codeaurora_strings.xml
new file mode 100644
index 000000000..09eb2bf3e
--- /dev/null
+++ b/res/values-el/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Βήμα</string>
+ <string name="step_option_desc">Προσαρμόστε το βήμα fast forward/rewind</string>
+ <string name="setp_option_three_second">3 δευτερόλεπτα</string>
+ <string name="setp_option_six_second">6 δευτερόλεπτα</string>
+ <string name="loop">"Επανάληψη"</string>
+ <string name="single">"Μονό"</string>
+ <string name="stereo">"Στερεοφωνικό"</string>
+ <string name="speaker_on">Ηχείο ενεργό</string>
+ <string name="speaker_off">Ηχείο ανενεργό</string>
+ <string name="speaker_need_headset">Συνδέστε ακουστικά για να χρησιμοποιήσετε αυτή τη δυνατότητα.</string>
+ <string name="single_track">"Μονό κομμάτι"</string>
+ <string name="input_url">"Εισάγετε URL"</string>
+ <string name="streaming_settings">"Ρυθµίσεις ροής"</string>
+ <string name="next">"Επόμενο"</string>
+ <string name="previous">"Προηγούμενο"</string>
+ <string name="buffer_size">Μέγεθος buffer</string>
+ <string name="apn">Προτιμώμενο APN</string>
+ <string name="rtp_min_port">Ελάχιστη θύρα</string>
+ <string name="rtp_max_port">Μέγιστη θύρα</string>
+ <string name="set_rtp_min_port">Ορισμός ελάχιστης θύρας</string>
+ <string name="set_rtp_max_port">Ορισμός μέγιστης θύρας</string>
+ <string name="set_buffer_size">Ορισμός μεγέθους buffer</string>
+ <string name="set_apn">Επιλογή προτιμώμενου APN</string>
+ <string name="setting">Ρυθμίσεις</string>
+ <string name="server_timeout_title">"Χρονικό όριο διακομιστή"</string>
+ <string name="server_timeout_message">"Επανασύνδεση με το διακομιστή για αναπαραγωγή του βίντεο;"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Η σύνδεση απέτυχε, προσπάθεια επανασύνδεσης με το %1$d\u2026"</string>
+ <string name="media_controller_live">Ζωντανά</string>
+ <string name="media_controller_playing">Γίνεται αναπαραγωγή</string>
+ <string name="media_controller_connecting">Σύνδεση\u2026</string>
+ <string name="bookmark_add">"Προσθήκη σελιδοδείκτη"</string>
+ <string name="bookmark_display">"Εμφάνιση σελιδοδεικτών"</string>
+ <string name="bookmark_empty">"Δεν υπάρχουν σελιδοδείκτες"</string>
+ <string name="bookmark_exist">"Ο σελιδοδείκτης υπάρχει ήδη"</string>
+ <string name="bookmark_add_success">"Ο σελιδοδείκτης προστέθηκε"</string>
+ <string name="bookmark_list">"Σελιδοδείκτες"</string>
+ <string name="bookmark_title">"Τίτλος"</string>
+ <string name="bookmark_location">"Τοποθεσία"</string>
+ <string name="delete_all">"Διαγραφή όλων"</string>
+ <string name="default_title">"Προεπιλεγμένος τίτλος"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Περισσότερες εικόνες</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Δεν είναι δυνατή η σίγαση: το βίντεο δεν υποστηρίζεται</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Δεν υπάρχει εγκατεστημένη καμία εφαρμογή χαρτών ώστε να δείτε την τοποθεσία.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Ενίσχυση μπάσου</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Εφέ 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Ηχητικά εφέ</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Συνδέστε ακουστικά για αυτά τα εφέ.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Δυστυχώς δεν είναι δυνατή η περικοπή αυτού του αρχείου βίντεο</string>
+ <string name="no_permission_for_drm">Συγγνώμη, δεν είναι δυνατή η κοινή χρήση αρχείων με προστασία DRM</string>
+ <string name="drm_license_info">Πληροφορίες άδειας DRM</string>
+</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 507b21064..0a1be1421 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -70,17 +70,17 @@
<string name="switch_to_camera" msgid="7280111806675169992">"Φωτογραφική μηχανή"</string>
<plurals name="number_of_items_selected">
<item quantity="zero" msgid="2142579311530586258">"Επιλέχθηκαν %1$d"</item>
- <item quantity="one" msgid="2478365152745637768">"Επιλέχθηκαν %1$d"</item>
+ <item quantity="one" msgid="2478365152745637768">"Επιλέχθηκε %1$d"</item>
<item quantity="other" msgid="754722656147810487">"Επιλέχθηκαν %1$d"</item>
</plurals>
<plurals name="number_of_albums_selected">
<item quantity="zero" msgid="749292746814788132">"Επιλέχθηκαν %1$d"</item>
- <item quantity="one" msgid="6184377003099987825">"Επιλέχθηκαν %1$d"</item>
+ <item quantity="one" msgid="6184377003099987825">"Επιλέχθηκε %1$d"</item>
<item quantity="other" msgid="53105607141906130">"Επιλέχθηκαν %1$d"</item>
</plurals>
<plurals name="number_of_groups_selected">
<item quantity="zero" msgid="3466388370310869238">"Επιλέχθηκαν %1$d"</item>
- <item quantity="one" msgid="5030162638216034260">"Επιλέχθηκαν %1$d"</item>
+ <item quantity="one" msgid="5030162638216034260">"Επιλέχθηκε %1$d"</item>
<item quantity="other" msgid="3512041363942842738">"Επιλέχθηκαν %1$d"</item>
</plurals>
<string name="show_on_map" msgid="6157544221201750980">"Εμφάνιση στον χάρτη"</string>
diff --git a/res/values-en-rAU/cm_strings.xml b/res/values-en-rAU/cm_strings.xml
new file mode 100644
index 000000000..3a6e3a879
--- /dev/null
+++ b/res/values-en-rAU/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Record time</string>
+</resources>
diff --git a/res/values-en-rAU/codeaurora_strings.xml b/res/values-en-rAU/codeaurora_strings.xml
new file mode 100644
index 000000000..04949abc2
--- /dev/null
+++ b/res/values-en-rAU/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Step</string>
+ <string name="step_option_desc">Customise fast forward/rewind step</string>
+ <string name="setp_option_three_second">3 seconds</string>
+ <string name="setp_option_six_second">6 seconds</string>
+ <string name="loop">"Loop"</string>
+ <string name="single">"Single"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Speaker ON</string>
+ <string name="speaker_off">Speaker OFF</string>
+ <string name="speaker_need_headset">Plug in headphones to use this feature.</string>
+ <string name="single_track">"Single track"</string>
+ <string name="input_url">"Enter URL"</string>
+ <string name="streaming_settings">"Streaming settings"</string>
+ <string name="next">"Next"</string>
+ <string name="previous">"Previous"</string>
+ <string name="buffer_size">Buffer size</string>
+ <string name="apn">Preferred APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Set min port</string>
+ <string name="set_rtp_max_port">Set max port</string>
+ <string name="set_buffer_size">Set buffer size</string>
+ <string name="set_apn">Select preferred APN</string>
+ <string name="setting">Settings</string>
+ <string name="server_timeout_title">"Server timeout"</string>
+ <string name="server_timeout_message">"Reconnect to the server to play the video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Connection failed, trying to reconnect to %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Playing</string>
+ <string name="media_controller_connecting">Connecting\u2026</string>
+ <string name="bookmark_add">"Add bookmark"</string>
+ <string name="bookmark_display">"Show bookmarks"</string>
+ <string name="bookmark_empty">"No bookmarks"</string>
+ <string name="bookmark_exist">"Bookmark already exists"</string>
+ <string name="bookmark_add_success">"Bookmark added"</string>
+ <string name="bookmark_list">"Bookmarks"</string>
+ <string name="bookmark_title">"Title"</string>
+ <string name="bookmark_location">"Location"</string>
+ <string name="delete_all">"Delete all"</string>
+ <string name="default_title">"Default title"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">More images</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Can not mute : video not supported</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">There is no maps app installed to show the location.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bass boost</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D effect</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audio effects</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Plug in headphones for these effects.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Sorry, this video file can not be trimmed</string>
+</resources>
diff --git a/res/values-en-rGB/cm_strings.xml b/res/values-en-rGB/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-en-rGB/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-en-rGB/codeaurora_strings.xml b/res/values-en-rGB/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-en-rGB/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-en-rIN/cm_strings.xml b/res/values-en-rIN/cm_strings.xml
new file mode 100644
index 000000000..3a6e3a879
--- /dev/null
+++ b/res/values-en-rIN/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Record time</string>
+</resources>
diff --git a/res/values-en-rIN/codeaurora_strings.xml b/res/values-en-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..c6b42c68f
--- /dev/null
+++ b/res/values-en-rIN/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Step</string>
+ <string name="step_option_desc">Customize fast forward/rewind step</string>
+ <string name="setp_option_three_second">3 seconds</string>
+ <string name="setp_option_six_second">6 seconds</string>
+ <string name="loop">"Loop"</string>
+ <string name="single">"Single"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Speaker ON</string>
+ <string name="speaker_off">Speaker OFF</string>
+ <string name="speaker_need_headset">Plug in headphones to use this feature.</string>
+ <string name="single_track">"Single track"</string>
+ <string name="input_url">"Enter URL"</string>
+ <string name="streaming_settings">"Streaming settings"</string>
+ <string name="next">"Next"</string>
+ <string name="previous">"Previous"</string>
+ <string name="buffer_size">Buffer size</string>
+ <string name="apn">Preferred APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Set min port</string>
+ <string name="set_rtp_max_port">Set max port</string>
+ <string name="set_buffer_size">Set buffer size</string>
+ <string name="set_apn">Select preferred APN</string>
+ <string name="setting">Settings</string>
+ <string name="server_timeout_title">"Server timeout"</string>
+ <string name="server_timeout_message">"Reconnect to the server to play the video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Connection failed, trying to reconnect to %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Playing</string>
+ <string name="media_controller_connecting">Connecting\u2026</string>
+ <string name="bookmark_add">"Add bookmark"</string>
+ <string name="bookmark_display">"Show bookmarks"</string>
+ <string name="bookmark_empty">"No bookmarks"</string>
+ <string name="bookmark_exist">"Bookmark already exists"</string>
+ <string name="bookmark_add_success">"Bookmark added"</string>
+ <string name="bookmark_list">"Bookmarks"</string>
+ <string name="bookmark_title">"Title"</string>
+ <string name="bookmark_location">"Location"</string>
+ <string name="delete_all">"Delete all"</string>
+ <string name="default_title">"Default title"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">More images</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Can not mute : video not supported</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">There is no maps app installed to show the location.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bass boost</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D effect</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audio effects</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Plug in headphones for these effects.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Sorry, this video file can not be trimmed</string>
+ <string name="no_permission_for_drm">Sorry, DRM protected files cannot be shared</string>
+ <string name="drm_license_info">DRM license info</string>
+</resources>
diff --git a/res/values-en-rPT/cm_strings.xml b/res/values-en-rPT/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-en-rPT/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-en-rPT/codeaurora_strings.xml b/res/values-en-rPT/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-en-rPT/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-en-rPT/filtershow_strings.xml b/res/values-en-rPT/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-en-rPT/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-en-rPT/strings.xml b/res/values-en-rPT/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-en-rPT/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-eo/cm_strings.xml b/res/values-eo/cm_strings.xml
new file mode 100644
index 000000000..edf6ba295
--- /dev/null
+++ b/res/values-eo/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Rikordotempo</string>
+</resources>
diff --git a/res/values-eo/codeaurora_strings.xml b/res/values-eo/codeaurora_strings.xml
new file mode 100644
index 000000000..d93bd6077
--- /dev/null
+++ b/res/values-eo/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Paŝo</string>
+ <string name="step_option_desc">Agordi rapidan aantaŭ-/re-iron</string>
+ <string name="setp_option_three_second">3 sekundoj</string>
+ <string name="setp_option_six_second">6 sekundoj</string>
+ <string name="loop">"Buklo"</string>
+ <string name="single">"Unuopaĵo"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Laŭtilo ŝaltita</string>
+ <string name="speaker_off">Laŭtilo malŝaltita</string>
+ <string name="speaker_need_headset">Konektu kapaŭskultilojn por uzi tiun eblecon.</string>
+ <string name="single_track">"Unuopaĵa muziko"</string>
+ <string name="input_url">"Tajpu URL"</string>
+ <string name="streaming_settings">"Elsendflua agordo"</string>
+ <string name="next">"Sekvonta"</string>
+ <string name="previous">"Antaŭa"</string>
+ <string name="buffer_size">Bufra grandeco</string>
+ <string name="apn">Plej ŝatata APN</string>
+ <string name="rtp_min_port">Minimuma konektejo</string>
+ <string name="rtp_max_port">Maksimuma konektejo</string>
+ <string name="set_rtp_min_port">Agordi minimuman konektejon</string>
+ <string name="set_rtp_max_port">Agordi maksimuman konektejon</string>
+ <string name="set_buffer_size">Agordi bufran grandecon</string>
+ <string name="set_apn">Elekti plej ŝatatan APN</string>
+ <string name="setting">Agordoj</string>
+ <string name="server_timeout_title">"Servila tempolimo"</string>
+ <string name="server_timeout_message">"Ĉu rekonekti al la servilo por ludi filmon?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Konektado fiaskis, provante denove konekti al %1$d\u2026"</string>
+ <string name="media_controller_live">Rekta</string>
+ <string name="media_controller_playing">Ludado</string>
+ <string name="media_controller_connecting">Konektiĝas\u2026</string>
+ <string name="bookmark_add">"Aldoni legosignon"</string>
+ <string name="bookmark_display">"Montri legosignojn"</string>
+ <string name="bookmark_empty">"Neniu legosigno"</string>
+ <string name="bookmark_exist">"Legosigno jam ekzistas"</string>
+ <string name="bookmark_add_success">"Legosigno aldonita"</string>
+ <string name="bookmark_list">"Legosignoj"</string>
+ <string name="bookmark_title">"Titolo"</string>
+ <string name="bookmark_location">"Loko"</string>
+ <string name="delete_all">"Forigi ĉion"</string>
+ <string name="default_title">"Defaŭlta titolo"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Pli da bildoj</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Ne eblas silentigi : filmo ne subtenata</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Neniu mapa aplikaĵo por montri lokon.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basa amplifikilo</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekto</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Aŭdaj efektoj</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Konektu kapaŭskultilojn por tiuj efektoj.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Bedaŭrinde, tiu filmo ne tondeteblas</string>
+</resources>
diff --git a/res/values-eo/filtershow_strings.xml b/res/values-eo/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-eo/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-eo/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-es-rMX/cm_strings.xml b/res/values-es-rMX/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-es-rMX/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-es-rMX/codeaurora_strings.xml b/res/values-es-rMX/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-es-rMX/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-es-rMX/filtershow_strings.xml b/res/values-es-rMX/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-es-rMX/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-es-rMX/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-es-rUS/cm_strings.xml b/res/values-es-rUS/cm_strings.xml
new file mode 100644
index 000000000..c9e7cdc10
--- /dev/null
+++ b/res/values-es-rUS/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Fecha de grabación</string>
+</resources>
diff --git a/res/values-es-rUS/codeaurora_strings.xml b/res/values-es-rUS/codeaurora_strings.xml
new file mode 100644
index 000000000..bce14b9a3
--- /dev/null
+++ b/res/values-es-rUS/codeaurora_strings.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="speaker_need_headset">Conecta los auriculares para usar esta función.</string>
+ <string name="input_url">"Ingresar URL"</string>
+ <string name="next">"Siguiente"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Error de conexión, intentando volver a conectar con %1$d\u2026"</string>
+ <string name="bookmark_add_success">"Marcador añadido"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">No se puede silenciar: video no compatible</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Conectar los auriculares para estos efectos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-es/cm_strings.xml b/res/values-es/cm_strings.xml
new file mode 100644
index 000000000..9996c8a7a
--- /dev/null
+++ b/res/values-es/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Hora de grabación</string>
+</resources>
diff --git a/res/values-es/codeaurora_strings.xml b/res/values-es/codeaurora_strings.xml
new file mode 100644
index 000000000..071420243
--- /dev/null
+++ b/res/values-es/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Paso</string>
+ <string name="step_option_desc">Personalizar el salto rápido hacia adelante o hacia atrás</string>
+ <string name="setp_option_three_second">3 segundos</string>
+ <string name="setp_option_six_second">6 segundos</string>
+ <string name="loop">"Bucle"</string>
+ <string name="single">"Simple"</string>
+ <string name="stereo">"Estéreo"</string>
+ <string name="speaker_on">Altavoz encendido</string>
+ <string name="speaker_off">Altavoz apagado</string>
+ <string name="speaker_need_headset">Conecta unos auriculares para usar esta característica.</string>
+ <string name="single_track">"Pista sencilla"</string>
+ <string name="input_url">"Introducir URL"</string>
+ <string name="streaming_settings">"Ajustes de transmisión"</string>
+ <string name="next">"Siguiente"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Tamaño de memoria intermedia</string>
+ <string name="apn">APN preferido</string>
+ <string name="rtp_min_port">Puerto mínimo</string>
+ <string name="rtp_max_port">Puerto máximo</string>
+ <string name="set_rtp_min_port">Establecer puerto inferior</string>
+ <string name="set_rtp_max_port">Establecer puerto superior</string>
+ <string name="set_buffer_size">Establecer tamaño de memoria intermedia</string>
+ <string name="set_apn">Seleccionar APN preferido</string>
+ <string name="setting">Ajustes</string>
+ <string name="server_timeout_title">"Tiempo de espera del servidor"</string>
+ <string name="server_timeout_message">"¿Volver a conectar al servidor para reproducir el vídeo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Falló la conexión. Intentando volver a conectar con %1$d\u2026"</string>
+ <string name="media_controller_live">En directo</string>
+ <string name="media_controller_playing">Reproduciendo</string>
+ <string name="media_controller_connecting">Conectando\u2026</string>
+ <string name="bookmark_add">"Añadir marcador"</string>
+ <string name="bookmark_display">"Mostrar marcadores"</string>
+ <string name="bookmark_empty">"No hay marcadores"</string>
+ <string name="bookmark_exist">"Este marcador ya existe"</string>
+ <string name="bookmark_add_success">"Marcador añadido"</string>
+ <string name="bookmark_list">"Marcadores"</string>
+ <string name="bookmark_title">"Título"</string>
+ <string name="bookmark_location">"Ubicación"</string>
+ <string name="delete_all">"Eliminar todo"</string>
+ <string name="default_title">"Título por defecto"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Más imágenes</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">No se puede silenciar: vídeo no soportado</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">No hay ninguna aplicación de mapas instalada para mostrar la ubicación.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Refuerzo de graves</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efecto 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efectos de sonido</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Conecta unos auriculares para estos efectos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Este vídeo no puede ser recortado</string>
+ <string name="no_permission_for_drm">Lo sentimos, pero no se pueden compartir los archivos protegidos por DRM</string>
+ <string name="drm_license_info">Información de la licencia DRM</string>
+</resources>
diff --git a/res/values-et-rEE/cm_strings.xml b/res/values-et-rEE/cm_strings.xml
new file mode 100644
index 000000000..3506b4d57
--- /dev/null
+++ b/res/values-et-rEE/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Salvestusaeg</string>
+</resources>
diff --git a/res/values-et-rEE/codeaurora_strings.xml b/res/values-et-rEE/codeaurora_strings.xml
new file mode 100644
index 000000000..9c909e37f
--- /dev/null
+++ b/res/values-et-rEE/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Samm</string>
+ <string name="step_option_desc">Kohanda kiirkerimise edasi/tagasi sammu</string>
+ <string name="setp_option_three_second">3 sekundit</string>
+ <string name="setp_option_six_second">6 sekundit</string>
+ <string name="loop">"Kordamine"</string>
+ <string name="single">"Üksik"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Kõlar sees</string>
+ <string name="speaker_off">Kõlar väljas</string>
+ <string name="speaker_need_headset">Ühendage kõrvaklapid et seda funktsiooni kasutada.</string>
+ <string name="single_track">"Üksik lugu"</string>
+ <string name="input_url">"Sisesta URL"</string>
+ <string name="streaming_settings">"Voogesituse seaded"</string>
+ <string name="next">"Järgmine"</string>
+ <string name="previous">"Eelmine"</string>
+ <string name="buffer_size">Puhvri suurus</string>
+ <string name="apn">Eelistatud APN</string>
+ <string name="rtp_min_port">Min. port</string>
+ <string name="rtp_max_port">Maks. port</string>
+ <string name="set_rtp_min_port">Sea min. port</string>
+ <string name="set_rtp_max_port">Sea maks. port</string>
+ <string name="set_buffer_size">Määra puhvri suurus</string>
+ <string name="set_apn">Vali eelistatud APN</string>
+ <string name="setting">Seaded</string>
+ <string name="server_timeout_title">"Serveri päring hangus"</string>
+ <string name="server_timeout_message">"Taasühenda serveriga video mängimiseks?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Ühendus ebaõnnestus, taasühendan %1$d\u2026"</string>
+ <string name="media_controller_live">Otse</string>
+ <string name="media_controller_playing">Mängin</string>
+ <string name="media_controller_connecting">Ühendun\u2026</string>
+ <string name="bookmark_add">"Lisa järjehoidja"</string>
+ <string name="bookmark_display">"Kuva järjehoidjad"</string>
+ <string name="bookmark_empty">"Järjehoidjad puuduvad"</string>
+ <string name="bookmark_exist">"Järjehoidja juba eksisteerib"</string>
+ <string name="bookmark_add_success">"Järjehoidja lisatud"</string>
+ <string name="bookmark_list">"Järjehoidjad"</string>
+ <string name="bookmark_title">"Pealkiri"</string>
+ <string name="bookmark_location">"Asukoht"</string>
+ <string name="delete_all">"Kustuta kõik"</string>
+ <string name="default_title">"Vaikimisi pealkiri"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Rohkem pilte</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Ei saa vaigistada : video pole toetatud</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Kaardirakendust pole installeeritud asukoha näitamiseks.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bassivõimendi</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Heliefektid</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Ühenda kõrvaklapid nende efektide jaoks.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Vabandust, seda videofaili ei saa kärpida</string>
+ <string name="no_permission_for_drm">Vabandust, DRM kaitstud faile ei saa jagada</string>
+ <string name="drm_license_info">DRM litsensi info</string>
+</resources>
diff --git a/res/values-eu-rES/cm_strings.xml b/res/values-eu-rES/cm_strings.xml
new file mode 100644
index 000000000..605dac95a
--- /dev/null
+++ b/res/values-eu-rES/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Grabaketaren ordua</string>
+</resources>
diff --git a/res/values-eu-rES/codeaurora_strings.xml b/res/values-eu-rES/codeaurora_strings.xml
new file mode 100644
index 000000000..68f0055a7
--- /dev/null
+++ b/res/values-eu-rES/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Urratsa</string>
+ <string name="step_option_desc">Pertsonalizatu aurrera/atzerako jauziak</string>
+ <string name="setp_option_three_second">3 segundo</string>
+ <string name="setp_option_six_second">6 segundo</string>
+ <string name="loop">"Bigiztatu"</string>
+ <string name="single">"Bakarra"</string>
+ <string name="stereo">"Estereoa"</string>
+ <string name="speaker_on">Bozgorailua piztuta</string>
+ <string name="speaker_off">Bozgorailua itzalita</string>
+ <string name="speaker_need_headset">Konektatu aurikularrak ezaugarri hau erabiltzeko.</string>
+ <string name="single_track">"Pista bakarra"</string>
+ <string name="input_url">"Sartu URLa"</string>
+ <string name="streaming_settings">"Transmisio jarraituaren ezarpenak"</string>
+ <string name="next">"Hurrengoa"</string>
+ <string name="previous">"Aurrekoa"</string>
+ <string name="buffer_size">Buffer neurria</string>
+ <string name="apn">APN hobetsia</string>
+ <string name="rtp_min_port">Gutxieneko ataka</string>
+ <string name="rtp_max_port">Gehieneko ataka</string>
+ <string name="set_rtp_min_port">Ezarri gutxieneko ataka</string>
+ <string name="set_rtp_max_port">Ezarri gehieneko ataka</string>
+ <string name="set_buffer_size">Ezarri buffer neurria</string>
+ <string name="set_apn">Ezarri APN hobetsia</string>
+ <string name="setting">Ezarpenak</string>
+ <string name="server_timeout_title">"Zerbitzariaren denbora-muga"</string>
+ <string name="server_timeout_message">"Zerbitzarira birkonektatu bideoa erreproduzitzeko?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Konexioak huts egin du, %1$d birkonektatzen\u2026"</string>
+ <string name="media_controller_live">Zuzenean</string>
+ <string name="media_controller_playing">Erreproduzitzen</string>
+ <string name="media_controller_connecting">Konektatzen\u2026</string>
+ <string name="bookmark_add">"Gehitu laster-marka"</string>
+ <string name="bookmark_display">"Erakutsi Laster-markak"</string>
+ <string name="bookmark_empty">"Ez dago laster-markarik"</string>
+ <string name="bookmark_exist">"Laster-marka badago aurretik"</string>
+ <string name="bookmark_add_success">"Laster-marka gehitu da"</string>
+ <string name="bookmark_list">"Laster-markak"</string>
+ <string name="bookmark_title">"Izenburua"</string>
+ <string name="bookmark_location">"Kokalekua"</string>
+ <string name="delete_all">"Ezabatu guztiak"</string>
+ <string name="default_title">"Izenburu lehenetsia"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Irudi gehiago</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Ezin da mututu: bideoa ez da onartzen</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Ez dago kokalekua bistaratu dezakeen mapa aplikaziorik instalatuta.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Baxuen indartzea</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efektua</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audio efektuak</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Konektatu aurikularrak efektu hauentzako .</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Barkatu, bideo hau ezin da ebaki</string>
+ <string name="no_permission_for_drm">Barkatu, DRM bidez babestutako fitxategiak ezin dira partekatu</string>
+ <string name="drm_license_info">DRM lizentziaren informazioa</string>
+</resources>
diff --git a/res/values-fa/cm_strings.xml b/res/values-fa/cm_strings.xml
new file mode 100644
index 000000000..4407e66d4
--- /dev/null
+++ b/res/values-fa/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">زمان ضبط</string>
+</resources>
diff --git a/res/values-fa/codeaurora_strings.xml b/res/values-fa/codeaurora_strings.xml
new file mode 100644
index 000000000..8f3666f56
--- /dev/null
+++ b/res/values-fa/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">گام</string>
+ <string name="step_option_desc">سفارشی کردن گام رو به جلو/عقب سریع</string>
+ <string name="setp_option_three_second">۳ ثانیه</string>
+ <string name="setp_option_six_second">۶ ثانیه</string>
+ <string name="loop">"تکرار"</string>
+ <string name="single">"تکی"</string>
+ <string name="stereo">"استریو"</string>
+ <string name="speaker_on">بلندگو روشن</string>
+ <string name="speaker_off">بلندگو خاموش</string>
+ <string name="speaker_need_headset">برای استفاده از این قابلیت هدفون را وصل کنید.</string>
+ <string name="single_track">"تک‌آهنگ"</string>
+ <string name="input_url">"آدرس را وارد کنید"</string>
+ <string name="streaming_settings">"تنظیمات پخش"</string>
+ <string name="next">"بعدی"</string>
+ <string name="previous">"قبلی"</string>
+ <string name="buffer_size">اندازه بافر</string>
+ <string name="apn">APN ترجیحی</string>
+ <string name="rtp_min_port">پورت min</string>
+ <string name="rtp_max_port">پورت max</string>
+ <string name="set_rtp_min_port">تنظیم پورت min</string>
+ <string name="set_rtp_max_port">تنظیم پورت max</string>
+ <string name="set_buffer_size">تنظیم اندازه بافر</string>
+ <string name="set_apn">انتخاب APN ترجیحی</string>
+ <string name="setting">تنظیمات</string>
+ <string name="server_timeout_title">"پایان زمان سرور"</string>
+ <string name="server_timeout_message">"برای پخش مجدد ویدیو دوباره به سرور متصل می‌شوید؟"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"اتصال ناموفق بود، تلاش مجدد برای اتصال به %1$d\u2026"</string>
+ <string name="media_controller_live">زنده</string>
+ <string name="media_controller_playing">در حال پخش</string>
+ <string name="media_controller_connecting">اتصال\u2026</string>
+ <string name="bookmark_add">"افزودن نشانک"</string>
+ <string name="bookmark_display">"نمایش نشانک‌ها"</string>
+ <string name="bookmark_empty">"بدون نشانک"</string>
+ <string name="bookmark_exist">"نشانک از قبل وجود دارد"</string>
+ <string name="bookmark_add_success">"نشانک اضافه شد"</string>
+ <string name="bookmark_list">"نشانک‌ها"</string>
+ <string name="bookmark_title">"عنوان"</string>
+ <string name="bookmark_location">"مکان"</string>
+ <string name="delete_all">"حذف همه"</string>
+ <string name="default_title">"عنوان پیش‌فرض"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">تصاویر بیشتر</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">نمی‌توان قطع کرد: ویدیو پشتیبانی نمی‌شود</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">برنامه‌ی نقشه‌ای برای نمایش مکان نصب نشده است.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">تقویت صدای بم</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">جلوه سه‌بعدی</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">جلوه‌های صوتی</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">برای استفاده از این جلوه‌ها هدفون را وصل کنید.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">صدای اسنپدراگون+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">متأسفانه این ویدیو بریده نمی‌شود</string>
+ <string name="no_permission_for_drm">با عرض پوزش فایل محافظت شده DRM را نمی‌توان به اشتراک گذاشت</string>
+ <string name="drm_license_info">اطلاعات مجوز DRM</string>
+</resources>
diff --git a/res/values-fi/cm_strings.xml b/res/values-fi/cm_strings.xml
new file mode 100644
index 000000000..ac8daa684
--- /dev/null
+++ b/res/values-fi/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tallennusaika</string>
+</resources>
diff --git a/res/values-fi/codeaurora_strings.xml b/res/values-fi/codeaurora_strings.xml
new file mode 100644
index 000000000..4438b470c
--- /dev/null
+++ b/res/values-fi/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Kelaus</string>
+ <string name="step_option_desc">Mukauta kelauksen nopeutta</string>
+ <string name="setp_option_three_second">3 sekuntia</string>
+ <string name="setp_option_six_second">6 sekuntia</string>
+ <string name="loop">"Jatkuva"</string>
+ <string name="single">"Yksittäinen"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Kaiutin KÄYTÖSSÄ</string>
+ <string name="speaker_off">Kaiutin POIS KÄYTÖSTÄ</string>
+ <string name="speaker_need_headset">Kytke kuulokkeet käyttääksesi tätä toimintoa.</string>
+ <string name="single_track">"Yksi kappale"</string>
+ <string name="input_url">"Syötä linkki"</string>
+ <string name="streaming_settings">"Suoratoistoasetukset"</string>
+ <string name="next">"Seuraava"</string>
+ <string name="previous">"Edellinen"</string>
+ <string name="buffer_size">Puskurin koko</string>
+ <string name="apn">Ensisijainen APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Aseta min port</string>
+ <string name="set_rtp_max_port">Aseta max port</string>
+ <string name="set_buffer_size">Aseta puskurin koko</string>
+ <string name="set_apn">Valitse ensisijainen APN</string>
+ <string name="setting">Asetukset</string>
+ <string name="server_timeout_title">"Palvelimen aikakatkaisu"</string>
+ <string name="server_timeout_message">"Yhdistä uudelleen palvelimeen toistaaksesi videon?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Yhteys epäonnistui, uudelleenyhdistetään %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Toistetaan</string>
+ <string name="media_controller_connecting">Yhdistetään\u2026</string>
+ <string name="bookmark_add">"Lisää kirjanmerkki"</string>
+ <string name="bookmark_display">"Näytä kirjanmerkit"</string>
+ <string name="bookmark_empty">"Ei kirjanmerkkejä"</string>
+ <string name="bookmark_exist">"Kirjanmerkki on jo olemassa"</string>
+ <string name="bookmark_add_success">"Kirjanmerkki lisätty"</string>
+ <string name="bookmark_list">"Kirjanmerkit"</string>
+ <string name="bookmark_title">"Nimi"</string>
+ <string name="bookmark_location">"Sijainti"</string>
+ <string name="delete_all">"Poista kaikki"</string>
+ <string name="default_title">"Oletusnimi"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Lisää kuvia</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Ei voi mykistää: video ei tuettu</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Karttasovellusta ei asennettu näyttämään sijaintia.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basson korostus</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-efekti</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Äänitehosteet</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Kytke kuulokkeet käyttääksesi näitä tehosteita.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Videotiedostoa ei voi leikata</string>
+ <string name="no_permission_for_drm">Valitettavasti DRM-suojattuja tiedostoja ei voi jakaa</string>
+ <string name="drm_license_info">DRM-lisenssin tiedot</string>
+</resources>
diff --git a/res/values-fil-rPH/cm_strings.xml b/res/values-fil-rPH/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-fil-rPH/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-fil-rPH/codeaurora_strings.xml b/res/values-fil-rPH/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-fil-rPH/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-fr-rCA/cm_strings.xml b/res/values-fr-rCA/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-fr-rCA/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-fr-rCA/codeaurora_strings.xml b/res/values-fr-rCA/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-fr-rCA/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-fr/cm_strings.xml b/res/values-fr/cm_strings.xml
new file mode 100644
index 000000000..62700eb0b
--- /dev/null
+++ b/res/values-fr/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Date et heure d\'enregistrement</string>
+</resources>
diff --git a/res/values-fr/codeaurora_strings.xml b/res/values-fr/codeaurora_strings.xml
new file mode 100644
index 000000000..51a46a9b5
--- /dev/null
+++ b/res/values-fr/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Étape</string>
+ <string name="step_option_desc">Personnaliser le saut de l\'avance/retour rapide</string>
+ <string name="setp_option_three_second">3 secondes</string>
+ <string name="setp_option_six_second">6 secondes</string>
+ <string name="loop">"Boucle"</string>
+ <string name="single">"Simple"</string>
+ <string name="stereo">"Stéréo"</string>
+ <string name="speaker_on">Haut-parleur activé</string>
+ <string name="speaker_off">Haut-parleur désactivé</string>
+ <string name="speaker_need_headset">Brancher un casque pour utiliser cette fonctionnalité.</string>
+ <string name="single_track">"Piste simple"</string>
+ <string name="input_url">"Entrer l'URL"</string>
+ <string name="streaming_settings">"Paramètres de transmission"</string>
+ <string name="next">"Suivant"</string>
+ <string name="previous">"Précédent"</string>
+ <string name="buffer_size">Taille du tampon</string>
+ <string name="apn">APN préféré</string>
+ <string name="rtp_min_port">Port minimum</string>
+ <string name="rtp_max_port">Port maximum</string>
+ <string name="set_rtp_min_port">Configurer le port minimal</string>
+ <string name="set_rtp_max_port">Configurer le port maximal</string>
+ <string name="set_buffer_size">Paramétrer la taille du tampon</string>
+ <string name="set_apn">Sélectionner l\'APN préféré</string>
+ <string name="setting">Paramètres</string>
+ <string name="server_timeout_title">"Délai de réponse du serveur dépassé"</string>
+ <string name="server_timeout_message">"Se reconnecter au serveur pour lire la vidéo ?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"La connexion a échoué, tentative de reconnexion à %1$d\u2026"</string>
+ <string name="media_controller_live">En direct</string>
+ <string name="media_controller_playing">Lecture</string>
+ <string name="media_controller_connecting">Connexion\u2026</string>
+ <string name="bookmark_add">"Ajouter un favori"</string>
+ <string name="bookmark_display">"Afficher les favoris"</string>
+ <string name="bookmark_empty">"Aucun favori"</string>
+ <string name="bookmark_exist">"Le favori existe déjà"</string>
+ <string name="bookmark_add_success">"Favori ajouté"</string>
+ <string name="bookmark_list">"Favoris"</string>
+ <string name="bookmark_title">"Titre"</string>
+ <string name="bookmark_location">"Position"</string>
+ <string name="delete_all">"Tout supprimer"</string>
+ <string name="default_title">"Titre par défaut"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Plus d\'images</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Coupure du son impossible : vidéo non prise en charge</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Il n\'y a aucune application de cartographie installée pour afficher la position.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplification des basses</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Effet 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Effets audio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Brancher un casque pour ces effets.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Désolé, cette vidéo ne peut pas être coupée</string>
+ <string name="no_permission_for_drm">Désolé, les fichiers protégés par DRM ne peuvent pas être partagés</string>
+ <string name="drm_license_info">Infos sur la licence DRM</string>
+</resources>
diff --git a/res/values-fy-rNL/cm_strings.xml b/res/values-fy-rNL/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-fy-rNL/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-fy-rNL/codeaurora_strings.xml b/res/values-fy-rNL/codeaurora_strings.xml
new file mode 100644
index 000000000..5f4b7014d
--- /dev/null
+++ b/res/values-fy-rNL/codeaurora_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setting">Ynstellingen</string>
+ <string name="bookmark_location">"Lokaasje"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-fy-rNL/filtershow_strings.xml b/res/values-fy-rNL/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-fy-rNL/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-fy-rNL/strings.xml b/res/values-fy-rNL/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-fy-rNL/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-gd-rGB/cm_strings.xml b/res/values-gd-rGB/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-gd-rGB/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-gd-rGB/codeaurora_strings.xml b/res/values-gd-rGB/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-gd-rGB/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-gd-rGB/filtershow_strings.xml b/res/values-gd-rGB/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-gd-rGB/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-gd-rGB/strings.xml b/res/values-gd-rGB/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-gd-rGB/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-gl-rES/cm_strings.xml b/res/values-gl-rES/cm_strings.xml
new file mode 100644
index 000000000..dbf3bbb01
--- /dev/null
+++ b/res/values-gl-rES/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Data da gravación</string>
+</resources>
diff --git a/res/values-gl-rES/codeaurora_strings.xml b/res/values-gl-rES/codeaurora_strings.xml
new file mode 100644
index 000000000..a7f7f6a6d
--- /dev/null
+++ b/res/values-gl-rES/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Etapa</string>
+ <string name="step_option_desc">Personalizar a velocidade de avance/retroceso</string>
+ <string name="setp_option_three_second">3 segundos</string>
+ <string name="setp_option_six_second">6 segundos</string>
+ <string name="loop">"Bucle"</string>
+ <string name="single">"Único"</string>
+ <string name="stereo">"Estéreo"</string>
+ <string name="speaker_on">Altofalante aceso</string>
+ <string name="speaker_off">Altofalante apagado</string>
+ <string name="speaker_need_headset">Enchufar os auriculares para empregar esta funcionalidade.</string>
+ <string name="single_track">"Pista única"</string>
+ <string name="input_url">"Escribir o URL"</string>
+ <string name="streaming_settings">"Configuración de fluxo"</string>
+ <string name="next">"Seguinte"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Tamaño do búfer</string>
+ <string name="apn">APN favorito</string>
+ <string name="rtp_min_port">Porto mín.</string>
+ <string name="rtp_max_port">Porto máx.</string>
+ <string name="set_rtp_min_port">Estabelecer porto mín.</string>
+ <string name="set_rtp_max_port">Estabelecer porto máx.</string>
+ <string name="set_buffer_size">Estabelecer tamaño do búfer</string>
+ <string name="set_apn">Seleccionar o APN favorito</string>
+ <string name="setting">Configuración</string>
+ <string name="server_timeout_title">"Tempo de espera do servidor"</string>
+ <string name="server_timeout_message">"Reconectar co servidor para reproducir o vídeo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Fallou a conexión, tentarase reconectar con %1$d\u2026"</string>
+ <string name="media_controller_live">Ao vivo</string>
+ <string name="media_controller_playing">Reproducindo</string>
+ <string name="media_controller_connecting">Conectando\u2026</string>
+ <string name="bookmark_add">"Engadir marcador"</string>
+ <string name="bookmark_display">"Amosar os marcadores"</string>
+ <string name="bookmark_empty">"Sen marcadores"</string>
+ <string name="bookmark_exist">"O marcador xa existe"</string>
+ <string name="bookmark_add_success">"Marcador engadido"</string>
+ <string name="bookmark_list">"Marcadores"</string>
+ <string name="bookmark_title">"Título"</string>
+ <string name="bookmark_location">"Localización"</string>
+ <string name="delete_all">"Eliminar todo"</string>
+ <string name="default_title">"Título predeterminado"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Máis imaxes</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Non se pode silenciar: vídeo non compatíbel</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Non hai unha aplicación de mapas para amosar a localización.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplificación de graves</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efecto 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efectos de son</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Enchufar os auriculares para estes efectos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Vaia, o vídeo non se pode recortar</string>
+ <string name="no_permission_for_drm">Desculpe, os ficheiros protexidos por DRM non poden ser compartidos</string>
+ <string name="drm_license_info">Información da licenza DRM</string>
+</resources>
diff --git a/res/values-gu-rIN/cm_strings.xml b/res/values-gu-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-gu-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-gu-rIN/codeaurora_strings.xml b/res/values-gu-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-gu-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-hi/cm_strings.xml b/res/values-hi/cm_strings.xml
new file mode 100644
index 000000000..b055257dc
--- /dev/null
+++ b/res/values-hi/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">रिकॉर्ड करने का समय</string>
+</resources>
diff --git a/res/values-hi/codeaurora_strings.xml b/res/values-hi/codeaurora_strings.xml
new file mode 100644
index 000000000..8d47303a3
--- /dev/null
+++ b/res/values-hi/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">चरण</string>
+ <string name="step_option_desc">फ़ास्ट फॉरवर्ड/रीवाइंड चरण को मनपसंद बनाएँ</string>
+ <string name="setp_option_three_second">3 सेकंड</string>
+ <string name="setp_option_six_second">6 सेकंड</string>
+ <string name="loop">"लूप"</string>
+ <string name="single">"एकल"</string>
+ <string name="stereo">"स्टीरियो"</string>
+ <string name="speaker_on">स्पीकर चालू</string>
+ <string name="speaker_off">स्पीकर बंद</string>
+ <string name="speaker_need_headset">इस सुविधा का उपयोग करने के लिए हेडफ़ोन लगाएँ।</string>
+ <string name="single_track">"एकल ट्रैक"</string>
+ <string name="input_url">"यूआरएल दर्ज करें"</string>
+ <string name="streaming_settings">"स्ट्रीमिंग सेटिंग"</string>
+ <string name="next">"अगला"</string>
+ <string name="previous">"पिछला"</string>
+ <string name="buffer_size">बफ़र आमाप</string>
+ <string name="apn">पसंदीदा एपीएन</string>
+ <string name="rtp_min_port">न्यूनतम पोर्ट</string>
+ <string name="rtp_max_port">अधिकतम पोर्ट</string>
+ <string name="set_rtp_min_port">न्यूनतम पोर्ट सेट करें</string>
+ <string name="set_rtp_max_port">अधिकतम पोर्ट सेट करें</string>
+ <string name="set_buffer_size">बफ़र आमाप सेट करें</string>
+ <string name="set_apn">पसंदीदा एपीएन चुनें</string>
+ <string name="setting">सेटिंग</string>
+ <string name="server_timeout_title">"सर्वर समय समाप्त"</string>
+ <string name="server_timeout_message">"वीडियो बजाने के लिए सर्वर के साथ फिर से जुड़ जाएँ?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"कनेक्शन विफल हुआ। %1$d के साथ फिर से कनेक्ट करने की कोशिश कर रहे हैं\u2026"</string>
+ <string name="media_controller_live">सजीव</string>
+ <string name="media_controller_playing">बजा रहे हैं</string>
+ <string name="media_controller_connecting">कनेक्ट कर रहे हैं\u2026</string>
+ <string name="bookmark_add">"बुकमार्क जोड़ें"</string>
+ <string name="bookmark_display">"बुकमार्क दिखाएँ"</string>
+ <string name="bookmark_empty">"कोई बुकमार्क नहीं"</string>
+ <string name="bookmark_exist">"बुकमार्क पहले से ही मौजूद है"</string>
+ <string name="bookmark_add_success">"बुकमार्क जोड़ा गया"</string>
+ <string name="bookmark_list">"बुकमार्क"</string>
+ <string name="bookmark_title">"शीर्षक"</string>
+ <string name="bookmark_location">"स्थान"</string>
+ <string name="delete_all">"सब हटाएँ"</string>
+ <string name="default_title">"डिफ़ॉल्ट शीर्षक"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">और छवियाँ</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">मूक नहीं कर सके : वीडियो समर्थित नहीं है</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">स्थान दर्शाने के लिए कोई नक्शा ऐप स्थापित नहीं है।</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">मंद्र वर्धन</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3डी प्रभाव</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">ऑडियो प्रभाव</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">इन प्रभावों के लिए हेडफ़ोन डालें।</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">स्नैपड्रैगन ऑडियो+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">क्षमा करें, इस वीडियो फ़ाइल को ट्रिम नहीं कर सकते</string>
+</resources>
diff --git a/res/values-hr/cm_strings.xml b/res/values-hr/cm_strings.xml
new file mode 100644
index 000000000..f8cad8f39
--- /dev/null
+++ b/res/values-hr/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Trajanje snimke</string>
+</resources>
diff --git a/res/values-hr/codeaurora_strings.xml b/res/values-hr/codeaurora_strings.xml
new file mode 100644
index 000000000..5e109c8ca
--- /dev/null
+++ b/res/values-hr/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Korak</string>
+ <string name="step_option_desc">Prilagodite korak ubrzanja/premotavanja</string>
+ <string name="setp_option_three_second">3 sekunde</string>
+ <string name="setp_option_six_second">6 sekundi</string>
+ <string name="loop">"Ponavljanje"</string>
+ <string name="single">"Pojedinačna"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Zvučnik UKLJUČEN</string>
+ <string name="speaker_off">Zvučnik ISKLJUČEN</string>
+ <string name="speaker_need_headset">Priključite slušalice za korištenje ove mogućnosti.</string>
+ <string name="single_track">"Jedna pjesma"</string>
+ <string name="input_url">"Unesite URL"</string>
+ <string name="streaming_settings">"Postavke strujanja"</string>
+ <string name="next">"Sljedeći"</string>
+ <string name="previous">"Prethodni"</string>
+ <string name="buffer_size">Veličina međuspremnika</string>
+ <string name="apn">Preferirani APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Postavi min port</string>
+ <string name="set_rtp_max_port">Postaviti max port</string>
+ <string name="set_buffer_size">Postavi veličinu međuspremnika</string>
+ <string name="set_apn">Odaberite željeni APN</string>
+ <string name="setting">Postavke</string>
+ <string name="server_timeout_title">"Isteklo vremensko ograničenje poslužitelja"</string>
+ <string name="server_timeout_message">"Ponovno se povezati sa poslužiteljem za pokretanje videozapisa?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Povezivanje nije uspjelo, ponovno povezivanje sa %1$d\u2026"</string>
+ <string name="media_controller_live">Uživo</string>
+ <string name="media_controller_playing">Reproduciranje</string>
+ <string name="media_controller_connecting">Spajanje\u2026</string>
+ <string name="bookmark_add">"Dodaj oznaku"</string>
+ <string name="bookmark_display">"Pokaži oznake"</string>
+ <string name="bookmark_empty">"Nema oznake"</string>
+ <string name="bookmark_exist">"Oznaka već postoji"</string>
+ <string name="bookmark_add_success">"Oznaka dodana"</string>
+ <string name="bookmark_list">"Oznake"</string>
+ <string name="bookmark_title">"Naslov"</string>
+ <string name="bookmark_location">"Lokacija"</string>
+ <string name="delete_all">"Izbriši sve"</string>
+ <string name="default_title">"Zadani naslov"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Više slika</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nije moguće isključiti zvuk: videozapis nije podržan</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nema instaliranih aplikacija karata za prikaz lokacije.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bass ubrzanje</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Zvučni efekti</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Priključite slušalice za ove efekte.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Oprostite, ovaj video ne može biti izrezan</string>
+ <string name="no_permission_for_drm">Žao nam je, datoteke zaštićene DRM-om se nemogu dijeliti</string>
+ <string name="drm_license_info">Informacije DRM licence</string>
+</resources>
diff --git a/res/values-hu/cm_strings.xml b/res/values-hu/cm_strings.xml
new file mode 100644
index 000000000..111aa4d58
--- /dev/null
+++ b/res/values-hu/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Felvétel ideje</string>
+</resources>
diff --git a/res/values-hu/codeaurora_strings.xml b/res/values-hu/codeaurora_strings.xml
new file mode 100644
index 000000000..11b865ffa
--- /dev/null
+++ b/res/values-hu/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Lépés</string>
+ <string name="step_option_desc">Gyors előre-/hátralépés testreszabása</string>
+ <string name="setp_option_three_second">3 másodperc</string>
+ <string name="setp_option_six_second">6 másodperc</string>
+ <string name="loop">"Ismétlés"</string>
+ <string name="single">"Egyszerű"</string>
+ <string name="stereo">"Sztereó"</string>
+ <string name="speaker_on">Hangszóró BE</string>
+ <string name="speaker_off">Hangszóró KI</string>
+ <string name="speaker_need_headset">Ezen funkció használatához csatlakoztasson fejhallgatót.</string>
+ <string name="single_track">"Egyetlen szám"</string>
+ <string name="input_url">"URL megadása"</string>
+ <string name="streaming_settings">"Műsorszórás beállításai"</string>
+ <string name="next">"Következő"</string>
+ <string name="previous">"Előző"</string>
+ <string name="buffer_size">Bufferméret</string>
+ <string name="apn">Előnyben részesített APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Min port beállítása</string>
+ <string name="set_rtp_max_port">Max port beállítása</string>
+ <string name="set_buffer_size">Pufferméret beállítása</string>
+ <string name="set_apn">Válassza ki a kívánt APN-t</string>
+ <string name="setting">Beállítások</string>
+ <string name="server_timeout_title">"Kiszolgálói időtúllépés"</string>
+ <string name="server_timeout_message">"Újracsatlakozzon a szerverhez a videó lejátszásához?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Sikertelen csatlakozás, újracsatlakozási kísérlet a következőhöz: %1$d\u2026"</string>
+ <string name="media_controller_live">Élő</string>
+ <string name="media_controller_playing">Lejátszás</string>
+ <string name="media_controller_connecting">Csatlakozás\u2026</string>
+ <string name="bookmark_add">"Könyvjelző hozzáadása"</string>
+ <string name="bookmark_display">"Könyvjelzők megjelenítése"</string>
+ <string name="bookmark_empty">"Nincs könyvjelző"</string>
+ <string name="bookmark_exist">"Könyvjelző már létezik"</string>
+ <string name="bookmark_add_success">"Könyvjelző hozzáadva"</string>
+ <string name="bookmark_list">"Könyvjelzők"</string>
+ <string name="bookmark_title">"Név"</string>
+ <string name="bookmark_location">"Hely"</string>
+ <string name="delete_all">"Összes törlése"</string>
+ <string name="default_title">"Alapértelmezett név"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">További képek</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nem némítható: videó nem támogatott</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nincs telepítve térkép alkalmazás a hely megjelenítéséhez.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Mélyhang kiemelése</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D hatás</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Hangeffektek</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Csatlakoztassa a fejhallgatót az effektek használatához.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Sajnáljuk, de ez a videófájl nem vágható</string>
+ <string name="no_permission_for_drm">Sajnáljuk, DRM védett fájlok nem oszthatók meg</string>
+ <string name="drm_license_info">DRM liszensz információ</string>
+</resources>
diff --git a/res/values-hy-rAM/cm_strings.xml b/res/values-hy-rAM/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-hy-rAM/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-hy-rAM/codeaurora_strings.xml b/res/values-hy-rAM/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-hy-rAM/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-in/cm_strings.xml b/res/values-in/cm_strings.xml
new file mode 100644
index 000000000..5888fef47
--- /dev/null
+++ b/res/values-in/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Catatan waktu</string>
+</resources>
diff --git a/res/values-in/codeaurora_strings.xml b/res/values-in/codeaurora_strings.xml
new file mode 100644
index 000000000..d8068f20b
--- /dev/null
+++ b/res/values-in/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Langkah</string>
+ <string name="step_option_desc">Sesuaikan tahap maju cepat/mundur</string>
+ <string name="setp_option_three_second">3 detik</string>
+ <string name="setp_option_six_second">6 detik</string>
+ <string name="loop">"Ulang"</string>
+ <string name="single">"Tunggal"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Speaker ON</string>
+ <string name="speaker_off">Speaker OFF</string>
+ <string name="speaker_need_headset">Pasang headphone untuk menggunakan fitur ini.</string>
+ <string name="single_track">"Trek tunggal"</string>
+ <string name="input_url">"Masukkan URL"</string>
+ <string name="streaming_settings">"Pengaturan streaming"</string>
+ <string name="next">"Berikutnya"</string>
+ <string name="previous">"Sebelumnya"</string>
+ <string name="buffer_size">Ukuran buffer</string>
+ <string name="apn">Pilihan APN</string>
+ <string name="rtp_min_port">Port min</string>
+ <string name="rtp_max_port">Port maks</string>
+ <string name="set_rtp_min_port">Atur port min</string>
+ <string name="set_rtp_max_port">Atur port maks</string>
+ <string name="set_buffer_size">Atur ukuran buffer</string>
+ <string name="set_apn">Pilih pilihan APN</string>
+ <string name="setting">Pengaturan</string>
+ <string name="server_timeout_title">"Batas waktu server"</string>
+ <string name="server_timeout_message">"Menyambung ulang ke server untuk memutar video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Koneksi gagal, mencoba untuk menyambung ulang ke %1$d\u2026"</string>
+ <string name="media_controller_live">Langsung</string>
+ <string name="media_controller_playing">Memutar</string>
+ <string name="media_controller_connecting">Menyambungkan\u2026</string>
+ <string name="bookmark_add">"Tambah ke bookmark"</string>
+ <string name="bookmark_display">"Tampilkan bookmark"</string>
+ <string name="bookmark_empty">"Tidak ada bookmark"</string>
+ <string name="bookmark_exist">"Bookmark sudah ada"</string>
+ <string name="bookmark_add_success">"Bookmark ditambahkan"</string>
+ <string name="bookmark_list">"Bookmark"</string>
+ <string name="bookmark_title">"Judul"</string>
+ <string name="bookmark_location">"Lokasi"</string>
+ <string name="delete_all">"Hapus semua"</string>
+ <string name="default_title">"Judul standar"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Lebih banyak gambar</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Tidak bisa mendiamkan : video tidak didukung</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Tidak ada aplikasi peta yang dipasang untuk menunjukkan lokasi.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Peningkatan bass</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efek 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efek audio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Pasang headphone untuk efek ini.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Maaf, berkas video ini tidak dapat dipotong</string>
+</resources>
diff --git a/res/values-is-rIS/cm_strings.xml b/res/values-is-rIS/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-is-rIS/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-is-rIS/codeaurora_strings.xml b/res/values-is-rIS/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-is-rIS/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-it/cm_strings.xml b/res/values-it/cm_strings.xml
new file mode 100644
index 000000000..6b0c1af60
--- /dev/null
+++ b/res/values-it/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tempo di ripresa</string>
+</resources>
diff --git a/res/values-it/codeaurora_strings.xml b/res/values-it/codeaurora_strings.xml
new file mode 100644
index 000000000..0e3ad65e3
--- /dev/null
+++ b/res/values-it/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Passo</string>
+ <string name="step_option_desc">Personalizza l\'avanzamento/riavvolgimento rapido</string>
+ <string name="setp_option_three_second">3 secondi</string>
+ <string name="setp_option_six_second">6 secondi</string>
+ <string name="loop">"Ripeti"</string>
+ <string name="single">"Singolo"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Altoparlante ON</string>
+ <string name="speaker_off">Altoparlante OFF</string>
+ <string name="speaker_need_headset">Inserisci gli auricolari per utilizzare questa funzionalità.</string>
+ <string name="single_track">"Traccia singola"</string>
+ <string name="input_url">"Inserisci URL"</string>
+ <string name="streaming_settings">"Impostazioni streaming"</string>
+ <string name="next">"Successivo"</string>
+ <string name="previous">"Precedente"</string>
+ <string name="buffer_size">Dimensione buffer</string>
+ <string name="apn">APN preferito</string>
+ <string name="rtp_min_port">Porta min</string>
+ <string name="rtp_max_port">Porta max</string>
+ <string name="set_rtp_min_port">Imposta porta min</string>
+ <string name="set_rtp_max_port">Imposta porta max</string>
+ <string name="set_buffer_size">Imposta dimensione del buffer</string>
+ <string name="set_apn">Imposta APN preferito</string>
+ <string name="setting">Impostazioni</string>
+ <string name="server_timeout_title">"Timeout del server"</string>
+ <string name="server_timeout_message">"Riconnettersi al server per riprodurre il video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Connessione fallita, provando a riconnettersi a %1$d\u2026"</string>
+ <string name="media_controller_live">Dal vivo</string>
+ <string name="media_controller_playing">In riproduzione</string>
+ <string name="media_controller_connecting">Connessione\u2026</string>
+ <string name="bookmark_add">"Aggiungi segnalibro"</string>
+ <string name="bookmark_display">"Visualizza segnalibri"</string>
+ <string name="bookmark_empty">"Nessun segnalibro"</string>
+ <string name="bookmark_exist">"Il segnalibro esiste già"</string>
+ <string name="bookmark_add_success">"Segnalibro aggiunto"</string>
+ <string name="bookmark_list">"Segnalibri"</string>
+ <string name="bookmark_title">"Titolo"</string>
+ <string name="bookmark_location">"Posizione"</string>
+ <string name="delete_all">"Elimina tutto"</string>
+ <string name="default_title">"Titolo predefinito"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Altre immagini</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Impossibile disattivare l\'audio: video non supportato</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Non non c\'è nessuna app mappe installata per mostrare la posizione.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplificazione bassi</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Effetto 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Effetti audio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Collega le cuffie per questi effetti.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Questo file video non può essere tagliato</string>
+ <string name="no_permission_for_drm">Spiacente, i file protetti da DRM non possono essere condivisi</string>
+ <string name="drm_license_info">Info licenza DRM</string>
+</resources>
diff --git a/res/values-iw/cm_strings.xml b/res/values-iw/cm_strings.xml
new file mode 100644
index 000000000..43eb07d04
--- /dev/null
+++ b/res/values-iw/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">זמן הקלטה</string>
+</resources>
diff --git a/res/values-iw/codeaurora_strings.xml b/res/values-iw/codeaurora_strings.xml
new file mode 100644
index 000000000..822fac8ce
--- /dev/null
+++ b/res/values-iw/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">דילוג</string>
+ <string name="step_option_desc">התאם אישית דילוג מהיר קדימה/אחורה</string>
+ <string name="setp_option_three_second">3 שניות</string>
+ <string name="setp_option_six_second">6 שניות</string>
+ <string name="loop">"לולאה"</string>
+ <string name="single">"יחיד"</string>
+ <string name="stereo">"סטריאו"</string>
+ <string name="speaker_on">רמקול פעיל</string>
+ <string name="speaker_off">רמקול כבוי</string>
+ <string name="speaker_need_headset">חבר אוזניות כדי להשתמש בתכונה זו.</string>
+ <string name="single_track">"מסלול יחיד"</string>
+ <string name="input_url">"הזן כתובת URL"</string>
+ <string name="streaming_settings">"הגדרות שידור"</string>
+ <string name="next">"הבא"</string>
+ <string name="previous">"הקודם"</string>
+ <string name="buffer_size">גודל המאגר</string>
+ <string name="apn">APN מועדף</string>
+ <string name="rtp_min_port">פורט מינימאלי</string>
+ <string name="rtp_max_port">פורט מקסימלי</string>
+ <string name="set_rtp_min_port">הגדר פורט מינימלי</string>
+ <string name="set_rtp_max_port">נגדר פורט מקסימלי</string>
+ <string name="set_buffer_size">הגדר גודל המאגר</string>
+ <string name="set_apn">בחר APN מועדף</string>
+ <string name="setting">הגדרות</string>
+ <string name="server_timeout_title">"זמן חכייה לשרת"</string>
+ <string name="server_timeout_message">"להתחבר מחדש לשרת כדי להפעיל את הווידאו?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"החיבור נכשל, מנסה להתחבר מחדש ל- %1$d\u2026"</string>
+ <string name="media_controller_live">חי</string>
+ <string name="media_controller_playing">מנגן</string>
+ <string name="media_controller_connecting">מתחבר\u2026</string>
+ <string name="bookmark_add">"הוסף סימניה"</string>
+ <string name="bookmark_display">"הצג סימניות"</string>
+ <string name="bookmark_empty">"אין סימניות"</string>
+ <string name="bookmark_exist">"סימניה כבר קיימת"</string>
+ <string name="bookmark_add_success">"סימניה נוספה"</string>
+ <string name="bookmark_list">"סימניות"</string>
+ <string name="bookmark_title">"כותרת"</string>
+ <string name="bookmark_location">"מיקום"</string>
+ <string name="delete_all">"מחק הכל"</string>
+ <string name="default_title">"כותרת ברירת המחדל"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">תמונות נוספות</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">לא ניתן להשתיק: וידאו לא נתמך</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">אין אף יישום \"מפות\" כדי להראות את המיקום בעזרתו.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">הגברת בס</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">אפקט 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">אפקטי שמע</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">חבר אוזניות לאפקטים אלה.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">סליחה, קובץ וידאו זה לא יכול להיגזר</string>
+ <string name="no_permission_for_drm">סליחה, לא ניתן לשתף קבצי DRM מוגנים</string>
+ <string name="drm_license_info">פרטי רישיון DRM</string>
+</resources>
diff --git a/res/values-ja/cm_strings.xml b/res/values-ja/cm_strings.xml
new file mode 100644
index 000000000..6c011c400
--- /dev/null
+++ b/res/values-ja/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">録画時間</string>
+</resources>
diff --git a/res/values-ja/codeaurora_strings.xml b/res/values-ja/codeaurora_strings.xml
new file mode 100644
index 000000000..840d5b0af
--- /dev/null
+++ b/res/values-ja/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">間隔</string>
+ <string name="step_option_desc">早送り/巻き戻しのステップをカスタマイズする</string>
+ <string name="setp_option_three_second">3秒</string>
+ <string name="setp_option_six_second">6秒</string>
+ <string name="loop">"ループ"</string>
+ <string name="single">"シングル"</string>
+ <string name="stereo">"ステレオ"</string>
+ <string name="speaker_on">スピーカーON</string>
+ <string name="speaker_off">スピーカーOFF</string>
+ <string name="speaker_need_headset">この機能を使用するにはヘッドホンを接続してください。</string>
+ <string name="single_track">"シングルトラック"</string>
+ <string name="input_url">"URLを入力"</string>
+ <string name="streaming_settings">"ストリーミングの設定"</string>
+ <string name="next">"次へ"</string>
+ <string name="previous">"前へ"</string>
+ <string name="buffer_size">バッファサイズ</string>
+ <string name="apn">優先APN</string>
+ <string name="rtp_min_port">最小ポート</string>
+ <string name="rtp_max_port">最大ポート</string>
+ <string name="set_rtp_min_port">最小ポートを設定</string>
+ <string name="set_rtp_max_port">最大ポートを設定</string>
+ <string name="set_buffer_size">バッファサイズを設定</string>
+ <string name="set_apn">優先APNを選択</string>
+ <string name="setting">設定</string>
+ <string name="server_timeout_title">"サーバーのタイムアウト"</string>
+ <string name="server_timeout_message">"動画を再生するためにサーバーに再接続しますか?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"接続できませんでした。%1$dに再接続を試みています\u2026"</string>
+ <string name="media_controller_live">ライブ</string>
+ <string name="media_controller_playing">再生中</string>
+ <string name="media_controller_connecting">接続中\u2026</string>
+ <string name="bookmark_add">"ブックマークを追加"</string>
+ <string name="bookmark_display">"ブックマークを表示"</string>
+ <string name="bookmark_empty">"ブックマークがありません"</string>
+ <string name="bookmark_exist">"ブックマークが既に存在しています"</string>
+ <string name="bookmark_add_success">"ブックマークを追加しました"</string>
+ <string name="bookmark_list">"ブックマーク"</string>
+ <string name="bookmark_title">"タイトル"</string>
+ <string name="bookmark_location">"場所"</string>
+ <string name="delete_all">"すべて削除"</string>
+ <string name="default_title">"デフォルトのタイトル"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">他の画像</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">ミュートにできません: 動画がサポートされていません</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">位置情報を表示するマップアプリがインストールされていません。</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">バス\nブースト</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D効果</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">オーディオ効果</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">これらの効果を使用するにはヘッドホンを接続してください。</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">申し訳ありませんが、このビデオファイルはトリミングできません</string>
+ <string name="no_permission_for_drm">申し訳ありませんが、DRMで保護されたファイルは共有できません</string>
+ <string name="drm_license_info">DRMライセンス情報</string>
+</resources>
diff --git a/res/values-ka-rGE/cm_strings.xml b/res/values-ka-rGE/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ka-rGE/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ka-rGE/codeaurora_strings.xml b/res/values-ka-rGE/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ka-rGE/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-kk-rKZ/cm_strings.xml b/res/values-kk-rKZ/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-kk-rKZ/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-kk-rKZ/codeaurora_strings.xml b/res/values-kk-rKZ/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-kk-rKZ/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-km-rKH/cm_strings.xml b/res/values-km-rKH/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-km-rKH/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-km-rKH/codeaurora_strings.xml b/res/values-km-rKH/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-km-rKH/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-kn-rIN/cm_strings.xml b/res/values-kn-rIN/cm_strings.xml
new file mode 100644
index 000000000..10e289778
--- /dev/null
+++ b/res/values-kn-rIN/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">ರಿಕಾರ್ಡ್ ಸಮಯ</string>
+</resources>
diff --git a/res/values-kn-rIN/codeaurora_strings.xml b/res/values-kn-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..9f71db3e5
--- /dev/null
+++ b/res/values-kn-rIN/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">ಹಂತ</string>
+ <string name="step_option_desc">ಫಾಸ್ಟ್ ಫಾರ್ವರ್ಡ್/ರಿವೈಂಡ್ ಹಂತವನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ</string>
+ <string name="setp_option_three_second">3 ಸೆಕೆಂಡ್‍ಗಳು</string>
+ <string name="setp_option_six_second">6 ಸೆಕೆಂಡ್‍ಗಳು</string>
+ <string name="loop">"ಸುತ್ತುಹಾಕು"</string>
+ <string name="single">"ಏಕ"</string>
+ <string name="stereo">"ಸ್ಟೀರಿಯೋ"</string>
+ <string name="speaker_on">ಧ್ವನಿವರ್ಧಕ ಆನ್</string>
+ <string name="speaker_off">ಧ್ವನಿವರ್ಧಕ ಆಫ್</string>
+ <string name="speaker_need_headset">ಈ ವೈಷಿಷ್ಟ್ಯವನ್ನು ಉಪಯೋಗಿಸಲು ಹೇಡ್‍ಫೋನ್ಸ್ ಪ್ಲಗ್ ಇನ್ ಮಾಡಿ.</string>
+ <string name="single_track">"ಏಕೈಕ ಟ್ರಾಕ್"</string>
+ <string name="input_url">"URL ಬರೆಯಿರಿ"</string>
+ <string name="streaming_settings">"ಸ್ಟ್ರೀಮಿಂಗ್ ಸೆಟ್ಟಿಂಗ್ಸ್"</string>
+ <string name="next">"ಮುಂದಿನ"</string>
+ <string name="previous">"ಹಿಂದಿನ"</string>
+ <string name="buffer_size">ಬಫ್ಫರ್ ಗಾತ್ರ</string>
+ <string name="apn">ಆದ್ಯತೆಯ ಎಪಿಎನ್</string>
+ <string name="rtp_min_port">ಕನಿಷ್ಟ ಪೋರ್ಟ್</string>
+ <string name="rtp_max_port">ಗರಿಷ್ಠ ಪೋರ್ಟ್</string>
+ <string name="set_rtp_min_port">ಕನಿಷ್ಠ ಪೋರ್ಟ್ ಹೊಂದಿಸಿ</string>
+ <string name="set_rtp_max_port">ಗರಿಷ್ಠ ಪೋರ್ಟ್ ಹೊಂದಿಸಿ</string>
+ <string name="set_buffer_size">ಬಫ್ಫರ್ ಗಾತ್ರ ಹೊಂದಿಸಿ</string>
+ <string name="set_apn">ಆದ್ಯತೆಯ ಎ‍ಪಿಎನ್ ಆಯ್ಕೆಮಾಡಿ</string>
+ <string name="setting">ಸೆಟ್ಟಿಂಗ್ಸ್</string>
+ <string name="server_timeout_title">"ಸರ್ವರ್ ಅವಧಿಮುಗಿದಿದೆ"</string>
+ <string name="server_timeout_message">"ವೀಡಿಯೋ ಪ್ಲೇಮಾಡಲು ಸರ್ವರ್‍ಗೆ ಮರುಸಂಪರ್ಕಿಸುವುದೇ?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"ಸಂಪರ್ಕ ವಿಫಲವಾಗಿದೆ. %1$d\u2026 ಗೆ ಮರುಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="media_controller_live">ಲೈವ್</string>
+ <string name="media_controller_playing">ಪ್ಲೇ ಆಗುತ್ತಿದೆ</string>
+ <string name="media_controller_connecting">ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ\u2026</string>
+ <string name="bookmark_add">"ಬುಕ್‍ಮಾರ್ಕ್ ಸೇರಿಸು"</string>
+ <string name="bookmark_display">"ಬುಕ್‍ಮಾರ್ಕ್ ತೋರಿಸು"</string>
+ <string name="bookmark_empty">"ಯಾವುದೇ ಬುಕ್‍ಮಾರ್ಕ್‍ಗಳಿಲ್ಲ"</string>
+ <string name="bookmark_exist">"ಬುಕ್‍ಮಾರ್ಕ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"</string>
+ <string name="bookmark_add_success">"ಬುಕ್‍ಮಾರ್ಕ್ ಸೇರಿಸಲಾಗಿದೆ"</string>
+ <string name="bookmark_list">"ಬುಕ್‍ಮಾರ್ಕ್‍ಗಳು"</string>
+ <string name="bookmark_title">"ಶೀರ್ಷಿಕೆ"</string>
+ <string name="bookmark_location">"ಸ್ಥಳ"</string>
+ <string name="delete_all">"ಎಲ್ಲವನ್ನೂ ಅಳಿಸು"</string>
+ <string name="default_title">"ಡೀಫಾಲ್ಟ್ ಶೀರ್ಷಿಕೆ"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">ಮತ್ತಷ್ಟು ಚಿತ್ರಗಳು</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">ಮೌನಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ : ವೀಡಿಯೋ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">ಸ್ಥಳವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಯಾವುದೇ ನಕ್ಷೆ ಆಪ್ ಸ್ಥಾಪಿತವಾಗಿಲ್ಲ.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">ಬಾಸ್ ವರ್ಧನೆ</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D ಪ್ರಭಾವ</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">ಆಡಿಯೋ ಪ್ರಭಾವ</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">ಈ ಪ್ರಭಾವಗಳಿಗಾಗಿ ಹೆಡ್‍ಫೋನ್ಸನ್ನು ಪ್ಲಗ್ ಇನ್ ಮಾಡಿ.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon ಆಡಿಯೋ+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">ಕ್ಷಮಿಸಿ, ಈ ವೀಡಿಯೋ ಕಡತವನ್ನು ಕತ್ತರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</string>
+ <string name="no_permission_for_drm">ಕ್ಷಮಿಸಿ. DRM ಸಂರಕ್ಷಿತ ಕಡತಗಳನ್ನು ಹಂಚಲು ಸಾಧ್ಯವಿಲ್ಲ</string>
+ <string name="drm_license_info">DRM ಪರವಾನಗಿ ಮಾಹಿತಿ</string>
+</resources>
diff --git a/res/values-ko/cm_strings.xml b/res/values-ko/cm_strings.xml
new file mode 100644
index 000000000..657c35993
--- /dev/null
+++ b/res/values-ko/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">녹화 시간</string>
+</resources>
diff --git a/res/values-ko/codeaurora_strings.xml b/res/values-ko/codeaurora_strings.xml
new file mode 100644
index 000000000..fdad872d9
--- /dev/null
+++ b/res/values-ko/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">간격</string>
+ <string name="step_option_desc">빨리 감기/되감기 간격 사용자 지정</string>
+ <string name="setp_option_three_second">3초</string>
+ <string name="setp_option_six_second">6초</string>
+ <string name="loop">"반복"</string>
+ <string name="single">"단일"</string>
+ <string name="stereo">"스테레오"</string>
+ <string name="speaker_on">스피커 켬</string>
+ <string name="speaker_off">스피커 끔</string>
+ <string name="speaker_need_headset">이 기능을 사용하려면 헤드폰을 연결하세요.</string>
+ <string name="single_track">"단일 트랙"</string>
+ <string name="input_url">"URL 입력"</string>
+ <string name="streaming_settings">"스트리밍 설정"</string>
+ <string name="next">"다음"</string>
+ <string name="previous">"이전"</string>
+ <string name="buffer_size">버퍼 크기</string>
+ <string name="apn">선호 APN</string>
+ <string name="rtp_min_port">최저 포트</string>
+ <string name="rtp_max_port">최고 포트</string>
+ <string name="set_rtp_min_port">최저 포트 설정</string>
+ <string name="set_rtp_max_port">최고 포트 설정</string>
+ <string name="set_buffer_size">버퍼 크기 설정</string>
+ <string name="set_apn">선호 APN 설정</string>
+ <string name="setting">설정</string>
+ <string name="server_timeout_title">"서버 시간 초과"</string>
+ <string name="server_timeout_message">"서버에 다시 접속하여 동영상을 재생할까요?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"연결 실패, %1$d(으)로 다시 연결 중\u2026"</string>
+ <string name="media_controller_live">라이브</string>
+ <string name="media_controller_playing">재생 중</string>
+ <string name="media_controller_connecting">연결 중\u2026</string>
+ <string name="bookmark_add">"즐겨찾기에 추가"</string>
+ <string name="bookmark_display">"즐겨찾기 보기"</string>
+ <string name="bookmark_empty">"즐겨찾기 없음"</string>
+ <string name="bookmark_exist">"즐겨찾기에 이미 존재합니다"</string>
+ <string name="bookmark_add_success">"즐겨찾기에 추가되었습니다"</string>
+ <string name="bookmark_list">"즐겨찾기"</string>
+ <string name="bookmark_title">"제목"</string>
+ <string name="bookmark_location">"위치"</string>
+ <string name="delete_all">"모두 삭제"</string>
+ <string name="default_title">"기본 제목"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">더 많은 이미지</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">음소거할 수 없음: 지원되지 않는 동영상</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">위치를 표시할 지도 앱이 설치되어 있지 않습니다.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">베이스 부스트</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D 효과</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">음향 효과</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">음향 효과를 사용하려면 헤드폰을 연결하세요.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">죄송합니다. 이 동영상은 잘라낼 수 없습니다.</string>
+ <string name="no_permission_for_drm">죄송합니다. DRM으로 보호된 파일은 공유할 수 없습니다.</string>
+ <string name="drm_license_info">DRM 라이선스 정보</string>
+</resources>
diff --git a/res/values-ku/cm_strings.xml b/res/values-ku/cm_strings.xml
new file mode 100644
index 000000000..1cac2553d
--- /dev/null
+++ b/res/values-ku/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">تۆمارکردنی کات</string>
+</resources>
diff --git a/res/values-ku/codeaurora_strings.xml b/res/values-ku/codeaurora_strings.xml
new file mode 100644
index 000000000..dacd21971
--- /dev/null
+++ b/res/values-ku/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">هەنگاو</string>
+ <string name="step_option_desc">بەکەسیکردنی پلەی خێراییی پێشخستن/دواخستن</string>
+ <string name="setp_option_three_second">3 چرکە</string>
+ <string name="setp_option_six_second">6 چرکە</string>
+ <string name="loop">"كلو"</string>
+ <string name="single">"تاک"</string>
+ <string name="stereo">"stereo"</string>
+ <string name="speaker_on">چالاکردنی بڵندگۆ</string>
+ <string name="speaker_off">لەکارخستنی بڵندگۆ</string>
+ <string name="speaker_need_headset">بیستۆکەکان پێوە بکە بۆ بەکارهێنانی ئەم توانستە.</string>
+ <string name="single_track">"تاکە تراک"</string>
+ <string name="input_url">"ناونیشانی ئینتەرنێتی بنووسە"</string>
+ <string name="streaming_settings">"ڕێکخستنەکانی لێشاو (Stream)"</string>
+ <string name="next">"دواتر"</string>
+ <string name="previous">"پێشتر"</string>
+ <string name="buffer_size">قەبارەی نێوانگر</string>
+ <string name="apn">APNی بەباشزانراو</string>
+ <string name="rtp_min_port">کەمترین دەرگا</string>
+ <string name="rtp_max_port">زۆرترین دەرگا</string>
+ <string name="set_rtp_min_port">کەمترین دەرگا دابنێ</string>
+ <string name="set_rtp_max_port">زۆرترین دەرگا دابنێ</string>
+ <string name="set_buffer_size">قەبارەی نێوانگر دابنێ</string>
+ <string name="set_apn">APNی بەباشزانراو دیاری بکە</string>
+ <string name="setting">ڕێکخستنه‌کان</string>
+ <string name="server_timeout_title">"وچانی ڕاژەکار"</string>
+ <string name="server_timeout_message">"ببەستێتەوە بە ڕاژەکارەوە بۆ لێدانی ڤیدیۆکە؟"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"بەستنەوە سەرکەوتوو نەبوو، هەوڵدان بۆ بەستنەوە بە %1$d\u2026"</string>
+ <string name="media_controller_live">ڕاستەوخۆ</string>
+ <string name="media_controller_playing">لێدان</string>
+ <string name="media_controller_connecting">بەستنەوە\u2026</string>
+ <string name="bookmark_add">"نیشانەکردنی وێبگە"</string>
+ <string name="bookmark_display">"پیشاندانی وێبگە نیشانەکراوەکان"</string>
+ <string name="bookmark_empty">"وێبگەی نیشانەکراو نییە"</string>
+ <string name="bookmark_exist">"وێبگەی نیشانەکراو پێشتر هەیە"</string>
+ <string name="bookmark_add_success">"وێبگەکە نیشانە کرا"</string>
+ <string name="bookmark_list">"وێبگە نیشانەکراوەکان"</string>
+ <string name="bookmark_title">"سەردێڕ"</string>
+ <string name="bookmark_location">"شوێن"</string>
+ <string name="delete_all">"سڕینەوەی هەموو"</string>
+ <string name="default_title">"سەردێڕی بنەڕەت"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">وێنەی زیاتر</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">ناتوانێت کپ بکرێت : ڤیدیۆ پشتگیری ناکرێت</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">هیچ بەرنامەیەکی نەخشە نیە بۆ پیشاندانی ناوچە.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">بەهێزکردنی بنچینەی دەنگ</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">کاریگەریی 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">کاریگه‌رییەکانی ده‌نگ</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">بیستۆکەکانت پێوە بکە بۆ ئەم کاریگەرییانە.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">بەداخەوە، ئەم پەڕگە ڤیدیۆیییە ناتوانرێت ببڕدرێت</string>
+</resources>
diff --git a/res/values-ku/filtershow_strings.xml b/res/values-ku/filtershow_strings.xml
new file mode 100644
index 000000000..4861d0ec1
--- /dev/null
+++ b/res/values-ku/filtershow_strings.xml
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <string name="title_activity_filter_show">ده‌ستکاری کردنی وێنه‌</string>
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <string name="cannot_load_image">ناتوانێت وێنەکە بار بکات!</string>
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <string name="cannot_edit_original">نه‌توانرا وێنه‌ی بنێڕه‌ت ده‌ستکاریبکرێت</string>
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <string name="setting_wallpaper">دانانی وێنەی سەر ڕوونما</string>
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <string name="download_failure">نه‌توانرا وێنه‌ دابگیرێت.هێڵ ئاماده‌نییه‌.</string>
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <string name="original">ڕەسەن</string>
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <string name="custom_border">تایبەت بە خۆ</string>
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_undo">پاشگەزبوون</string>
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_redo">گه‌ڕانه‌وه‌ بۆ هه‌نگاوی داهاتوو</string>
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <string name="show_imagestate_panel">نیشاندانی کاریگه‌رییه‌ جێبه‌جێکراوه‌کان</string>
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <string name="hide_imagestate_panel">شاردنه‌وه‌ی کاریگه‌رییه‌ جێبه‌جێکراوه‌کان</string>
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <string name="export_image">ناردن</string>
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <string name="print_image">چاپکردن</string>
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <string name="export_flattened">ناردنی وێنه‌ی ته‌خت</string>
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <string name="select_output_settings">وێنه‌ی نێردراو له‌به‌رده‌گیرێته‌وه‌ به‌بێ تۆمار.</string>
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <string name="quality">کوالێتی</string>
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <string name="size">قه‌باره‌</string>
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <string name="x">x</string>
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <string name="menu_settings">ڕێکخستنه‌کان</string>
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="unsaved">چه‌ند گۆڕانێکی پاشه‌که‌وت نه‌کراو هه‌یه‌ بۆ ئه‌م وێنه‌یه‌.</string>
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="save_before_exit">ئه‌ته‌وێ پاشه‌که‌وتی بکه‌یت پێش چوونه‌ده‌ره‌وه‌؟</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_exit">پاشه‌که‌وتکردن و چوونه‌ ده‌ره‌وه‌</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_processing">پرۆسه‌ی پڕ کوالێتی وێنه‌...</string>
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <string name="exit">ده‌رچوون</string>
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <string name="history">ڕێکخستنەوە</string>
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <string name="reset">ڕێکخستنەوە</string>
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <string name="imageState">کاریگه‌ری جێبه‌جێکراو</string>
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <string name="compare_original">بەراوردکردن</string>
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <string name="apply_effect">جێبه‌جێکردن</string>
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <string name="reset_effect">ڕێکخستنەوە</string>
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <string name="aspect">لا</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect1to1_effect">1:1</string>
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to3_effect">4:3</string>
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <string name="aspect3to4_effect">3:4</string>
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to6_effect">4:6</string>
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect5to7_effect">5:7</string>
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <string name="aspect7to5_effect">7:5</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect9to16_effect">16:9</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <string name="aspectNone_effect">هیچیان</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <string name="Fixed">چاره‌سه‌رکراو</string>
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <string name="tinyplanet">ورده‌ هه‌ساره‌</string>
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <string name="exposure" msgid="1229093066434614811">ڕووناکیپێدان</string>
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <string name="sharpness">زبری</string>
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <string name="contrast">کۆنتراست</string>
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <string name="vibrance">وزه‌ ڕه‌نگ</string>
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <string name="saturation">تێرایی</string>
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <string name="bwfilter">کاریگه‌ری BW</string>
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <string name="wbalance">خۆکارانه‌ ڕه‌نگ</string>
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <string name="hue">ڕه‌نگ</string>
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <string name="shadow_recovery">سێبه‌ره‌کان</string>
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <string name="highlight_recovery">به‌رچاوه‌کان</string>
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <string name="curvesRGB">لاری</string>
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <string name="vignette">تۆخی</string>
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_main">شێوە</string>
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_exposure">ڕووناکیپێدان</string>
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_saturation">تێریی ڕەنگ</string>
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_contrast">کۆنتراست</string>
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <string name="vignette_falloff">که‌وته‌ڕه‌نگ</string>
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <string name="redeye">چاوی سوور</string>
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <string name="imageDraw">کێشان</string>
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <string name="straighten" msgid="5217801513491493491">هێزی</string>
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <string name="crop" msgid="5584000454518174632">قرتاندن</string>
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <string name="rotate" msgid="460017689320955494">سووڕاندنەوە</string>
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <string name="mirror">ئاوێنه‌</string>
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <string name="negative">پێچه‌وانه‌</string>
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <string name="none" msgid="3601545724573307541">هیچیان</string>
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <string name="edge">که‌ناری</string>
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <string name="kmeans">پاشکه‌وتوو</string>
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <string name="downsample">خواره‌نمونه‌</string>
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <string name="grad">وه‌رگیراو</string>
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_brightness">ڕۆشنایی</string>
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_contrast">کۆنتراست</string>
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_saturation">تێریی ڕەنگ</string>
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_main">سەرەکی</string>
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_red">سوور</string>
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_yellow">زەرد</string>
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_green">سەوز</string>
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_cyan">شینی ئاسمانی</string>
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_blue">شین</string>
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_magenta">سووری ئەرخەوانی</string>
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_style">شێواز</string>
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <string name="editor_grad_new">نوێ</string>
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <string name="curves_channel_rgb">RGB</string>
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_red">سوور</string>
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_green">سه‌وز</string>
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_blue">شین</string>
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <string name="draw_style">شێواز</string>
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <string name="draw_size">قه‌باره‌</string>
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <string name="draw_hue">ڕه‌نگ</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_saturation">تێریی ڕەنگ</string>
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <string name="draw_value">ڕۆشنایی</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_color">ڕەنگ</string>
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_line">هێله‌کان</string>
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_spatter">دیاریکه‌ره‌کان</string>
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_marker">لیکاوی</string>
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <string name="draw_clear">پاککردنه‌وه‌</string>
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <string name="color_border_size">ئه‌ستووری</string>
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <string name="color_border_corner_size">قه‌باره‌ی سوچه‌کان</string>
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <string name="color_border_color">ڕەنگ</string>
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <string name="color_border_clear">پاککردنه‌وه‌</string>
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <string name="color_pick_select">دیاریکردنی ڕه‌نگی دڵخواز</string>
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <string name="color_pick_title">دیاریکردنی ڕه‌نگ</string>
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <string name="draw_size_title">دیاریکردنی قه‌باره‌</string>
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <string name="draw_size_accept">باشه‌</string>
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_original">ڕەسەن</string>
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_result">ئه‌نجام</string>
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_label">پاشه‌که‌وتکردنی وێنه‌</string>
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_message">پرۆسە...</string>
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <string name="filtershow_save_preset">پاشه‌که‌وتکردنی ئاماده‌کراوی ئێستا</string>
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <string name="filtershow_manage_preset">به‌ڕێوه‌بردنی ئاماده‌کراوی به‌کارهێنه‌ر</string>
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <string name="filtershow_new_preset">ئاماده‌کراوێکی نوێ</string>
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <string name="filtershow_preset_name">ناوی ئاماده‌کراو</string>
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_show_info_panel">زانیاری</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_name">ناوی وێنه‌</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_size">قه‌باره‌ی وێنه‌</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_histogram">مێژوویی</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_exif">داتای EXIF </string>
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_looks">ئاماده‌کراو</string>
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_versions">وه‌شان</string>
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_original">ڕەسەن</string>
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_current">ئێستا</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_model">مۆدێل</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_aperture">دیافراگم</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_focal_length">درێژیی تیشکۆیی</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_iso">ISO</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_subject_distance">ماوه‌ی دێڕ</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_date">ڕۆژی گرتنی وێنه‌که‌</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_f_stop">F وه‌ستان</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_exposure_time">كاتى كەوتنەبەر</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_copyright">مافی له‌به‌رگرتنه‌وه‌</string>
+</resources>
diff --git a/res/values-ku/strings.xml b/res/values-ku/strings.xml
new file mode 100644
index 000000000..91a12b04d
--- /dev/null
+++ b/res/values-ku/strings.xml
@@ -0,0 +1,852 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name">پێشەنگا</string>
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <string name="gadget_title">چوارچێوه‌ی وێنه‌</string>
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <string name="details_ms">%1$02d:%2$02d</string>
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <string name="details_hms">%1$d:%2$02d:%3$02d</string>
+ <!-- Activity label. This might show up in the activity-picker -->
+ <string name="movie_view_label">لێده‌ری ڤیدیۆ</string>
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <string name="loading_video">بارکردنی ڤیدیۆ\u2026</string>
+ <string name="loading_image">کردنه‌وه‌ی وێنه‌\u2026</string>
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <string name="loading_account">کردنه‌وه‌ی هه‌ژمار\u2026</string>
+ <!-- Movie View Resume Playing dialog title -->
+ <string name="resume_playing_title">ڤيديۆكه‌ دەست پێ بكەوە</string>
+ <!-- Movie View Start Playing dialog title -->
+ <string name="resume_playing_message">ڤیدیۆ ده‌ستپێبکاته‌وه‌ له‌ %s ؟ ?</string>
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <string name="resume_playing_resume">ده‌ستپێکردنه‌وه‌</string>
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <string name="loading">ئامادەکردن\u2026</string>
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load">نەتوانى بار بكه‌یت</string>
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load_image">ناتوانی وێنه‌كه‌ باربكه‌یت</string>
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <string name="no_thumbnail">هیچ کورته‌ وێنه‌یه‌ک نییه‌</string>
+ <!-- Movie View Start Playing button "Beginning" -->
+ <string name="resume_playing_restart">دەست پێ بكەوە</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="crop_save_text">باشه‌</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="ok">باشه‌</string>
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <string name="multiface_crop_help">په‌نجه‌ بنێ به‌ ڕوودا بۆ ده‌ستپێکردن.</string>
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <string name="saving_image">پاشه‌که‌وتکردنی وێنه‌\u2026</string>
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <string name="filtershow_saving_image">پاشه‌که‌وتکردنی وێنه‌ بۆ <xliff:g id="album_name">%1$s</xliff:g>\u2026</string>
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <string name="save_error">نه‌توانرا وێنه‌ی بڕدراو پاشه‌که‌وت بکرێت.</string>
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <string name="crop_label">بڕینی وێنه‌</string>
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <string name="trim_label">بڕینی ڤیدیۆ</string>
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <string name="select_image">دیاریکردنی وێنه‌</string>
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <string name="select_video">دیاریکردنی ڤیدیۆ</string>
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <string name="select_item">دیاریکردنی دانه‌یه‌ک</string>
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <string name="select_album">دیاریکردنی ئه‌لبوم</string>
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <string name="select_group">دیاریکردنی گروپ</string>
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <string name="set_image">دانانی وێنە وەکوو</string>
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <string name="set_wallpaper">دانانی وێنەی پشتەوە</string>
+ <!-- Toast/alert after saving wallpaper -->
+ <string name="wallpaper">دانانی دیوارپۆش\u2026</string>
+ <string name="camera_setas_wallpaper">دیوارپۆش</string>
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <string name="delete">سڕینه‌وه‌</string>
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <string name="confirm">دووپاتکردنەوە</string>
+ <string name="cancel">لابردن</string>
+ <string name="share">به‌شداری پێکردن</string>
+ <string name="share_panorama">هاوبەشیکردنی پانۆراما</string>
+ <string name="share_as_photo">هاوبەشیکردن وەکوو وێنە</string>
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <string name="deleted">سڕایەوە</string>
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <string name="undo">پاشگەزبوونەوە</string>
+ <!-- String indicating more actions are available -->
+ <string name="select_all">دیاریکردنی هەموو</string>
+ <string name="deselect_all">دیاری نەکردنی هەموو</string>
+ <string name="slideshow">نیشاندانی سلاید</string>
+ <string name="details">زانیاری زیاتر</string>
+ <string name="details_title">%1$d له‌ %2$d دانه‌:</string>
+ <string name="close">داخستن</string>
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <string name="switch_to_camera">گۆڕین بۆ كامێرا</string>
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <string name="show_on_map">پیشاندانی لەسەر نەخشە</string>
+ <string name="rotate_left">سووڕاندنەوە بۆ چەپ</string>
+ <string name="rotate_right">سووڕاندنەوە بۆ ڕاست</string>
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <string name="no_such_item">نه‌توانرا دانه‌ بدۆزرێته‌وه‌.</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="edit">دەستکاری</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="simple_edit">ده‌ستكاری كرنی سادە</string>
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <string name="process_caching_requests">دەستكاريكردنی داواكارى هەڵگرتن</string>
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <string name="caching_label">هەڵگرتن\u2026</string>
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <string name="crop_action">قرتاندن</string>
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <string name="trim_action">بڕین</string>
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <string name="mute_action">کپکردن</string>
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <string name="set_as">دانان وەکوو</string>
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <string name="video_mute_err">ناتوانیت ڤیدیۆكه‌ بێده‌نگ بكه‌یت</string>
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <string name="video_err">ناتوانرێت ڤیدۆکە لێبدرێت.</string>
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <string name="group_by_location">له‌لایه‌ن شوێنه‌وه‌</string>
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <string name="group_by_time">له‌لایه‌ن كاته‌وه‌</string>
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <string name="group_by_tags">له‌لایه‌ن تاگه‌كانه‌وه‌</string>
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <string name="group_by_faces">له‌لایه‌ن خه‌ڵكه‌وه‌</string>
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <string name="group_by_album">له‌لایه‌ن ئه‌لبومه‌وه‌</string>
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <string name="group_by_size">به‌پێی قه‌باره‌</string>
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <string name="untagged">ئاراسته‌بۆنه‌کراو</string>
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <string name="no_location">شوێن نییه‌</string>
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <string name="no_connectivity">هه‌ندێ شوێن نه‌توانرا بناسرێته‌وه‌ له‌ کاتی کێشه‌کانی هێڵ.</string>
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <string name="sync_album_error">نه‌توانرا وێنه‌ دابگیرێت بۆ ئه‌لبوومه‌که‌. دواتر هه‌وڵبده‌ره‌وه‌.</string>
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <string name="show_images_only">ته‌نها وێنه‌</string>
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <string name="show_videos_only">ته‌نها ڤیدیۆ</string>
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <string name="show_all">وێنه‌ وamp; ڤیدیۆ</string>
+ <!-- Title of the StackView AppWidget -->
+ <string name="appwidget_title">پێشەنگای وێنە</string>
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <string name="appwidget_empty_text">وێنه‌ نییه‌.</string>
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <string name="crop_saved">
+ وێنەی قرتێنراو پاشەکەوت کرا بۆ <xliff:g id="folder_name">%s</xliff:g>.</string>
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <string name="no_albums_alert">هیچ ئه‌لبومێک ئاماده‌ نییه‌.</string>
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <string name="empty_album">0 وێنه‌/ڤیدیۆ ئاماده‌یه‌.</string>
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <string name="picasa_posts">په‌یامه‌کان</string>
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <string name="make_available_offline">کردن بە دەرهێڵ</string>
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <string name="sync_picasa_albums">تازەکردنەوە</string>
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <string name="done">ئه‌نجام درا</string>
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <string name="sequence_in_set">%1$d of %2$d items:</string>
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <string name="title">سەردێڕ</string>
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <string name="description">پێناسه</string>
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="time">کات</string>
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <string name="location">شوێن</string>
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <string name="path">ڕێچکە</string>
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <string name="width">پانی</string>
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <string name="height">بەرزی</string>
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <string name="orientation">ڕووتێکەری</string>
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <string name="duration">ماوه‌</string>
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <string name="mimetype">جۆری MIME</string>
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <string name="file_size">ئەندازە پەڕگە</string>
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <string name="maker">دروستکەر</string>
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <string name="model">مۆدێل</string>
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <string name="flash">فلاش</string>
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <string name="aperture">دیافراگم</string>
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <string name="focal_length">درێژیی تیشکۆیی</string>
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <string name="white_balance">هاوسەنگیی سپی</string>
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="exposure_time">کاتی ڕووناککردنەوە</string>
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <string name="iso">ISO</string>
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <string name="unit_mm">م‌م</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="manual">دەستکارانە</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="auto">خۆکارانه</string>
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <string name="flash_on">فلاش لێدرا</string>
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <string name="flash_off">بێ فلاش</string>
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <string name="unknown">نەزانراو</string>
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <string name="ffx_original">ڕەسەن</string>
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <string name="ffx_vintage">بەپەرۆش</string>
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <string name="ffx_instant">دەستبەجێ</string>
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <string name="ffx_bleach">سپی دەکاتەوە</string>
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <string name="ffx_blue_crush">شین</string>
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <string name="ffx_bw_contrast">B/W</string>
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <string name="ffx_punch">كۆن كردنی كاغه‌ز</string>
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <string name="ffx_x_process">كرداری X</string>
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <string name="ffx_washout">ژاوەژاو</string>
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <string name="ffx_washout_color">Litho</string>
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <string name="try_to_set_local_album_available_offline">
+ ئەم بڕگەیە له‌ ناوخۆدا پاشەکەوتکراوە و به‌بێ هێڵیش به‌رده‌سته‌.</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <string name="set_label_all_albums">هه‌موو ئه‌لبومه‌كانم</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <string name="set_label_local_albums">شوێنی ئه‌لبومه‌كان</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <string name="set_label_mtp_devices">ئامێری MTP</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <string name="set_label_picasa_albums">Picasa albums</string>
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="free_space_format"><xliff:g id="bytes">%s</xliff:g> free</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_below"><xliff:g id="size">%1$s</xliff:g> or below</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_above"><xliff:g id="size">%1$s</xliff:g> or above</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_between"><xliff:g id="min_size">%1$s</xliff:g> to <xliff:g id="max_size">%2$s</xliff:g></string>
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <string name="Import">هێنان</string>
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <string name="import_complete">به‌سه‌ركه‌وتوی هێندرا</string>
+ <string name="import_fail">هێنان سه‌ركه‌وتوو نه‌بوو</string>
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <string name="camera_connected">كامێرای پەیوەندیدار</string>
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <string name="camera_disconnected">كامێرای په‌یوه‌ندیدار.</string>
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <string name="click_import">دەست لێدان لێرە بۆ هێنان</string>
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <string name="widget_type_album">ئه‌لبومێك هه‌ڵبژێره‌</string>
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <string name="widget_type_shuffle">تێکەڵکردنی هه‌موو وێنه‌كان</string>
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <string name="widget_type_photo">وێنه‌یه‌ك هه‌ڵبژێره‌</string>
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <string name="widget_type">هەڵبژاردنی وێنه‌</string>
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <string name="slideshow_dream_name">نیشانده‌ری</string>
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="albums">ئەلبوم</string>
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="times">کەڕەت</string>
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="locations">شوێن</string>
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="people">خەڵک</string>
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="tags">تاگەکان</string>
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <string name="group_by">له‌لایه‌ن گروپه‌وه‌</string>
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <string name="settings">ڕێکخستنه‌کان</string>
+ <!-- The title of menu item where user can add a new account -->
+ <string name="add_account">دانانی هەژمار</string>
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <string name="folder_camera">کامێرا</string>
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <string name="folder_download">داگرتن</string>
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <string name="folder_edited_online_photos">وێنه‌ی سه‌رهێڵ دەستکاری کراوە</string>
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <string name="folder_imported">دانان</string>
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <string name="folder_screenshot">وێنەی شاشە</string>
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <string name="help">یارمەتی</string>
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <string name="no_external_storage_title">هیچ هه‌ڵنه‌گیراوه‌</string>
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <string name="no_external_storage">هیچ هه‌ڵگیراوێكی ده‌ره‌كی نییه‌</string>
+ <!-- Label for album filmstrip button -->
+ <string name="switch_photo_filmstrip">پیشاندانی بە شێوەی ئەڵقەی فیلم</string>
+ <!-- Label for album grid button -->
+ <string name="switch_photo_grid">پیشاندانی خانه‌یی</string>
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <string name="switch_photo_fullscreen">بینینی پڕ شاشە</string>
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <string name="trimming">زیانبەخش</string>
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <string name="muting">بێ دەنگ</string>
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <string name="please_wait">تکایه‌ چاوه‌ڕێ بکە</string>
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <string name="save_into">Saving video to <xliff:g id="album_name">%1$s</xliff:g> \u2026</string>
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <string name="trim_too_short">ناتوانیت هه‌ڵی بگریت:ڤیدیۆی دیاری كراو زۆر كورته‌</string>
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <string name="pano_progress_text">نواندنی پانۆرامایی</string>
+ <!-- The label on the button that will save an edited image -->
+ <string name="save" msgid="8140440041190264400">پاشەکەوتکردن</string>
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <string name="ingest_scanning" msgid="2048262851775139720">پشكنینی ناوه‌ڕۆك...</string>
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <string name="ingest_sorting" msgid="624687230903648118">جیاكردنه‌وه‌...</string>
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <string name="ingest_scanning_done">پشكنین ته‌واو بوو</string>
+ <!-- Status message shown when content from an external camera is being imported -->
+ <string name="ingest_importing">دانان...</string>
+ <!-- Status message shown when there is no content available to be imported -->
+ <string name="ingest_empty_device">هيچ ناوەرۆكى بەردەست بۆ دانان لەسەر ئەمە ئامراز نيە.</string>
+ <!-- Status message shown when there is no MTP device connected -->
+ <string name="ingest_no_device">هیچ ئامێرێكی MTP په‌یوه‌ست نییه‌</string>
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <string name="camera_error_title">هەڵەی کامێرا</string>
+ <!-- message for the dialog showing the error of camera hardware -->
+ <string name="cannot_connect_camera">ناتوانێت ببەسترێتەوە بە کامێراوە.</string>
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <string name="camera_disabled">کامێرا بە هۆکاری پلانی پاراستنەوە نەتوانا کراوە.</string>
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <string name="camera_label">کامێرا</string>
+ <!-- alert to the user to wait for some operation to complete -->
+ <string name="wait">تکایە چاوەڕێ بکە\u2026</string>
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <string name="no_storage" product="nosdcard">ده‌رکردنی بیرگه‌ی USB پێش به‌کارهێنانی کامێرا.</string>
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <string name="no_storage" product="default">پێش بەکارهێنانی کامێرا بیرگەی دەرەکی تێبخە.</string>
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <string name="preparing_sd" product="nosdcard">ئاماده‌کردنی بیرگه‌ی USB\u2026</string>
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <string name="preparing_sd" product="default">ئامادەکردنی بیرگەی دەرەکی\u2026</string>
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <string name="access_sd_fail" product="nosdcard">ده‌سته‌ڵات نه‌شكێنرایه‌وه‌ به‌سه‌ر بیرگه‌ی USB.</string>
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <string name="access_sd_fail" product="default">نەتوانرا دەست بگەیەنێتە بیرگەی دەرەکی.</string>
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <string name="review_cancel">لابردن</string>
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <string name="review_ok">ته‌واوبوو</string>
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <string name="time_lapse_title">تۆمارکردنی تێپەڕبوونی کات</string>
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <string name="pref_camera_id_title">کامێرا هەڵبژێرە</string>
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_back">دواوە</string>
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_front">پێشەوە</string>
+ <!-- Settings screen, setting title text -->
+ <string name="pref_camera_recordlocation_title">کۆگاکردنی شوێن</string>
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <string name="pref_camera_location_label">شوێن</string>
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_title">کاتژمێری بەرەوژێرژمار</string>
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_sound_default">@string/setting_on_value</string>
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <string name="pref_camera_timer_sound_title">توتە لە ماوەی ژماردنی بەرەوژێر</string>
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <string name="setting_off">کوژاندن</string>
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <string name="setting_on">هەڵکردن</string>
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <string name="pref_video_quality_title">جۆرایه‌تیی کامێرا</string>
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_high">به‌رز</string>
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_low">نزم</string>
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <string name="pref_video_time_lapse_frame_interval_title">کات تێپەڕبوون</string>
+ <!-- Settings screen, Camera setting category title -->
+ <string name="pref_camera_settings_category">ڕێکخستنەکانی کامێرا</string>
+ <!-- Settings screen, Camcorder setting category title -->
+ <string name="pref_camcorder_settings_category">ڕێکخستنەکانی کامێرای هەڵگرتەنی</string>
+ <!-- Settings screen, Picture size title -->
+ <string name="pref_camera_picturesize_title">قەبارەی وێنە</string>
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_13mp">١٣ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_8mp">٨ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_5mp">٥ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_4mp">4 مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_3mp">٣ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp">٢ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp_wide">٢ مێگاپێکسڵ (١٦ لەسەر ٩)</string>
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1_3mp">١.٣ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1mp">١ مێگاپێکسڵ</string>
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_vga">VGA</string>
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_qvga">QVGA</string>
+ <!-- Settings screen, Focus mode title -->
+ <string name="pref_camera_focusmode_title">شێوازی سەرنجدان</string>
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <string name="pref_camera_focusmode_entry_auto">خۆکار</string>
+ <string name="pref_camera_focusmode_entry_infinity">Infinity</string>
+ <string name="pref_camera_focusmode_entry_macro">Macro</string>
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_focusmode_label_auto">خۆکارانە</string>
+ <string name="pref_camera_focusmode_label_infinity">INFINITY</string>
+ <string name="pref_camera_focusmode_label_macro">MACRO</string>
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <string name="pref_camera_flashmode_title">شێوازی فلاش</string>
+ <!-- flash label [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label">شێوازی فلاش</string>
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <string name="pref_camera_flashmode_entry_auto">خۆکارانه‌</string>
+ <string name="pref_camera_flashmode_entry_on">هەڵکردن</string>
+ <string name="pref_camera_flashmode_entry_off">کوژاندنه‌وه‌</string>
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label_auto">فلاشی خۆکار</string>
+ <string name="pref_camera_flashmode_label_on">فلاش هەڵە</string>
+ <string name="pref_camera_flashmode_label_off">فلاش کوژاوەیە</string>
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <string name="pref_camera_whitebalance_title">هاوسەنگیی سپی</string>
+ <!-- Menu, white balance label -->
+ <string name="pref_camera_whitebalance_label">هاوسه‌نگیی سپێتی</string>
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <string name="pref_camera_whitebalance_entry_auto">خۆکار</string>
+ <string name="pref_camera_whitebalance_entry_incandescent">درەوشاوە</string>
+ <string name="pref_camera_whitebalance_entry_daylight">ڕۆژی ڕووناک</string>
+ <string name="pref_camera_whitebalance_entry_fluorescent">تيشكاوى</string>
+ <string name="pref_camera_whitebalance_entry_cloudy">هەوری</string>
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_whitebalance_label_auto">خۆکار</string>
+ <string name="pref_camera_whitebalance_label_incandescent">درەوشاوە</string>
+ <string name="pref_camera_whitebalance_label_daylight">ڕۆژی ڕووناک</string>
+ <string name="pref_camera_whitebalance_label_fluorescent">تيشكاوى</string>
+ <string name="pref_camera_whitebalance_label_cloudy">هەوری</string>
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <string name="pref_camera_scenemode_title">شێوازی دیمەن</string>
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_auto">خۆکار</string>
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_hdr">HDR</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_action">چالاکی</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_night">شەو</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_sunset">خۆراوابوون</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_party">میوانی</string>
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_auto">هیچیان</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_action">چالاکی</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_night">شەو</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_sunset">خۆراوابوون</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_party">میوانی</string>
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label">ژمێره‌ری کات</string>
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_off">کوژاندنەوەی کاتڕاگر</string>
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_one">١ چرکە</string>
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_three">٣ چرکە</string>
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_ten">١٠ چرکە</string>
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_fifteen">١٥ چرکە</string>
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <string name="not_selectable_in_scene_mode">لە شیوازی دیمەندا دیارینەکراوەیە.</string>
+ <!-- Exposure settings in preference -->
+ <string name="pref_exposure_title">ڕووناکیپێدان</string>
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <string name="pref_exposure_label">ڕۆشنایی پێدان</string>
+ <!-- Default HDR entry value -->
+ <string name="pref_camera_hdr_default">@string/setting_off_value</string>
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <string name="pref_camera_hdr_label">HDR</string>
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_back">کامێرای پێشەوە</string>
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_front">کامێرای دواوە</string>
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <string name="dialog_ok">باشه‌</string>
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <string name="spaceIsLow_content" product="nosdcard">بیرگەکەت پڕ بوە تکایە لەپێشدا کەمێك زانیاری بسڕەوە و پاشان هەوڵ بدەرەوە.</string>
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <string name="spaceIsLow_content" product="default">بۆشاییی بیرگەی دەرەکیت بەرەو تەواوبوون دەڕوات. ڕێکخستنەکانی جۆرێتی بگۆڕە یان هەندێک وێنە یان دیکەی پەڕگەکان بسڕەوە.</string>
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <string name="video_reach_size_limit">قەبارە گەیشتۆتە سنوور.</string>
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <string name="pano_too_fast_prompt">زۆر خێرا</string>
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <string name="pano_dialog_prepare_preview">ئامادەکردنی پانۆراما</string>
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <string name="pano_dialog_panorama_failed">نەیتوانی پانۆراما پاشەکەوت بکات.</string>
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <string name="pano_dialog_title">پانۆراما</string>
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <string name="pano_capture_indication">گرتنی پانۆراما</string>
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <string name="pano_dialog_waiting_previous">چاوەڕێکردن بۆ پانۆرامای پێشوو</string>
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <string name="pano_review_saving_indication_str">پاشەکەوتکردن\u2026</string>
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <string name="pano_review_rendering">نواندنی پانۆرامایی</string>
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <string name="tap_to_focus">بیسوو بۆ سەرنجدان.</string>
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <string name="pref_video_effect_title">کاریگه‌رییه‌کان</string>
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <string name="effect_none">هیچیان</string>
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_squeeze">گوشین</string>
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_eyes">چاوی گەورە</string>
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_mouth">دەمی گەورە</string>
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_mouth">دەمی بچوک</string>
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_nose">لوتی گەورە</string>
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_eyes">چاوی بچوک</string>
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_space">لە بۆشایی</string>
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_sunset">خۆراوابوون</string>
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_gallery">ڤیدیۆکه‌ت</string>
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <string name="bg_replacement_message">دانانی ئامێر بۆ وه‌ستان.\nهه‌نگاوێک له‌ بینینی کات.</string>
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <string name="video_snapshot_hint">له‌ کاتی تۆمارکردندا بیسوو بۆ وێنه‌گرتن.</string>
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <string name="video_recording_started">تۆمارکردنی ڤیدیۆ دەستی پێکردووه‌.</string>
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <string name="video_recording_stopped">تۆمارکردنی ڤیدیۆ وەستاوه‌.</string>
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <string name="disable_video_snapshot_hint">گرتنی ڤیدیۆ ئاماده‌نییه‌ کاتێک کاریگه‌ری تایبه‌تی کارده‌کات.</string>
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <string name="clear_effects">پاککردنەوەی کاریگەرییەکان</string>
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <string name="effect_silly_faces">ڕووخساری گەمژانه‌</string>
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <string name="effect_background">پاشبنەما</string>
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_shutter_button">دوگمه‌ی خێرایی لێنس</string>
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_menu_button">دوگمەی پێڕست</string>
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_thumbnail">تازه‌ترین وێنه‌</string>
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_camera_picker">گۆڕینی پێش و دواوه‌ی کامێرا</string>
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_mode_picker">کامێرا، ڤیدیۆ یان هەڵبژێرەری پانۆراما</string>
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_second_level_indicators">ڕێکخستنی زیاتری سه‌رپه‌رشتی</string>
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_back_to_first_level">داخستنی ڕێکخستنی سه‌رپه‌رشتی</string>
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_zoom_control">سه‌رپه‌رشتی هێنانه‌ پێشه‌وه‌</string>
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_decrement">که‌مکردن%1$s</string>
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_increment">زیادکردن%1$s</string>
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_check_box">%1$s خانه‌ی پیاچوونه‌وه‌</string>
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_camera">گۆڕان بۆ وێنە</string>
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_video">گۆڕان بۆ ڤیدیۆ</string>
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_panorama">گۆڕان بۆ پانۆراما</string>
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_new_panorama">گۆڕین بوێ پانۆرامای نوێ</string>
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_refocus">گۆڕین بۆ دووباره‌ فۆکس</string>
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_cancel">چاوپێداگێڕانەوەی هەڵوەشاندنەوە</string>
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_ok">چاوپێداگێڕانەوە کرا</string>
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_retake">چاوپێداگێڕانەوەی وێنەگرتنەوە</string>
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_play_video">لێدانی ڤیدیۆ</string>
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_pause_video">ڕاگرتنی ڤیدیۆ</string>
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_reload_video">دووباره‌کردنه‌وه‌ی ڤیدیۆ</string>
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_time_bar">شریتی کاتی لێده‌ری ڤیدیۆ</string>
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_on">هەڵکردن</string>
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_off">کوژاندن</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_off">کوژاندن</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_500">٠.٥ چرکه‌</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1000">١ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1500">١.٥ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2000">٢ چرکه‌</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2500">٢.٥ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3000">٣ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_4000">٤ چرکه‌</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5000">٥ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_6000">٦ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10000">١٠ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_12000">١٢ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_15000">١٥ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_24000">٢٤ چرکە</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_30000">٠.٥ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_60000">١ خوله‌ک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_90000">١.٥ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_120000">٢ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_150000">٢.٥ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_180000">٣ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_240000">٤ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_300000">٥ خوله‌ک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_360000">٦ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_600000">١٠ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_720000">١٢ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_900000">١٥ خوله‌ک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1440000">٢٤ خولەک</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1800000">٠.٥ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3600000">١ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5400000">١.٥ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_7200000">٢ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_9000000">٢.٥ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10800000">٣ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_14400000">٤ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_18000000">٥ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_21600000">٦ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_36000000">١٠ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_43200000">١٢ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_54000000">١٥ کاژێر</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_86400000">٢٤ کاژێر</string>
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_seconds">چرکە</string>
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_minutes">خولەک</string>
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_hours">کاژێر</string>
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_interval_set">کرا</string>
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <string name="set_time_interval">دانانی مەودای کات</string>
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_time_interval_help">تایبەتمەندیی تێپەڕینی کات کوژاوەیە. هەڵی بکە بۆ دانانی مەودای کات.</string>
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_timer_help">کات پێوه‌ر کوژاوه‌ته‌وه‌.دایبگیرسێنه‌ ئه‌گه‌ر بۆ ژماردنته‌ پێش گرتنی وێنه‌.</string>
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <string name="set_duration">دانانی ماوە لە چەند چرکەدا</string>
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <string name="count_down_title_text">ژماردنی بەرەوژێر تاوەکوو گرتنی وێنە</string>
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <string name="remember_location_title">شوێنی وێنه‌کانت له‌ یاده‌؟</string>
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <string name="remember_location_prompt">وێنە و ڤيديۆکانت به شوێنی گرتنه‌کانیانه‌وه‌ پینە بکە. \n\nبەرنامەکانی تر دەتوانن دەست پێ راگەیەنن به‌م زانیارییه‌وه‌ کە له‌گه‌ڵ وێنه‌ پاشه‌که‌وتکراوه‌کانتدایە.</string>
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_no">نا سپاس</string>
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_yes">بەڵێ</string>
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <string name="menu_camera">کامێرا</string>
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <string name="menu_search">گه‌ڕان</string>
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <string name="tab_photos">وێنه‌کان</string>
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <string name="tab_albums">ئەلبوم</string>
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <string name="camera_menu_more_label">بەربژاردەی زیاتر</string>
+ <!-- settings label [CHAR LIMIT=50] -->
+ <string name="camera_menu_settings_label">ڕێکخستنەکان</string>
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ky-rKG/cm_strings.xml b/res/values-ky-rKG/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ky-rKG/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ky-rKG/codeaurora_strings.xml b/res/values-ky-rKG/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ky-rKG/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 6ca7e9175..dac58a24a 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -35,7 +35,7 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerVertical">true</item>
- <item name="android:layout_marginRight">@dimen/setting_popup_right_margin</item>
+ <item name="android:layout_marginEnd">@dimen/setting_popup_right_margin</item>
<item name="android:visibility">gone</item>
</style>
<style name="PopupTitleText">
@@ -45,14 +45,14 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@color/popup_title_color</item>
- <item name="android:layout_marginLeft">10dp</item>
- <item name="android:paddingLeft">16dp</item>
+ <item name="android:layout_marginStart">10dp</item>
+ <item name="android:paddingStart">16dp</item>
</style>
<style name="ViewfinderLabelLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
- <item name="android:layout_marginLeft">13dp</item>
- <item name="android:layout_marginRight">@dimen/indicator_bar_width</item>
+ <item name="android:layout_marginStart">13dp</item>
+ <item name="android:layout_marginEnd">@dimen/indicator_bar_width</item>
<item name="android:layout_marginBottom">13dp</item>
<item name="android:layout_marginTop">13dp</item>
</style>
@@ -67,8 +67,8 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerVertical">true</item>
- <item name="android:layout_alignParentRight">true</item>
- <item name="android:layout_marginRight">@dimen/setting_popup_right_margin</item>
+ <item name="android:layout_alignParentEnd">true</item>
+ <item name="android:layout_marginEnd">@dimen/setting_popup_right_margin</item>
<item name="android:visibility">gone</item>
</style>
diff --git a/res/values-lb/cm_strings.xml b/res/values-lb/cm_strings.xml
new file mode 100644
index 000000000..0bdaab5cc
--- /dev/null
+++ b/res/values-lb/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Opnamezäit</string>
+</resources>
diff --git a/res/values-lb/codeaurora_strings.xml b/res/values-lb/codeaurora_strings.xml
new file mode 100644
index 000000000..9afd93777
--- /dev/null
+++ b/res/values-lb/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Schrëtt</string>
+ <string name="step_option_desc">Vir- an Zréckspull-Schrëtter upassen</string>
+ <string name="setp_option_three_second">3 Sekonnen</string>
+ <string name="setp_option_six_second">6 Sekonnen</string>
+ <string name="loop">"Widderhuelen"</string>
+ <string name="single">"Eenzel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Lautsprecher UN</string>
+ <string name="speaker_off">Lautsprecher AUS</string>
+ <string name="speaker_need_headset">Schléis Kopfhörer u fir dës Funktioun ze benotzen.</string>
+ <string name="single_track">"Eenzel Spur"</string>
+ <string name="input_url">"URL aginn"</string>
+ <string name="streaming_settings">"Streamingastellungen"</string>
+ <string name="next">"Weider"</string>
+ <string name="previous">"Zréck"</string>
+ <string name="buffer_size">Tëschespäicher-Gréisst</string>
+ <string name="apn">Preferéierten APN</string>
+ <string name="rtp_min_port">Min. Port</string>
+ <string name="rtp_max_port">Max. Port</string>
+ <string name="set_rtp_min_port">Min. Port festleeën</string>
+ <string name="set_rtp_max_port">Max. Port festleeën</string>
+ <string name="set_buffer_size">Tëschespäichergréisst definéieren</string>
+ <string name="set_apn">Preferéierten APN auswielen</string>
+ <string name="setting">Astellungen</string>
+ <string name="server_timeout_title">"Zäitiwwerschreidung beim Server"</string>
+ <string name="server_timeout_message">"Nees mam Server verbanne fir de Video ofzespillen?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Connectioun feelgeschloen, probéieren nees mat %1$d ze verbannen\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Gëtt ofgespillt</string>
+ <string name="media_controller_connecting">Connectéieren\u2026</string>
+ <string name="bookmark_add">"Lieszeechen dobäisetzen"</string>
+ <string name="bookmark_display">"Lieszeechen uweisen"</string>
+ <string name="bookmark_empty">"Keng Lieszeechen"</string>
+ <string name="bookmark_exist">"Lieszeechen existéiert schonn"</string>
+ <string name="bookmark_add_success">"Lieszeechen dobäigesat"</string>
+ <string name="bookmark_list">"Lieszeechen"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Standuert"</string>
+ <string name="delete_all">"All läschen"</string>
+ <string name="default_title">"Standardtitel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Méi Biller</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kann net roueg schalten: Video net ënnerstëtzt</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Et ass keng Kaarten-App installéiert fir d\'Positioun unzeweisen.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bassunhiewung</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-Effekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Toun-Effekter</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Schléiss Kopfhörer u fir dës Effekter.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon-Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Dëse Video ka leider net geschnidde ginn</string>
+ <string name="no_permission_for_drm">Pardon, DRM-geschützt Fichiere kënnen net gedeelt ginn</string>
+ <string name="drm_license_info">DRM-Lizenzinformatiounen</string>
+</resources>
diff --git a/res/values-lb/filtershow_strings.xml b/res/values-lb/filtershow_strings.xml
new file mode 100644
index 000000000..c09322d1b
--- /dev/null
+++ b/res/values-lb/filtershow_strings.xml
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <string name="title_activity_filter_show">Fotoediteur</string>
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <string name="cannot_load_image">D\'Bild kann net geluede ginn!</string>
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <string name="cannot_edit_original">Original kann net geännert ginn</string>
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <string name="setting_wallpaper">Als Hannergrondbild setzen</string>
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <string name="download_failure">Konnt d\'Foto net eroflueden. D\'Netzwierk ass net disponibel.</string>
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <string name="original">Original</string>
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <string name="borders" msgid="4461692156695893616">Rumm</string>
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <string name="custom_border">Personaliséiert</string>
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_undo">Réckgängeg maachen</string>
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_redo">Widderhuelen</string>
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <string name="show_imagestate_panel">Applizéiert Effekter uweisen</string>
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <string name="hide_imagestate_panel">Applizéiert Effekter verstoppen</string>
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <string name="export_image">Exportéieren</string>
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <string name="print_image">Drécken</string>
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <string name="export_flattened">Plattgemaacht Bild exportéieren</string>
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <string name="select_output_settings">Das exportéiert Bild gëtt als Kopie gespäichert, ouni Historique.</string>
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <string name="quality">Qualitéit</string>
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <string name="size">Gréisst</string>
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <string name="x">x</string>
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <string name="menu_settings">Astellungen</string>
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="unsaved">Et ginn ongespäichert Ännerungen un dësem Bild.</string>
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="save_before_exit">Wëlls du d\'Bild virum Zoumaache späicheren?</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_exit">Späicheren an zoumaachen</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_processing">Bild mat voller Opléisung gëtt beaarbecht...</string>
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <string name="exit">Verloossen</string>
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <string name="history">Historique</string>
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <string name="reset">Zrécksetzen</string>
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <string name="history_original">@string/original</string>
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <string name="imageState">Applizéiert Effekter</string>
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <string name="compare_original">Vergläichen</string>
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <string name="apply_effect">Applizéieren</string>
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <string name="reset_effect">Zrécksetzen</string>
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <string name="aspect">Aspekt</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect1to1_effect">1:1</string>
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to3_effect">4:3</string>
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <string name="aspect3to4_effect">3:4</string>
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to6_effect">4:6</string>
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect5to7_effect">5:7</string>
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <string name="aspect7to5_effect">7:5</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect9to16_effect">16:9</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <string name="aspectNone_effect">Keen</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <string name="Fixed">Fixéiert</string>
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <string name="tinyplanet">Klenge Planéit</string>
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <string name="exposure" msgid="1229093066434614811">Beliichtung</string>
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <string name="sharpness">Schäerft</string>
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <string name="contrast">Kontrast</string>
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <string name="vibrance">Intensitéit</string>
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <string name="saturation">Sättegung</string>
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <string name="bwfilter">SW-Filter</string>
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <string name="wbalance">Automatesch Faarwen</string>
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <string name="hue">Faarftoun</string>
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <string name="shadow_recovery">Déiften</string>
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <string name="highlight_recovery">Héichten</string>
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <string name="curvesRGB">Kurven</string>
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <string name="vignette">Vignettéierung</string>
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_main">Vignettéierung</string>
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_exposure">Beliichtung</string>
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_saturation">Sättegung</string>
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_contrast">Kontrast</string>
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <string name="vignette_falloff">Luuchtoffall</string>
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <string name="redeye">Rout Aen</string>
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <string name="imageDraw">Zeechnen</string>
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <string name="straighten" msgid="5217801513491493491">Ausriichten</string>
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <string name="crop" msgid="5584000454518174632">Schneiden</string>
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <string name="rotate" msgid="460017689320955494">Rotéieren</string>
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <string name="mirror">Spiggelen</string>
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <string name="negative">Negativ</string>
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <string name="none" msgid="3601545724573307541">Keen</string>
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <string name="edge">Kanten</string>
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <string name="kmeans">Posteriséiert</string>
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <string name="downsample">Verklengeren</string>
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <string name="grad">Ofgestuft</string>
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_brightness">Hellegkeet</string>
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_contrast">Kontrast</string>
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_saturation">Sättegung</string>
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_main">Haapt</string>
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_red">Rout</string>
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_yellow">Giel</string>
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_green">Gréng</string>
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_cyan">Cyan</string>
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_blue">Blo</string>
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_magenta">Magenta</string>
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_style">Stil</string>
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <string name="editor_grad_new">nei</string>
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <string name="curves_channel_rgb">RGB</string>
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_red">Rout</string>
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_green">Gréng</string>
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_blue">Blo</string>
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <string name="draw_style">Stil</string>
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <string name="draw_size">Gréisst</string>
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <string name="draw_hue">Faarftoun</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_saturation">Sättegung</string>
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <string name="draw_value">Hellegkeet</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_color">Faarf</string>
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_line">Linnen</string>
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_spatter">Filzstëft</string>
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_marker">Sprëtzer</string>
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <string name="draw_clear">Eidel maachen</string>
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <string name="color_border_size">Randstäerkt</string>
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <string name="color_border_corner_size">Eckegréisst</string>
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <string name="color_border_color">Faarf</string>
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <string name="color_border_clear">Eidel maachen</string>
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <string name="color_pick_select">Eege Faarf auswielen</string>
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <string name="color_pick_title">Faarf auswielen</string>
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <string name="draw_size_title">Gréisst auswielen</string>
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <string name="draw_size_accept">OK</string>
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_original">Original</string>
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_result">Resultat</string>
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_label">Bild gëtt gespäichert</string>
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_message">Gëtt beaarbecht...</string>
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <string name="filtershow_save_preset">Aktuell Virastellung späicheren</string>
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <string name="filtershow_manage_preset">Benotzervirastellungen</string>
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <string name="filtershow_new_preset">Nei Virastellung</string>
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <string name="filtershow_preset_name">Virastellungsnumm</string>
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_show_info_panel">Informatioun</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_name">Bildnumm</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_size">Bildgréisst</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_histogram">Histogramm</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_exif">EXIF-Daten</string>
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_looks">Virastellung</string>
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_versions">Versioun</string>
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_original">Original</string>
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_current">Aktuell</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_model">Modell</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_aperture">Blend</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_focal_length">Brennwäit</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_iso">ISO</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_subject_distance">Distanz zum Sujet</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_date">Ophueldatum</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_f_stop">Blendenzuel</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_exposure_time">Beliichtungszäit</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_copyright">Auteursrecht</string>
+</resources>
diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml
new file mode 100644
index 000000000..158eaf9c5
--- /dev/null
+++ b/res/values-lb/strings.xml
@@ -0,0 +1,856 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name">Galerie</string>
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <string name="gadget_title">Billerrumm</string>
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <string name="details_ms">%1$02d:%2$02d</string>
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <string name="details_hms">%1$d:%2$02d:%3$02d</string>
+ <!-- Activity label. This might show up in the activity-picker -->
+ <string name="movie_view_label">Videoofspiller</string>
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <string name="loading_video">Video gëtt gelueden\u2026</string>
+ <string name="loading_image">Bild gëtt gelueden\u2026</string>
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <string name="loading_account">Kont gëtt gelueden\u2026</string>
+ <!-- Movie View Resume Playing dialog title -->
+ <string name="resume_playing_title">Video weiderspillen</string>
+ <!-- Movie View Start Playing dialog title -->
+ <string name="resume_playing_message">Bei %s weider ofspillen?</string>
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <string name="resume_playing_resume">Weider ofspillen</string>
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <string name="loading">Gëtt gelueden\u2026</string>
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load">Konnt net lueden</string>
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load_image">D\'Bild konnt net geluede ginn</string>
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <string name="no_thumbnail">Kee Virschaubild</string>
+ <!-- Movie View Start Playing button "Beginning" -->
+ <string name="resume_playing_restart">Vu vir ufänken</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="crop_save_text">OK</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="ok">OK</string>
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <string name="multiface_crop_help">E Gesiicht drécke fir unzefänken.</string>
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <string name="saving_image">Bild gëtt gespäichert\u2026</string>
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <string name="filtershow_saving_image">D\'Bild gëtt an den Album <xliff:g id="album_name">%1$s</xliff:g> gespäichert\u2026</string>
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <string name="save_error">Konnt dat geschniddent Bild net späicheren.</string>
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <string name="crop_label">Bild schneiden</string>
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <string name="trim_label">Video kierzen</string>
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <string name="select_image">Foto auswielen</string>
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <string name="select_video">Video auswielen</string>
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <string name="select_item">Element auswielen</string>
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <string name="select_album">Album auswielen</string>
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <string name="select_group">Grupp auswielen</string>
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <string name="set_image">Bild setzen als</string>
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <string name="set_wallpaper">Hannergrondbild setzen</string>
+ <!-- Toast/alert after saving wallpaper -->
+ <string name="wallpaper">Hannergrondbild gëtt gesat\u2026</string>
+ <string name="camera_setas_wallpaper">Hannergrondbild</string>
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <string name="delete">Läschen</string>
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <string name="confirm">Bestätegen</string>
+ <string name="cancel">Ofbriechen</string>
+ <string name="share">Deelen</string>
+ <string name="share_panorama">Panorama deelen</string>
+ <string name="share_as_photo">Als Foto deelen</string>
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <string name="deleted">Geläscht</string>
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <string name="undo">RÉCKGÄNGEG</string>
+ <!-- String indicating more actions are available -->
+ <string name="select_all">All auswielen</string>
+ <string name="deselect_all">Auswiel ophiewen</string>
+ <string name="slideshow">Diashow</string>
+ <string name="details">Detailer</string>
+ <string name="details_title">%1$d / %2$d Elementer:</string>
+ <string name="close">Zoumaachen</string>
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <string name="switch_to_camera">Op d\'Kamera wiesselen</string>
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <string name="show_on_map">Op der Kaart uweisen</string>
+ <string name="rotate_left">Lénks rotéieren</string>
+ <string name="rotate_right">Riets rotéieren</string>
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <string name="no_such_item">Konnt d\'Element net fannen.</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="edit">Beaarbechten</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="simple_edit">Einfach Beaarbechtung</string>
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <string name="process_caching_requests">Tëschespäicherungsufroe gi veraarbecht</string>
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <string name="caching_label">Tëschespäicherung leeft\u2026</string>
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <string name="crop_action">Schneiden</string>
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <string name="trim_action">Trimmen</string>
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <string name="mute_action">Roueg</string>
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <string name="set_as">Setzen als</string>
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <string name="video_mute_err">Kann de Video net roueg schalten.</string>
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <string name="video_err">Video kann net ofgespillt ginn.</string>
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <string name="group_by_location">No Plaz</string>
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <string name="group_by_time">No Zäit</string>
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <string name="group_by_tags">No Etiketten</string>
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <string name="group_by_faces">No Leit</string>
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <string name="group_by_album">No Album</string>
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <string name="group_by_size">No Gréisst</string>
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <string name="untagged">Ouni Etikett</string>
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <string name="no_location">Keng Plaz</string>
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <string name="no_faces">Keng Gesiichter</string>
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <string name="no_connectivity">E puer Plaze konnte wéinst Netzwierkproblemer net identifizéiert ginn.</string>
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <string name="sync_album_error">Konnt d\'Fotoen aus dësem Album net eroflueden. Probéier méi spéit nees.</string>
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <string name="show_images_only">Just Biller</string>
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <string name="show_videos_only">Just Videoen</string>
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <string name="show_all">Biller a Videoen</string>
+ <!-- Title of the StackView AppWidget -->
+ <string name="appwidget_title">Fotogalerie</string>
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <string name="appwidget_empty_text">Keng Fotoen.</string>
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <string name="crop_saved">Geschniddent Bild gespäichert ënner <xliff:g id="folder_name">%s</xliff:g>.</string>
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <string name="no_albums_alert">Keng Alben disponibel.</string>
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <string name="empty_album">O Biller/Videoen disponibel.</string>
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <string name="picasa_posts">Posts</string>
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <string name="make_available_offline">Offline disponibel maachen</string>
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <string name="sync_picasa_albums">Opfrëschen</string>
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <string name="done">Fäerdeg</string>
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <string name="sequence_in_set">%1$d / %2$d Elementer:</string>
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <string name="title">Titel</string>
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <string name="description">Beschreiwung</string>
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="time">Zäit</string>
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <string name="location">Standuert</string>
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <string name="path">Pad</string>
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <string name="width">Breet</string>
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <string name="height">Héicht</string>
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <string name="orientation">Orientéierung</string>
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <string name="duration">Dauer</string>
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <string name="mimetype">MIME-Typ</string>
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <string name="file_size">Fichiersgréisst</string>
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <string name="maker">Hiersteller</string>
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <string name="model">Modell</string>
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <string name="flash">Blëtz</string>
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <string name="aperture">Blend</string>
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <string name="focal_length">Brennwäit</string>
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <string name="white_balance">Wäissofgläich</string>
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="exposure_time">Beliichtungszäit</string>
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <string name="iso">ISO</string>
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <string name="unit_mm">mm</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="manual">Manuell</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="auto">Automatesch</string>
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <string name="flash_on">Blëtz ausgeléist</string>
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <string name="flash_off">Kee Blëtz</string>
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <string name="unknown">Onbekannt</string>
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <string name="ffx_original">Original</string>
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <string name="ffx_vintage">Almoudesch</string>
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <string name="ffx_instant">Direktbild</string>
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <string name="ffx_bleach">Verbleecht</string>
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <string name="ffx_blue_crush">Blo</string>
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <string name="ffx_bw_contrast">S/W</string>
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <string name="ffx_punch">Punch</string>
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <string name="ffx_x_process">X Process</string>
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <string name="ffx_washout">Latte</string>
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <string name="ffx_washout_color">Litho</string>
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <string name="try_to_set_local_album_available_offline">Dëst Element ass lokal gespäichert an och offiline disponibel.</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <string name="set_label_all_albums">All d\'Alben</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <string name="set_label_local_albums">Lokal Alben</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <string name="set_label_mtp_devices">MTP-Apparater</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <string name="set_label_picasa_albums">Picasa-Alben</string>
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="free_space_format"><xliff:g id="bytes">%s</xliff:g> fräi</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_below"><xliff:g id="size">%1$s</xliff:g> oder drënner</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_above"><xliff:g id="size">%1$s</xliff:g> oder driwwer</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_between"><xliff:g id="min_size">%1$s</xliff:g> bis <xliff:g id="max_size">%2$s</xliff:g></string>
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <string name="Import">Importéieren</string>
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <string name="import_complete">Import ofgeschloss</string>
+ <string name="import_fail">Import feelgeschloen</string>
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <string name="camera_connected">Kamera connectéiert.</string>
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <string name="camera_disconnected">Kamera deconnectéiert.</string>
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <string name="click_import">Hei drécke fir z\'importéieren</string>
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <string name="widget_type_album">En Album auswielen</string>
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <string name="widget_type_shuffle">All d\'Biller mëschen</string>
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <string name="widget_type_photo">E Bild auswielen</string>
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <string name="widget_type">Biller auswielen</string>
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <string name="slideshow_dream_name">Diashow</string>
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="albums">Alben</string>
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="times">Zäiten</string>
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="locations">Plazen</string>
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="people">Leit</string>
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="tags">Etiketten</string>
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <string name="group_by">Gruppéieren no</string>
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <string name="settings">Astellungen</string>
+ <!-- The title of menu item where user can add a new account -->
+ <string name="add_account">Kont dobäisetzen</string>
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <string name="folder_camera">Fotoapparat</string>
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <string name="folder_download">Erofgelueden</string>
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <string name="folder_edited_online_photos">Beaarbecht Online-Fotoen</string>
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <string name="folder_imported">Importéiert</string>
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <string name="folder_screenshot">Schiermfoto</string>
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <string name="help">Hëllef</string>
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <string name="no_external_storage_title">Kee Späicher</string>
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <string name="no_external_storage">Keen externe Späicher disponibel</string>
+ <!-- Label for album filmstrip button -->
+ <string name="switch_photo_filmstrip">Als Filmsträif uweisen</string>
+ <!-- Label for album grid button -->
+ <string name="switch_photo_grid">Gitterusiicht</string>
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <string name="switch_photo_fullscreen">Vollschierm-Usiicht</string>
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <string name="trimming">Gëtt geschnidden</string>
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <string name="muting">Toun gëtt ausgeschalt</string>
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <string name="please_wait">W.e.g. waarden</string>
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <string name="save_into">De Video gëtt an den Album <xliff:g id="album_name">%1$s</xliff:g> gespäichert\u2026</string>
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <string name="trim_too_short">Kann net kierzen: den Zilvideo ass ze kuerz</string>
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <string name="pano_progress_text">Panorama gëtt gerendert</string>
+ <!-- The label on the button that will save an edited image -->
+ <string name="save" msgid="8140440041190264400">Späicheren</string>
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <string name="ingest_scanning" msgid="2048262851775139720">Inhalt gëtt gescannt...</string>
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <string name="ingest_sorting" msgid="624687230903648118">Gëtt zortéiert...</string>
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <string name="ingest_scanning_done">Scannen ofgeschloss</string>
+ <!-- Status message shown when content from an external camera is being imported -->
+ <string name="ingest_importing">Gëtt importéiert...</string>
+ <!-- Status message shown when there is no content available to be imported -->
+ <string name="ingest_empty_device">Et ass keen Inhalt op dësem Apparat disponibel deen importéiert ka ginn.</string>
+ <!-- Status message shown when there is no MTP device connected -->
+ <string name="ingest_no_device">Et si keng MTP-Apparater connectéiert</string>
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <string name="camera_error_title">Kamerafeeler</string>
+ <!-- message for the dialog showing the error of camera hardware -->
+ <string name="cannot_connect_camera">Keng Connectioun zur Kamera méiglech.</string>
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <string name="camera_disabled">D\'Kamera gouf wéinst Sécherheetsriichtlinnen desaktivéiert.</string>
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <string name="camera_label">Fotoapparat</string>
+ <!-- alert to the user to wait for some operation to complete -->
+ <string name="wait">Waart w.e.g.\u2026</string>
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <string name="no_storage" product="nosdcard">Bann den USB-Späicher an ier s de d\'Kamera benotz.</string>
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <string name="no_storage" product="default">Maach eng SD-Kaart dran ier s du d\'Kamera benotzt.</string>
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <string name="preparing_sd" product="nosdcard">USB-Späicher gëtt preparéiert\u2026</string>
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <string name="preparing_sd" product="default">SD-Kaart gëtt preparéiert\u2026</string>
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <string name="access_sd_fail" product="nosdcard">Keen Zougrëff op den USB-Späicher méiglech.</string>
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <string name="access_sd_fail" product="default">Keen Zougrëff op d\'SD-Kaart méiglech.</string>
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <string name="review_cancel">OFBRIECHEN</string>
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <string name="review_ok">FÄERDEG</string>
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <string name="time_lapse_title">Zäitrafferopnam</string>
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <string name="pref_camera_id_title">Kamera wielen</string>
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_back">Hannen</string>
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_front">Vir</string>
+ <!-- Settings screen, setting title text -->
+ <string name="pref_camera_recordlocation_title">Plaz späicheren</string>
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <string name="pref_camera_location_label">PLAZ</string>
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_title">Countdown-Timer</string>
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_sound_default">@string/setting_on_value</string>
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <string name="pref_camera_timer_sound_title">Piipse während dem Countdown</string>
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <string name="setting_off">Aus</string>
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <string name="setting_on">Un</string>
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <string name="pref_video_quality_title">Videoqualitéit</string>
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_high">Héich</string>
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_low">Niddreg</string>
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <string name="pref_video_time_lapse_frame_interval_title">Zäitraffer</string>
+ <!-- Settings screen, Camera setting category title -->
+ <string name="pref_camera_settings_category">Kameraastellungen</string>
+ <!-- Settings screen, Camcorder setting category title -->
+ <string name="pref_camcorder_settings_category">Kameraastellungen</string>
+ <!-- Settings screen, Picture size title -->
+ <string name="pref_camera_picturesize_title">Fotogréisst</string>
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_13mp">13M Pixelen</string>
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_8mp">8M Pixelen</string>
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_5mp">5M Pixelen</string>
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_4mp">4M Pixelen</string>
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_3mp">3M Pixelen</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp">2M Pixelen</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp_wide">2M Pixelen (16:9)</string>
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1_3mp">1,3M Pixelen</string>
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1mp">1M Pixelen</string>
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_vga">VGA</string>
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_qvga">QVGA</string>
+ <!-- Settings screen, Focus mode title -->
+ <string name="pref_camera_focusmode_title">Fokusmodus</string>
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <string name="pref_camera_focusmode_entry_auto">Automatesch</string>
+ <string name="pref_camera_focusmode_entry_infinity">Onendlech</string>
+ <string name="pref_camera_focusmode_entry_macro">Makro</string>
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_focusmode_label_auto">AUTO</string>
+ <string name="pref_camera_focusmode_label_infinity">ONENDLECH</string>
+ <string name="pref_camera_focusmode_label_macro">MAKRO</string>
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <string name="pref_camera_flashmode_title">Blëtzmodus</string>
+ <!-- flash label [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label">BLËTZMODUS</string>
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <string name="pref_camera_flashmode_entry_auto">Automatesch</string>
+ <string name="pref_camera_flashmode_entry_on">Un</string>
+ <string name="pref_camera_flashmode_entry_off">Aus</string>
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label_auto">BLËTZ AUTO</string>
+ <string name="pref_camera_flashmode_label_on">BLËTZ UN</string>
+ <string name="pref_camera_flashmode_label_off">BLËTZ AUS</string>
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <string name="pref_camera_whitebalance_title">Wäissofgläich</string>
+ <!-- Menu, white balance label -->
+ <string name="pref_camera_whitebalance_label">WÄISSOFGLÄICH</string>
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <string name="pref_camera_whitebalance_entry_auto">Automatesch</string>
+ <string name="pref_camera_whitebalance_entry_incandescent">Glousluucht</string>
+ <string name="pref_camera_whitebalance_entry_daylight">Dagesliicht</string>
+ <string name="pref_camera_whitebalance_entry_fluorescent">Fluoreszent</string>
+ <string name="pref_camera_whitebalance_entry_cloudy">Wollekeg</string>
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_whitebalance_label_auto">AUTO</string>
+ <string name="pref_camera_whitebalance_label_incandescent">GLOUSLUUCHT</string>
+ <string name="pref_camera_whitebalance_label_daylight">DAGESLIICHT</string>
+ <string name="pref_camera_whitebalance_label_fluorescent">FLUORESZENT</string>
+ <string name="pref_camera_whitebalance_label_cloudy">WOLLEKEG</string>
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <string name="pref_camera_scenemode_title">Zeenemodus</string>
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_auto">Automatesch</string>
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_hdr">HDR</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_action">Aktioun</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_night">Nuecht</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_sunset">Sonnenënnergank</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_party">Party</string>
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_auto">KEEN</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_action">AKTIOUN</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_night">NUECHT</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_sunset">SONNENËNNERGANK</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_party">PARTY</string>
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label">SANDAUER</string>
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_off">TIMER AUS</string>
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_one">1 SEKONN</string>
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_three">3 SEKONNEN</string>
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_ten">10 SEKONNEN</string>
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_fifteen">15 SEKONNEN</string>
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <string name="not_selectable_in_scene_mode">Dës Astellung kann am Zeenemodus net ausgewielt ginn.</string>
+ <!-- Exposure settings in preference -->
+ <string name="pref_exposure_title">Beliichtung</string>
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <string name="pref_exposure_label">BELIICHTUNG</string>
+ <!-- Default HDR entry value -->
+ <string name="pref_camera_hdr_default">@string/setting_off_value</string>
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <string name="pref_camera_hdr_label">HDR</string>
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_back">VIISCHT KAMERA</string>
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_front">HËNNESCHT KAMERA</string>
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <string name="dialog_ok">OK</string>
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <string name="spaceIsLow_content" product="nosdcard">Däin USB-Späicher huet geschwë keng Plaz méi. Änner d\'Qualitéitsastellungen oder läsch e puer Fotoen oder aner Fichieren.</string>
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <string name="spaceIsLow_content" product="default">Deng SD-Kaart huet geschwë keng Plaz méi. Änner d\'Qualitéitsastellungen oder läsch e puer Fotoen oder Fichieren.</string>
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <string name="video_reach_size_limit">Gréisstelimitt ass erreecht.</string>
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <string name="pano_too_fast_prompt">Ze séier</string>
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <string name="pano_dialog_prepare_preview">Panorama gëtt preparéiert</string>
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <string name="pano_dialog_panorama_failed">De Panorama konnt net gespäichert ginn.</string>
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <string name="pano_dialog_title">Panorama</string>
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <string name="pano_capture_indication">Panorama gëtt opgeholl</string>
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <string name="pano_dialog_waiting_previous">Waarden op dee Panorama virdrun</string>
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <string name="pano_review_saving_indication_str">Gëtt gespäichert\u2026</string>
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <string name="pano_review_rendering">Panorama gëtt gerendert</string>
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <string name="tap_to_focus">Drécke fir schaarf ze stellen.</string>
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <string name="pref_video_effect_title">Effekter</string>
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <string name="effect_none">Keen</string>
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_squeeze">Quëtschen</string>
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_eyes">Grouss Aen</string>
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_mouth">Grousse Mond</string>
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_mouth">Klenge Mond</string>
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_nose">Grouss Nues</string>
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_eyes">Kleng Aen</string>
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_space">Am Weltraum</string>
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_sunset">Sonnenënnergank</string>
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_gallery">Däi Video</string>
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <string name="bg_replacement_message">Lee däin Apparat of.\nTriet e Moment aus dem Siichtberäich.</string>
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <string name="video_snapshot_hint">Drécke fir Fotoen ze maache während s du films.</string>
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <string name="video_recording_started">Videoopnam gouf gestart.</string>
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <string name="video_recording_stopped">Videoopnam gouf opgehalen.</string>
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <string name="disable_video_snapshot_hint">Video-Schnappschoss ass bei Spezialeffekter desaktivéiert.</string>
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <string name="clear_effects">Effekter ewechhuelen</string>
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <string name="effect_silly_faces">LËSCHTEG GESIICHTER</string>
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <string name="effect_background">HANNERGROND</string>
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_shutter_button">Ausléisknäppchen</string>
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_menu_button">Menü-Knäppchen</string>
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_thumbnail">Rezentst Foto</string>
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_camera_picker">Tëscht de Kamerae vir an hanne wiesselen</string>
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_mode_picker">Auswiel fir Fotoapparat, Video oder Panorama</string>
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_second_level_indicators">Weider Astellungen</string>
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_back_to_first_level">Astellungen zoumaachen</string>
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_zoom_control">Zoomsteierung</string>
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_decrement">%1$s erofsetzen</string>
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_increment">%1$s eropsetzen</string>
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_check_box">%1$s Ukräizfeld</string>
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_camera">Op de Foto-Modus wiesselen</string>
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_video">Op de Video-Modus wiesselen</string>
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_panorama">Op de Panorama-Modus wiesselen</string>
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_new_panorama">Bei den neie Panorama wiesselen</string>
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_refocus">Bei d\'Auswiel vun engem neie Fokus wiesselen</string>
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_cancel">Iwwerpréiwung ofbriechen</string>
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_ok">Iwwerpréiwung ofgeschloss</string>
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_retake">Iwwerpréiwung - Nei Ophuelen</string>
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_play_video">Video ofspillen</string>
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_pause_video">Video pauséieren</string>
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_reload_video">Video nei lueden</string>
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_time_bar">Zäitlinn vum Videoofspiller</string>
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_on">UN</string>
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_off">AUS</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_off">Aus</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_500">0,5 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1000">1 Sekonn</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1500">1,5 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2000">2 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2500">2,5 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3000">3 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_4000">4 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5000">5 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_6000">6 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10000">10 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_12000">12 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_15000">15 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_24000">24 Sekonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_30000">0,5 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_60000">1 Minutt</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_90000">1,5 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_120000">2 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_150000">2,5 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_180000">3 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_240000">4 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_300000">5 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_360000">6 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_600000">10 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_720000">12 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_900000">15 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1440000">24 Minutten</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1800000">0,5 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3600000">1 Stonn</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5400000">1,5 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_7200000">2 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_9000000">2,5 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10800000">3 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_14400000">4 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_18000000">5 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_21600000">6 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_36000000">10 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_43200000">12 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_54000000">15 Stonnen</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_86400000">24 Stonnen</string>
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_seconds">Sekonnen</string>
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_minutes">Minutten</string>
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_hours">Stonnen</string>
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_interval_set">Fäerdeg</string>
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <string name="set_time_interval">Zäitintervall setzen</string>
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_time_interval_help">Zäitrafferfunktioun ass aus. Maach s\'u fir den Zäitintervall ze setzen.</string>
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_timer_help">D\'Sandauer ass aus. Schalt s\'u fir erofzezielen ier eng Foto gemaach gëtt.</string>
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <string name="set_duration">Dauer a Sekonne festleeën</string>
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <string name="count_down_title_text">Countdown fir eng Foto ze schéissen</string>
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <string name="remember_location_title">De Fotostanduert späicheren?</string>
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <string name="remember_location_prompt">Fotoen a Videoe mam Standuert späichere wou s\'opgeholl gi sinn.\n\nAner Appe kënnen zesumme mat de gespäicherte Biller op dës Informatioun zougräifen.</string>
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_no">Nee Merci</string>
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_yes">Jo</string>
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <string name="menu_camera">Fotoapparat</string>
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <string name="menu_search">Sichen</string>
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <string name="tab_photos">Fotoen</string>
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <string name="tab_albums">Alben</string>
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <string name="camera_menu_more_label">MÉI OPTIOUNEN</string>
+ <!-- settings label [CHAR LIMIT=50] -->
+ <string name="camera_menu_settings_label">ASTELLUNGEN</string>
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+ <string name="can_not_trim">Just MP4 an 3GP-Fichiere kënne geschnidde ginn</string>
+ <string name="text_makeup_whiten">Wäiss maachen</string>
+ <string name="text_makeup_Soften">Mëll maachen</string>
+ <string name="text_makeup_trimface">Gesiicht schneiden</string>
+ <string name="text_makeup_bigeye">Déck Aen</string>
+</resources>
diff --git a/res/values-lo-rLA/cm_strings.xml b/res/values-lo-rLA/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-lo-rLA/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-lo-rLA/codeaurora_strings.xml b/res/values-lo-rLA/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-lo-rLA/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-lt/cm_strings.xml b/res/values-lt/cm_strings.xml
new file mode 100644
index 000000000..1a496108a
--- /dev/null
+++ b/res/values-lt/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Įrašo laikas</string>
+</resources>
diff --git a/res/values-lt/codeaurora_strings.xml b/res/values-lt/codeaurora_strings.xml
new file mode 100644
index 000000000..f536543f0
--- /dev/null
+++ b/res/values-lt/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Žingsnis</string>
+ <string name="step_option_desc">Tinkinti greito prasukimo / atsukimo žingsnį</string>
+ <string name="setp_option_three_second">3 sek.</string>
+ <string name="setp_option_six_second">6 sek.</string>
+ <string name="loop">"Ciklas"</string>
+ <string name="single">"Vientisas"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Garsiakalbis ĮJUNGTAS</string>
+ <string name="speaker_off">Garsiakalbis IŠJUNGTAS</string>
+ <string name="speaker_need_headset">Prijunkite ausines, kad naudotumėtes šia funkcija.</string>
+ <string name="single_track">"Vienas takelis"</string>
+ <string name="input_url">"Įveskite URL"</string>
+ <string name="streaming_settings">"Srautinių transliacijų nustatymai"</string>
+ <string name="next">"Kitas"</string>
+ <string name="previous">"Ankstesnis"</string>
+ <string name="buffer_size">Buferio dydis</string>
+ <string name="apn">Pageidaujamas APN</string>
+ <string name="rtp_min_port">Mažiausias prievadas</string>
+ <string name="rtp_max_port">Didžiausias prievadas</string>
+ <string name="set_rtp_min_port">Nustatyti mažiausią prievadą</string>
+ <string name="set_rtp_max_port">Nustatyti didžiausią prievadą</string>
+ <string name="set_buffer_size">Nustatyti buferio dydį</string>
+ <string name="set_apn">Pasirinkti pageidaujamą APN</string>
+ <string name="setting">Nustatymai</string>
+ <string name="server_timeout_title">"Serverio skirtasis laikas"</string>
+ <string name="server_timeout_message">"Prisijungti prie serverio, kad paleisti vaizdo įrašą?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Prisijungimas nepavyko, bandoma prisijungti prie %1$d\u2026"</string>
+ <string name="media_controller_live">Tiesiogiai</string>
+ <string name="media_controller_playing">Leidžiama</string>
+ <string name="media_controller_connecting">Jungiamasi\u2026</string>
+ <string name="bookmark_add">"Pridėti žymę"</string>
+ <string name="bookmark_display">"Rodyti žymes"</string>
+ <string name="bookmark_empty">"Žymių nėra"</string>
+ <string name="bookmark_exist">"Žymė jau egzistuoja"</string>
+ <string name="bookmark_add_success">"Žymė pridėta"</string>
+ <string name="bookmark_list">"Žymės"</string>
+ <string name="bookmark_title">"Pavadinimas"</string>
+ <string name="bookmark_location">"Vietovė"</string>
+ <string name="delete_all">"Ištrinti visas"</string>
+ <string name="default_title">"Numatytasis pavadinimas"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Daugiau vaizdų</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Negalima nutildyti: vaizdo įrašas nepalaikomas</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nėra įdiegtos žemėlapių programos tam, kad parodyti vietovę.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Žemų tonų išryškinimas</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efektas</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Garso efektai</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Prijunkite ausines dėl šių efektų.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Atsiprašome, šis vaizdo įrašas negali būti apkarpytas</string>
+ <string name="no_permission_for_drm">Atsiprašome, DRM apsaugoti failai negali būti dalijamiesi</string>
+ <string name="drm_license_info">DRM licencijos informacija</string>
+</resources>
diff --git a/res/values-lv/cm_strings.xml b/res/values-lv/cm_strings.xml
new file mode 100644
index 000000000..77fb9656d
--- /dev/null
+++ b/res/values-lv/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Ieraksta laiks</string>
+</resources>
diff --git a/res/values-lv/codeaurora_strings.xml b/res/values-lv/codeaurora_strings.xml
new file mode 100644
index 000000000..80fe61b8a
--- /dev/null
+++ b/res/values-lv/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Solis</string>
+ <string name="step_option_desc">Pielāgot ātro pārtīšanu turp/atpakaļ</string>
+ <string name="setp_option_three_second">3 sekundes</string>
+ <string name="setp_option_six_second">6 sekundes</string>
+ <string name="loop">"Cilpa"</string>
+ <string name="single">"Viens"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Skaļrunis ieslēgts</string>
+ <string name="speaker_off">Skaļrunis izslēgts</string>
+ <string name="speaker_need_headset">Lai lietotu šo iespēju, pievienojiet austiņas.</string>
+ <string name="single_track">"Viens kanāls"</string>
+ <string name="input_url">"Ievadiet URL"</string>
+ <string name="streaming_settings">"Straumēšanas iestatījumi"</string>
+ <string name="next">"Nākamais"</string>
+ <string name="previous">"Iepriekšējais"</string>
+ <string name="buffer_size">Bufera lielums</string>
+ <string name="apn">Vēlamais APN</string>
+ <string name="rtp_min_port">Min. ports</string>
+ <string name="rtp_max_port">Maks. ports</string>
+ <string name="set_rtp_min_port">Iestatīt min. portu</string>
+ <string name="set_rtp_max_port">Iestatīt maks. portu</string>
+ <string name="set_buffer_size">Iestatīt bufera lielumu</string>
+ <string name="set_apn">Izvēlieties vēlamo APN</string>
+ <string name="setting">Iestatījumi</string>
+ <string name="server_timeout_title">"Servera noildze"</string>
+ <string name="server_timeout_message">"Pārsavienoties ar serveri, lai atskaņotu video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Savienojus neizdevās, mēģinot pieslēgties %1$d\u2026"</string>
+ <string name="media_controller_live">Dzīvajā</string>
+ <string name="media_controller_playing">Spēlē</string>
+ <string name="media_controller_connecting">Savienojas\u2026</string>
+ <string name="bookmark_add">"Pievienot grāmatzīmi"</string>
+ <string name="bookmark_display">"Rādīt grāmatzīmes"</string>
+ <string name="bookmark_empty">"Nav grāmatzīmju"</string>
+ <string name="bookmark_exist">"Grāmatzīme jau pastāv"</string>
+ <string name="bookmark_add_success">"Grāmatzīme pievienota"</string>
+ <string name="bookmark_list">"Grāmatzīmes"</string>
+ <string name="bookmark_title">"Virsraksts"</string>
+ <string name="bookmark_location">"Atrašanās vieta"</string>
+ <string name="delete_all">"Dzēst visu"</string>
+ <string name="default_title">"Noklusētais virsraksts"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Vairāk attēlu</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nevar atslēgt skaņu: video nav atbalstīts</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Atrašanās vietu nevar parādīt, jo nav uzstādīta kartes lietotne.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basu pastiprināšana</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekts</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audio efekti</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Šo efekte lietošanai jāpievieno austiņas.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Atvainojiet, šo video failu nevar apgriezt</string>
+</resources>
diff --git a/res/values-mk-rMK/cm_strings.xml b/res/values-mk-rMK/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-mk-rMK/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-mk-rMK/codeaurora_strings.xml b/res/values-mk-rMK/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-mk-rMK/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ml-rIN/cm_strings.xml b/res/values-ml-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ml-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ml-rIN/codeaurora_strings.xml b/res/values-ml-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ml-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-mn-rMN/cm_strings.xml b/res/values-mn-rMN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-mn-rMN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-mn-rMN/codeaurora_strings.xml b/res/values-mn-rMN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-mn-rMN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-mr-rIN/cm_strings.xml b/res/values-mr-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-mr-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-mr-rIN/codeaurora_strings.xml b/res/values-mr-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-mr-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ms-rMY/cm_strings.xml b/res/values-ms-rMY/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ms-rMY/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ms-rMY/codeaurora_strings.xml b/res/values-ms-rMY/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ms-rMY/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-my-rMM/cm_strings.xml b/res/values-my-rMM/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-my-rMM/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-my-rMM/codeaurora_strings.xml b/res/values-my-rMM/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-my-rMM/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-nb/cm_strings.xml b/res/values-nb/cm_strings.xml
new file mode 100644
index 000000000..53c51454a
--- /dev/null
+++ b/res/values-nb/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Opptakstid</string>
+</resources>
diff --git a/res/values-nb/codeaurora_strings.xml b/res/values-nb/codeaurora_strings.xml
new file mode 100644
index 000000000..eb9d70374
--- /dev/null
+++ b/res/values-nb/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Steg</string>
+ <string name="step_option_desc">TIlpassing av spoling frem/tilbake</string>
+ <string name="setp_option_three_second">3 sekunder</string>
+ <string name="setp_option_six_second">6 sekunder</string>
+ <string name="loop">"Sløyfe"</string>
+ <string name="single">"Enkel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Høytaler PÅ</string>
+ <string name="speaker_off">Høytaler AV</string>
+ <string name="speaker_need_headset">Plugg i hodetelefoner for å bruke denne funksjonen.</string>
+ <string name="single_track">"Enkelt spor"</string>
+ <string name="input_url">"Angi URL-adressen"</string>
+ <string name="streaming_settings">"Streaming innstillinger"</string>
+ <string name="next">"Neste"</string>
+ <string name="previous">"Forrige"</string>
+ <string name="buffer_size">Buffer Størrelse</string>
+ <string name="apn">Foretrukket APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Angi min port</string>
+ <string name="set_rtp_max_port">Angi maks port</string>
+ <string name="set_buffer_size">Angi størrelse på hurtigbuffer</string>
+ <string name="set_apn">Velg foretrukket APN</string>
+ <string name="setting">Innstillinger</string>
+ <string name="server_timeout_title">"Tidsavbrudd for serveren"</string>
+ <string name="server_timeout_message">"Koble til serveren på nytt for å spille av videoen?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Tilkoblingen mislyktes, prøver å koble til %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Spiller</string>
+ <string name="media_controller_connecting">Kobler til\u2026</string>
+ <string name="bookmark_add">"Legg til bokmerke"</string>
+ <string name="bookmark_display">"Vis bokmerker"</string>
+ <string name="bookmark_empty">"Ingen bokmerker"</string>
+ <string name="bookmark_exist">"Bokmerket finnes allerede"</string>
+ <string name="bookmark_add_success">"Bokmerke lagt til"</string>
+ <string name="bookmark_list">"Bokmerker"</string>
+ <string name="bookmark_title">"Tittel"</string>
+ <string name="bookmark_location">"Posisjon"</string>
+ <string name="delete_all">"Slett alle"</string>
+ <string name="default_title">"Standardtittel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Flere bilder</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kan ikke slå av lyd: videoen støttes ikke</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Det er ingen kart app installert for å vise plasseringen.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bassforsterkning</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D effekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Lydeffekter</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Plugg inn hodetelefoner for effekter.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio +</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Beklager, denne videofilen kan ikke trimmes</string>
+ <string name="no_permission_for_drm">Beklager, DRM-beskyttede filer ikke kan deles</string>
+ <string name="drm_license_info">DRM lisensinfo</string>
+</resources>
diff --git a/res/values-ne-rNP/cm_strings.xml b/res/values-ne-rNP/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ne-rNP/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ne-rNP/codeaurora_strings.xml b/res/values-ne-rNP/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ne-rNP/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-nl/cm_strings.xml b/res/values-nl/cm_strings.xml
new file mode 100644
index 000000000..b5ae58c6a
--- /dev/null
+++ b/res/values-nl/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tijd van opname</string>
+</resources>
diff --git a/res/values-nl/codeaurora_strings.xml b/res/values-nl/codeaurora_strings.xml
new file mode 100644
index 000000000..b8fb83784
--- /dev/null
+++ b/res/values-nl/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Stap</string>
+ <string name="step_option_desc">Stapgrootte vooruitspoelen/terugspoelen aanpassen</string>
+ <string name="setp_option_three_second">3 seconden</string>
+ <string name="setp_option_six_second">6 seconden</string>
+ <string name="loop">"Herhalen"</string>
+ <string name="single">"Enkel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Luidspreker AAN</string>
+ <string name="speaker_off">Luidspreker UIT</string>
+ <string name="speaker_need_headset">Sluit een koptelefoon aan om deze functie te gebruiken.</string>
+ <string name="single_track">"Enkel nummer"</string>
+ <string name="input_url">"URL invoeren"</string>
+ <string name="streaming_settings">"Instellingen voor streaming"</string>
+ <string name="next">"Volgende"</string>
+ <string name="previous">"Vorige"</string>
+ <string name="buffer_size">Buffergrootte</string>
+ <string name="apn">Voorkeurs-APN</string>
+ <string name="rtp_min_port">Min. poort</string>
+ <string name="rtp_max_port">Max. poort</string>
+ <string name="set_rtp_min_port">Minimale poort instellen</string>
+ <string name="set_rtp_max_port">Maximale poort instellen</string>
+ <string name="set_buffer_size">Buffergrootte instellen</string>
+ <string name="set_apn">Voorkeurs-APN selecteren</string>
+ <string name="setting">Instellingen</string>
+ <string name="server_timeout_title">"Time-out van de server"</string>
+ <string name="server_timeout_message">"Opnieuw verbinding maken met de server om de video af te spelen?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Verbinding mislukt, probeert opnieuw verbinding te maken met %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Afspelen</string>
+ <string name="media_controller_connecting">Verbinding maken\u2026</string>
+ <string name="bookmark_add">"Favoriet toevoegen"</string>
+ <string name="bookmark_display">"Favorieten weergeven"</string>
+ <string name="bookmark_empty">"Geen favorieten"</string>
+ <string name="bookmark_exist">"Favoriet bestaat al"</string>
+ <string name="bookmark_add_success">"Favoriet toegevoegd"</string>
+ <string name="bookmark_list">"Favorieten"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Locatie"</string>
+ <string name="delete_all">"Alles verwijderen"</string>
+ <string name="default_title">"Standaardtitel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Meer afbeeldingen</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kan geluid niet dempen: video niet ondersteund</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Er is geen kaartenapp geïnstalleerd om de locatie weer te geven.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basversterker</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-effect</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Geluidseffecten</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Sluit een koptelefoon aan voor deze effecten.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Kan deze video niet bijsnijden</string>
+ <string name="no_permission_for_drm">Sorry, DRM-beschermde bestanden kunnen niet worden gedeeld</string>
+ <string name="drm_license_info">DRM licentie-informatie</string>
+</resources>
diff --git a/res/values-oc-rFR/cm_strings.xml b/res/values-oc-rFR/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-oc-rFR/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-oc-rFR/codeaurora_strings.xml b/res/values-oc-rFR/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-oc-rFR/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-oc-rFR/filtershow_strings.xml b/res/values-oc-rFR/filtershow_strings.xml
new file mode 100644
index 000000000..ddd9262fb
--- /dev/null
+++ b/res/values-oc-rFR/filtershow_strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+</resources>
diff --git a/res/values-oc-rFR/strings.xml b/res/values-oc-rFR/strings.xml
new file mode 100644
index 000000000..80a686614
--- /dev/null
+++ b/res/values-oc-rFR/strings.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <!-- Movie View Resume Playing dialog title -->
+ <!-- Movie View Start Playing dialog title -->
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <!-- Movie View Start Playing button "Beginning" -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <!-- Toast/alert after saving wallpaper -->
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <!-- String indicating more actions are available -->
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <!-- Title of the StackView AppWidget -->
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <!-- The title of menu item where user can add a new account -->
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <!-- Label for album filmstrip button -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <!-- The label on the button that will save an edited image -->
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <!-- Status message shown when content from an external camera is being imported -->
+ <!-- Status message shown when there is no content available to be imported -->
+ <!-- Status message shown when there is no MTP device connected -->
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the error of camera hardware -->
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <!-- alert to the user to wait for some operation to complete -->
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <!-- Settings screen, setting title text -->
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <!-- Settings screen, Camera setting category title -->
+ <!-- Settings screen, Camcorder setting category title -->
+ <!-- Settings screen, Picture size title -->
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <!-- flash label [CHAR LIMIT=50] -->
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <!-- Menu, white balance label -->
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <!-- Exposure settings in preference -->
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <!-- settings label [CHAR LIMIT=50] -->
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-or-rIN/cm_strings.xml b/res/values-or-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-or-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-or-rIN/codeaurora_strings.xml b/res/values-or-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-or-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-pa-rIN/cm_strings.xml b/res/values-pa-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-pa-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-pa-rIN/codeaurora_strings.xml b/res/values-pa-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-pa-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-pl/cm_strings.xml b/res/values-pl/cm_strings.xml
new file mode 100644
index 000000000..298f51bb9
--- /dev/null
+++ b/res/values-pl/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Czas nagrania</string>
+</resources>
diff --git a/res/values-pl/codeaurora_strings.xml b/res/values-pl/codeaurora_strings.xml
new file mode 100644
index 000000000..13b5b785f
--- /dev/null
+++ b/res/values-pl/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Krok</string>
+ <string name="step_option_desc">Dostosuj stopnie przewijania/cofania</string>
+ <string name="setp_option_three_second">3 sekundy</string>
+ <string name="setp_option_six_second">6 sekund</string>
+ <string name="loop">"Pętla"</string>
+ <string name="single">"Pojedynczy"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Głośnik włączony</string>
+ <string name="speaker_off">Głośnik wyłączony</string>
+ <string name="speaker_need_headset">Podłącz słuchawki, aby skorzystać z tej funkcji.</string>
+ <string name="single_track">"Pojedynczy utwór"</string>
+ <string name="input_url">"Wprowadź adres URL"</string>
+ <string name="streaming_settings">"Ustawienia strumieniowania"</string>
+ <string name="next">"Następny"</string>
+ <string name="previous">"Poprzedni"</string>
+ <string name="buffer_size">Rozmiar bufora</string>
+ <string name="apn">Preferowany APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Ustaw min port</string>
+ <string name="set_rtp_max_port">Ustaw max port</string>
+ <string name="set_buffer_size">Ustaw rozmiar bufora</string>
+ <string name="set_apn">Wybierz preferowany APN</string>
+ <string name="setting">Ustawienia</string>
+ <string name="server_timeout_title">"Limit czasu serwera"</string>
+ <string name="server_timeout_message">"Połączyć ponownie się z serwerem, aby odtworzyć wideo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Połączenie nie powiodło się, próba odnowienia połączenia do %1$d\u2026"</string>
+ <string name="media_controller_live">Na żywo</string>
+ <string name="media_controller_playing">Odtwarzanie</string>
+ <string name="media_controller_connecting">Łączenie\u2026</string>
+ <string name="bookmark_add">"Dodaj zakładkę"</string>
+ <string name="bookmark_display">"Pokaż zakładki"</string>
+ <string name="bookmark_empty">"Brak zakładek"</string>
+ <string name="bookmark_exist">"Zakładka już istnieje"</string>
+ <string name="bookmark_add_success">"Dodano zakładkę"</string>
+ <string name="bookmark_list">"Zakładki"</string>
+ <string name="bookmark_title">"Tytuł"</string>
+ <string name="bookmark_location">"Lokalizacja"</string>
+ <string name="delete_all">"Usuń wszystkie"</string>
+ <string name="default_title">"Domyślny tytuł"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Więcej zdjęć</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nie można wyciszyć: film nieobsługiwany</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nie ma aplikacji mapy zainstalowanej, aby zobaczyć lokalizację.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Podbicie basu</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efekt 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efekty dźwiękowe</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Podłącz słuchawki dla tych efektów.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Niestety, ten plik wideo nie może zostać przycięty</string>
+ <string name="no_permission_for_drm">Wybacz, ale pliki chronione DRM nie mogą być udostępniane</string>
+ <string name="drm_license_info">Informacje o licencji DRM</string>
+</resources>
diff --git a/res/values-port/styles.xml b/res/values-port/styles.xml
index 46871c626..319b0a663 100644
--- a/res/values-port/styles.xml
+++ b/res/values-port/styles.xml
@@ -37,15 +37,15 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@color/popup_title_color</item>
- <item name="android:layout_marginLeft">10dp</item>
+ <item name="android:layout_marginStart">10dp</item>
</style>
<style name="ViewfinderLabelLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_marginTop">13dp</item>
<item name="android:layout_marginBottom">@dimen/indicator_bar_width</item>
- <item name="android:layout_marginLeft">13dp</item>
- <item name="android:layout_marginRight">13dp</item>
+ <item name="android:layout_marginStart">13dp</item>
+ <item name="android:layout_marginEnd">13dp</item>
</style>
<style name="PanoViewHorizontalBar">
<item name="android:background">#000000</item>
diff --git a/res/values-pt-rBR/cm_strings.xml b/res/values-pt-rBR/cm_strings.xml
new file mode 100644
index 000000000..12c2731d7
--- /dev/null
+++ b/res/values-pt-rBR/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tempo de gravação</string>
+</resources>
diff --git a/res/values-pt-rBR/codeaurora_strings.xml b/res/values-pt-rBR/codeaurora_strings.xml
new file mode 100644
index 000000000..fcdad4b13
--- /dev/null
+++ b/res/values-pt-rBR/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Passo</string>
+ <string name="step_option_desc">Personalizar o avanço/retrocesso rápido</string>
+ <string name="setp_option_three_second">3 segundos</string>
+ <string name="setp_option_six_second">6 segundos</string>
+ <string name="loop">"Repetir"</string>
+ <string name="single">"Único"</string>
+ <string name="stereo">"Estéreo"</string>
+ <string name="speaker_on">Alto-falante ligado</string>
+ <string name="speaker_off">Alto-falante desligado</string>
+ <string name="speaker_need_headset">Conecte fones de ouvido para usar este recurso.</string>
+ <string name="single_track">"Única faixa"</string>
+ <string name="input_url">"Insira a URL"</string>
+ <string name="streaming_settings">"Configurações de streaming"</string>
+ <string name="next">"Próximo"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Tamanho do buffer</string>
+ <string name="apn">APN preferencial</string>
+ <string name="rtp_min_port">Porta mínima</string>
+ <string name="rtp_max_port">Porta máxima</string>
+ <string name="set_rtp_min_port">Definir a porta mínima</string>
+ <string name="set_rtp_max_port">Definir a porta máxima</string>
+ <string name="set_buffer_size">Definir o tamanho do buffer</string>
+ <string name="set_apn">Selecione a APN preferida</string>
+ <string name="setting">Configurações</string>
+ <string name="server_timeout_title">"Tempo de espera do servidor"</string>
+ <string name="server_timeout_message">"Reconectar ao servidor para reproduzir o vídeo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Falha na conexão, tentando reconectar ao %1$d\u2026"</string>
+ <string name="media_controller_live">Ao vivo</string>
+ <string name="media_controller_playing">Reproduzindo</string>
+ <string name="media_controller_connecting">Conectando\u2026</string>
+ <string name="bookmark_add">"Adicionar favorito"</string>
+ <string name="bookmark_display">"Visualizar favoritos"</string>
+ <string name="bookmark_empty">"Não há favoritos"</string>
+ <string name="bookmark_exist">"O favorito já existe"</string>
+ <string name="bookmark_add_success">"Favorito adicionado"</string>
+ <string name="bookmark_list">"Favoritos"</string>
+ <string name="bookmark_title">"Título"</string>
+ <string name="bookmark_location">"Localização"</string>
+ <string name="delete_all">"Apagar tudo"</string>
+ <string name="default_title">"Título padrão"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Mais imagens</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Impossivel silenciar: vídeo não suportado</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Não há aplicativo de mapas instalado para mostrar o local.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Ganho de grave</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efeito 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efeitos de áudio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Conecte fones de ouvido para estes efeitos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Desculpe, o arquivo de vídeo não pode ser cortado</string>
+ <string name="no_permission_for_drm">Desculpe, arquivos protegidos por DRM não podem ser compartilhados</string>
+ <string name="drm_license_info">Informação de licença DRM</string>
+</resources>
diff --git a/res/values-pt-rPT/cm_strings.xml b/res/values-pt-rPT/cm_strings.xml
new file mode 100644
index 000000000..12c2731d7
--- /dev/null
+++ b/res/values-pt-rPT/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Tempo de gravação</string>
+</resources>
diff --git a/res/values-pt-rPT/codeaurora_strings.xml b/res/values-pt-rPT/codeaurora_strings.xml
new file mode 100644
index 000000000..54fee9d26
--- /dev/null
+++ b/res/values-pt-rPT/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Intervalo</string>
+ <string name="step_option_desc">Personalizar o avanço/retrocesso rápido</string>
+ <string name="setp_option_three_second">3 segundos</string>
+ <string name="setp_option_six_second">6 segundos</string>
+ <string name="loop">"Repetir"</string>
+ <string name="single">"Simples"</string>
+ <string name="stereo">"Estéreo"</string>
+ <string name="speaker_on">Altifalante ligado</string>
+ <string name="speaker_off">Altifalante desligado</string>
+ <string name="speaker_need_headset">Ligue o auricular para usar este recurso.</string>
+ <string name="single_track">"Faixa única"</string>
+ <string name="input_url">"Insira a URL"</string>
+ <string name="streaming_settings">"Definições de transmissão"</string>
+ <string name="next">"Próximo"</string>
+ <string name="previous">"Anterior"</string>
+ <string name="buffer_size">Tamanho do buffer</string>
+ <string name="apn">APN preferida</string>
+ <string name="rtp_min_port">Porta mínima</string>
+ <string name="rtp_max_port">Porta máxima</string>
+ <string name="set_rtp_min_port">Definir a porta mínima</string>
+ <string name="set_rtp_max_port">Definir a porta máxima</string>
+ <string name="set_buffer_size">Definir o tamanho do buffer</string>
+ <string name="set_apn">Selecionar a APN preferida</string>
+ <string name="setting">Definições</string>
+ <string name="server_timeout_title">"Tempo de espera do servidor"</string>
+ <string name="server_timeout_message">"Reconectar ao servidor para reproduzir o vídeo?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Falha na ligação. A tentar reconectar-se a %1$d\u2026"</string>
+ <string name="media_controller_live">Ao vivo</string>
+ <string name="media_controller_playing">A reproduzir</string>
+ <string name="media_controller_connecting">A ligar\u2026</string>
+ <string name="bookmark_add">"Adicionar favorito"</string>
+ <string name="bookmark_display">"Visualizar favoritos"</string>
+ <string name="bookmark_empty">"Sem favoritos"</string>
+ <string name="bookmark_exist">"O favorito já existe"</string>
+ <string name="bookmark_add_success">"Favorito adicionado"</string>
+ <string name="bookmark_list">"Favoritos"</string>
+ <string name="bookmark_title">"Título"</string>
+ <string name="bookmark_location">"Localização"</string>
+ <string name="delete_all">"Apagar tudo"</string>
+ <string name="default_title">"Título padrão"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Mais imagens</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Não pode silenciar: vídeo não suportado</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Não há nenhuma aplicaçação de mapas instalada para mostrar o local.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Aumento dos Baixos</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efeito 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efeitos Áudio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Ligar o auricular para utilizar estes efeitos.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Desculpe, mas este vídeo não pode ser cortado</string>
+ <string name="no_permission_for_drm">Desculpe, mas ficheiros protegidos por DRM não podem ser partilhados</string>
+ <string name="drm_license_info">Informação da licença DRM</string>
+</resources>
diff --git a/res/values-rm/cm_strings.xml b/res/values-rm/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-rm/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-rm/codeaurora_strings.xml b/res/values-rm/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-rm/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ro/cm_strings.xml b/res/values-ro/cm_strings.xml
new file mode 100644
index 000000000..f671ac89f
--- /dev/null
+++ b/res/values-ro/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Dată înregistrare</string>
+</resources>
diff --git a/res/values-ro/codeaurora_strings.xml b/res/values-ro/codeaurora_strings.xml
new file mode 100644
index 000000000..081e1f2e9
--- /dev/null
+++ b/res/values-ro/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Pas</string>
+ <string name="step_option_desc">Personalizează pasul derulării/înaintării rapide</string>
+ <string name="setp_option_three_second">3 secunde</string>
+ <string name="setp_option_six_second">6 secunde</string>
+ <string name="loop">"Buclă"</string>
+ <string name="single">"Singur"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Difuzor pornit</string>
+ <string name="speaker_off">Difuzor oprit</string>
+ <string name="speaker_need_headset">Conectați căștile pentru a utiliza această caracteristică.</string>
+ <string name="single_track">"Linie singulară"</string>
+ <string name="input_url">"Introduceți URL-ul"</string>
+ <string name="streaming_settings">"Setările de streaming"</string>
+ <string name="next">"Următoarea"</string>
+ <string name="previous">"Înapoi"</string>
+ <string name="buffer_size">Dimensiune tampon</string>
+ <string name="apn">APN preferat</string>
+ <string name="rtp_min_port">Port minim</string>
+ <string name="rtp_max_port">Port maxim</string>
+ <string name="set_rtp_min_port">Setează portul minim</string>
+ <string name="set_rtp_max_port">Setează portul maxim</string>
+ <string name="set_buffer_size">Setează dimensiune tampon</string>
+ <string name="set_apn">Selectați APN preferat</string>
+ <string name="setting">Setări</string>
+ <string name="server_timeout_title">"Expirare server"</string>
+ <string name="server_timeout_message">"Reconectați la server pentru a reda video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Conexiunea a eșuat, se încearcă reconectarea la %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Redând</string>
+ <string name="media_controller_connecting">Se conectează\u2026</string>
+ <string name="bookmark_add">"Adaugă semn de carte"</string>
+ <string name="bookmark_display">"Arată semne de carte"</string>
+ <string name="bookmark_empty">"Fără semne de carte"</string>
+ <string name="bookmark_exist">"Semnul de carte există deja"</string>
+ <string name="bookmark_add_success">"Semn de carte adăugat"</string>
+ <string name="bookmark_list">"Semne de carte"</string>
+ <string name="bookmark_title">"Titlu"</string>
+ <string name="bookmark_location">"Locație"</string>
+ <string name="delete_all">"Șterge toate"</string>
+ <string name="default_title">"Titlul implicit"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Mai multe imagini</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nu puteți dezactiva volumul: videoul nu este acceptat</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nu există nicio aplicație cu hărți instalată care să arate locația.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Amplificare Bas</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Efect 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Efecte audio</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Conectați căști pentru aceste efecte.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Ne pare rău, acest fișier video nu poate fi tăiat</string>
+ <string name="no_permission_for_drm">Scuze, fișierele protejate DRM nu pot fi partajate</string>
+ <string name="drm_license_info">Informații licență DRM</string>
+</resources>
diff --git a/res/values-ru/cm_strings.xml b/res/values-ru/cm_strings.xml
new file mode 100644
index 000000000..444a963bc
--- /dev/null
+++ b/res/values-ru/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Время записи</string>
+</resources>
diff --git a/res/values-ru/codeaurora_strings.xml b/res/values-ru/codeaurora_strings.xml
new file mode 100644
index 000000000..6bd381b98
--- /dev/null
+++ b/res/values-ru/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Шаг перемотки</string>
+ <string name="step_option_desc">Настройка интервала для быстрой перемотки вперёд или назад</string>
+ <string name="setp_option_three_second">3 секунды</string>
+ <string name="setp_option_six_second">6 секунд</string>
+ <string name="loop">"Зациклить"</string>
+ <string name="single">"Однократно"</string>
+ <string name="stereo">"Стерео"</string>
+ <string name="speaker_on">Вкл. динамик</string>
+ <string name="speaker_off">Выкл. динамик</string>
+ <string name="speaker_need_headset">Подключите наушники для использования этой функции.</string>
+ <string name="single_track">"Один трек"</string>
+ <string name="input_url">"Введите URL"</string>
+ <string name="streaming_settings">"Потоковая передача"</string>
+ <string name="next">"След."</string>
+ <string name="previous">"Пред."</string>
+ <string name="buffer_size">Размер буфера передачи</string>
+ <string name="apn">Точка доступа по умолчанию</string>
+ <string name="rtp_min_port">Минимальный порт</string>
+ <string name="rtp_max_port">Максимальный порт</string>
+ <string name="set_rtp_min_port">Установка мин. номера порта</string>
+ <string name="set_rtp_max_port">Установка макс. номера порта</string>
+ <string name="set_buffer_size">Установка размера буфера передачи</string>
+ <string name="set_apn">Предпочтительная точка доступа</string>
+ <string name="setting">Настройки</string>
+ <string name="server_timeout_title">"Время ожидания сервера"</string>
+ <string name="server_timeout_message">"Переподключиться к серверу для воспроизведения видеофайла?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Сбой связи. Повторное подключение к %1$d\u2026"</string>
+ <string name="media_controller_live">Прямой эфир</string>
+ <string name="media_controller_playing">Воспроизведение</string>
+ <string name="media_controller_connecting">Подключение\u2026</string>
+ <string name="bookmark_add">"Добавить закладку"</string>
+ <string name="bookmark_display">"Показать закладки"</string>
+ <string name="bookmark_empty">"Нет закладок"</string>
+ <string name="bookmark_exist">"Закладка уже создана"</string>
+ <string name="bookmark_add_success">"Закладка добавлена"</string>
+ <string name="bookmark_list">"Закладки"</string>
+ <string name="bookmark_title">"Название"</string>
+ <string name="bookmark_location">"Местоположение"</string>
+ <string name="delete_all">"Удалить все"</string>
+ <string name="default_title">"Заголовок по умолчанию"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Другие изображения</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Невозможно отключить звук: видеофайл не поддерживается</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Приложение для работы с картами не установлено. Показ местоположения невозможен.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Усил. баса</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-эффект</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Аудиоэффекты</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Подключите наушники для использования эффектов.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Этот видеофайл невозможно обрезать</string>
+ <string name="no_permission_for_drm">Отправка файлов с защитой DRM невозможна</string>
+ <string name="drm_license_info">Сведения о лицензии DRM</string>
+</resources>
diff --git a/res/values-si-rLK/cm_strings.xml b/res/values-si-rLK/cm_strings.xml
new file mode 100644
index 000000000..d9298e83f
--- /dev/null
+++ b/res/values-si-rLK/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">රෙකෝඩිත වේලාව</string>
+</resources>
diff --git a/res/values-si-rLK/codeaurora_strings.xml b/res/values-si-rLK/codeaurora_strings.xml
new file mode 100644
index 000000000..dff4c3ddc
--- /dev/null
+++ b/res/values-si-rLK/codeaurora_strings.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="step_option_desc">ශීඝ්‍රව ඉදිරියට/පසුධාවන පියවර රිසිකරණය</string>
+ <string name="loop">"ලූපය"</string>
+ <string name="single">"තනිකඩ"</string>
+ <string name="stereo">"ත්‍රිමාන"</string>
+ <string name="speaker_on">ස්පීකරය සක්‍රීයයි</string>
+ <string name="speaker_off">ස්පීකරය අක්‍රීයයි</string>
+ <string name="speaker_need_headset">මෙම විශේෂාංගය භාවිතයට ඉස් බණුව පේනුගත කරන්න.</string>
+ <string name="single_track">"තනි ඛණ්ඩය"</string>
+ <string name="input_url">"URL ඇතුළත් කරන්න"</string>
+ <string name="streaming_settings">"ප්‍රවාහන සැකසීම්"</string>
+ <string name="next">"ඊළඟ"</string>
+ <string name="previous">"පෙර"</string>
+ <string name="buffer_size">බෆර ප්‍රමාණය</string>
+ <string name="apn">වඩා ලැදි APN ය</string>
+ <string name="rtp_min_port">අවම තොට</string>
+ <string name="rtp_max_port">උපරිම තොට</string>
+ <string name="set_rtp_min_port">අවම තොට සකසන්න</string>
+ <string name="set_rtp_max_port">උපරිම තොට සකසන්න</string>
+ <string name="set_buffer_size">බෆර ප්‍රමාණය සකසන්න</string>
+ <string name="set_apn">වඩා ලැදි APN ය තෝරන්න</string>
+ <string name="setting">සැකසීම්</string>
+ <string name="server_timeout_title">"සේවාදායකය කල්ඉකුත් විය"</string>
+ <string name="server_timeout_message">"වීඩියෝව ධාවනය සඳහා සේවාදායකයට යලි සම්බන්ධ වන්නද?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"සම්බන්ධය අසමත්විය, %1$d වෙත යලි සම්බන්ධවීමට උත්සාහ කරමින්\u2026"</string>
+ <string name="media_controller_live">සජීවී</string>
+ <string name="media_controller_playing">ධාවනය කරමින්</string>
+ <string name="media_controller_connecting">සම්බන්ධ වෙමින්\u2026</string>
+ <string name="bookmark_add">"පොත් යොමුවක් එක් කරන්න"</string>
+ <string name="bookmark_display">"පොත් යොමු පෙන්වන්න"</string>
+ <string name="bookmark_empty">"පොත් යොමු නැත"</string>
+ <string name="bookmark_exist">"පොත් යොමුව දැනටමත් පවතී"</string>
+ <string name="bookmark_add_success">"පොත් යොමුව එක් කෙරුණි"</string>
+ <string name="bookmark_list">"පොත් යොමු"</string>
+ <string name="bookmark_title">"පටබැඳිනාමය"</string>
+ <string name="bookmark_location">"ස්ථානය"</string>
+ <string name="delete_all">"සියල්ල මකන්න"</string>
+ <string name="default_title">"පෙරනිමි පටබැඳිනාමය"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">නිශ්ශබ්ද කල නොහැක : සහාය නොදක්වන වීඩියෝවකි</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">බේස් වැඩිවීම</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D බලපෑම</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">ශ්‍රව්‍ය බලපෑම්</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">මෙම බලපෑම් සඳහා ඉස් බණුව පේනුගත කරන්න.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon ශ්‍රව්‍ය+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">කනගාටුයි, මෙම වීඩියෝ ගොනුව කොට කල නොහැක</string>
+</resources>
diff --git a/res/values-sk/cm_strings.xml b/res/values-sk/cm_strings.xml
new file mode 100644
index 000000000..48c928931
--- /dev/null
+++ b/res/values-sk/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Čas nahrania</string>
+</resources>
diff --git a/res/values-sk/codeaurora_strings.xml b/res/values-sk/codeaurora_strings.xml
new file mode 100644
index 000000000..1e59a851a
--- /dev/null
+++ b/res/values-sk/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Krok</string>
+ <string name="step_option_desc">Prispôsobiť krok rýchleho pretočenia dopredu/dozadu</string>
+ <string name="setp_option_three_second">3 sekundy</string>
+ <string name="setp_option_six_second">6 sekúnd</string>
+ <string name="loop">"Opakovanie"</string>
+ <string name="single">"Jednoduchý"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Zapnúť reproduktor</string>
+ <string name="speaker_off">Vypnúť reproduktor</string>
+ <string name="speaker_need_headset">Pripojte slúchadlá pre použitie tejto funkcie.</string>
+ <string name="single_track">"Jedna stopa"</string>
+ <string name="input_url">"Zadať adresu URL"</string>
+ <string name="streaming_settings">"Nastavenia streamovania"</string>
+ <string name="next">"Ďalšie"</string>
+ <string name="previous">"Predchádzajúce"</string>
+ <string name="buffer_size">Veľkosť vyrovnávacej pamäte</string>
+ <string name="apn">Uprednostňovaný prístupový bod</string>
+ <string name="rtp_min_port">Minimálny port</string>
+ <string name="rtp_max_port">Maximálny port</string>
+ <string name="set_rtp_min_port">Nastaviť minimálny port</string>
+ <string name="set_rtp_max_port">Nastaviť maximálny port</string>
+ <string name="set_buffer_size">Nastaviť veľkosť vyrovnávacej pamäte</string>
+ <string name="set_apn">Vybrať uprednostňovaný prístupový bod</string>
+ <string name="setting">Nastavenia</string>
+ <string name="server_timeout_title">"Časový limit servera"</string>
+ <string name="server_timeout_message">"Pripojiť sa znova k serveru pre prehrávanie videa?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Pripojenie zlyhalo, pokúšanie sa o opätovné pripojenie k %1$d\u2026"</string>
+ <string name="media_controller_live">Naživo</string>
+ <string name="media_controller_playing">Prehrávanie</string>
+ <string name="media_controller_connecting">Pripájanie\u2026</string>
+ <string name="bookmark_add">"Pridať záložku"</string>
+ <string name="bookmark_display">"Zobraziť záložky"</string>
+ <string name="bookmark_empty">"Žiadne záložky"</string>
+ <string name="bookmark_exist">"Záložka už existuje"</string>
+ <string name="bookmark_add_success">"Záložka bola pridaná"</string>
+ <string name="bookmark_list">"Záložky"</string>
+ <string name="bookmark_title">"Názov"</string>
+ <string name="bookmark_location">"Poloha"</string>
+ <string name="delete_all">"Vymazať všetky"</string>
+ <string name="default_title">"Predvolený názov"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Viac obrázkov</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Nie je možné stíšiť: video nie je podporované</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Nie je nainštalovaná žiadna mapová aplikácia pre zobrazenie polohy.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Zosilnenie basov</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Zvukové efekty</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Pre tieto efekty pripojte slúchadlá.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Zvuk+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Prepáčte, ale toto video nie je možné orezať</string>
+ <string name="no_permission_for_drm">Ospravedlňujeme sa, nie je možné zdieľať súbory chránené DRM</string>
+ <string name="drm_license_info">Informácie o licencii DRM</string>
+</resources>
diff --git a/res/values-sl/cm_strings.xml b/res/values-sl/cm_strings.xml
new file mode 100644
index 000000000..a4acab3d8
--- /dev/null
+++ b/res/values-sl/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Čas snemanja</string>
+</resources>
diff --git a/res/values-sl/codeaurora_strings.xml b/res/values-sl/codeaurora_strings.xml
new file mode 100644
index 000000000..5fc9b63eb
--- /dev/null
+++ b/res/values-sl/codeaurora_strings.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Korak</string>
+ <string name="step_option_desc">Prilagodi korak za pomik najprej/nazaj</string>
+ <string name="setp_option_three_second">3 sekunde</string>
+ <string name="setp_option_six_second">6 sekund</string>
+ <string name="loop">"Zanka"</string>
+ <string name="single">"Posamezni"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">VKLOPI zvočnik</string>
+ <string name="speaker_off">IZKLOPI zvočnik</string>
+ <string name="speaker_need_headset">Priključite slušalke za uporabo te značilnosti.</string>
+ <string name="single_track">"Posamezna skladba"</string>
+ <string name="input_url">"Vnesite URL"</string>
+ <string name="streaming_settings">"Nastavitve pretakanja"</string>
+ <string name="next">"Naprej"</string>
+ <string name="previous">"Prejšnji"</string>
+ <string name="buffer_size">Velikost medpomnilnika</string>
+ <string name="apn">Priljubljeni APN</string>
+ <string name="rtp_min_port">Najmanjše št. vrat</string>
+ <string name="rtp_max_port">Največje št. vrat</string>
+ <string name="set_rtp_min_port">Nastavite najmanjše št . vrat</string>
+ <string name="set_rtp_max_port">Nastavite največje št . vrat</string>
+ <string name="set_buffer_size">Nastavite velikost medpomnilnika</string>
+ <string name="set_apn">Izberite priljubljeni APN</string>
+ <string name="setting">Nastavitve</string>
+ <string name="server_timeout_title">"Časovna omejitev strežnika"</string>
+ <string name="server_timeout_message">"Ponovno se poveži na strežnik za predvajanje videoposnetka?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Povezava je spodletela, poskušanje ponovne povezave na %1$d \u2026"</string>
+ <string name="media_controller_live">V živo</string>
+ <string name="media_controller_playing">Predvaja se</string>
+ <string name="media_controller_connecting">Povezovanje \u2026</string>
+ <string name="bookmark_add">"Dodaj zaznamek"</string>
+ <string name="bookmark_display">"Prikaži zaznamke"</string>
+ <string name="bookmark_empty">"Ni zaznamkov"</string>
+ <string name="bookmark_exist">"Zaznamek že obstaja"</string>
+ <string name="bookmark_add_success">"Zaznamek dodan"</string>
+ <string name="bookmark_list">"Zaznamki"</string>
+ <string name="bookmark_title">"Naslov"</string>
+ <string name="bookmark_location">"Mesto"</string>
+ <string name="delete_all">"Izbriši vse"</string>
+ <string name="default_title">"Privzeti naslov"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Več slik</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Utišanje ni mogoče: videoposnetki niso podprti</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Ojačevalec nizkih tonov</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Učinki 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Zvočni učinki</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Priključite slušalke za te učinke.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Žal te datoteke videoposnetka ni mogoče obrezati</string>
+ <string name="no_permission_for_drm">Žal datotek zaščitenih z DRM-om ni mogoče deliti</string>
+ <string name="drm_license_info">Podatki licence DRM</string>
+</resources>
diff --git a/res/values-sq-rAL/cm_strings.xml b/res/values-sq-rAL/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-sq-rAL/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-sq-rAL/codeaurora_strings.xml b/res/values-sq-rAL/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-sq-rAL/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-sr/cm_strings.xml b/res/values-sr/cm_strings.xml
new file mode 100644
index 000000000..36c4cb82e
--- /dev/null
+++ b/res/values-sr/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Време снимања</string>
+</resources>
diff --git a/res/values-sr/codeaurora_strings.xml b/res/values-sr/codeaurora_strings.xml
new file mode 100644
index 000000000..5dcc88b2a
--- /dev/null
+++ b/res/values-sr/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Корак</string>
+ <string name="step_option_desc">Прилагоди брзи корак унапред/уназад</string>
+ <string name="setp_option_three_second">3 секунде</string>
+ <string name="setp_option_six_second">6 секунди</string>
+ <string name="loop">"Понови"</string>
+ <string name="single">"Појединачно"</string>
+ <string name="stereo">"Стерео"</string>
+ <string name="speaker_on">Звучник УКЉУЧЕН</string>
+ <string name="speaker_off">Звучник ИСКЉУЧЕН</string>
+ <string name="speaker_need_headset">Прикључи слушалице да користиш ову функцију.</string>
+ <string name="single_track">"Појединачна нумера"</string>
+ <string name="input_url">"Унеси URL"</string>
+ <string name="streaming_settings">"Подешавања streaming-а"</string>
+ <string name="next">"Следеће"</string>
+ <string name="previous">"Претходно"</string>
+ <string name="buffer_size">Величина buffer-а</string>
+ <string name="apn">Жељени APN</string>
+ <string name="rtp_min_port">Мин. порт</string>
+ <string name="rtp_max_port">Макс. порт</string>
+ <string name="set_rtp_min_port">Постави мин. порт</string>
+ <string name="set_rtp_max_port">Постави макс порт</string>
+ <string name="set_buffer_size">Постави величину buffer-а</string>
+ <string name="set_apn">Изабери жељени APN</string>
+ <string name="setting">Подешавања</string>
+ <string name="server_timeout_title">"Време сервера је истекло"</string>
+ <string name="server_timeout_message">"Поново повежи на сервер да репродукујеш видео?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Повезивање није успело, покушавање поновног повезивања на %1$d\u2026"</string>
+ <string name="media_controller_live">Уживо</string>
+ <string name="media_controller_playing">Репродукција</string>
+ <string name="media_controller_connecting">Повезивање\u2026</string>
+ <string name="bookmark_add">"Додај обележивач"</string>
+ <string name="bookmark_display">"Прикажи обележиваче"</string>
+ <string name="bookmark_empty">"Нема обележивача"</string>
+ <string name="bookmark_exist">"Обележивач већ постоји"</string>
+ <string name="bookmark_add_success">"Обележивач додат"</string>
+ <string name="bookmark_list">"Обележивачи"</string>
+ <string name="bookmark_title">"Наслов"</string>
+ <string name="bookmark_location">"Локација"</string>
+ <string name="delete_all">"Избриши све"</string>
+ <string name="default_title">"Подразумевани наслов"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Још слика</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Не може се искључити: видео није подржан</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Нема апликације мапа инсталиране да прикаже локацију.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Појачање басова</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D ефекат</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Аудио ефекти</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Прикључи слушалице за ове ефекте.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Жао нам је, овај видео фајл не може бити скраћен</string>
+ <string name="no_permission_for_drm">Извини, DRM заштићене фајлове није могуће делити</string>
+ <string name="drm_license_info">Информације о DRM лиценци</string>
+</resources>
diff --git a/res/values-sv/cm_strings.xml b/res/values-sv/cm_strings.xml
new file mode 100644
index 000000000..df74a19d9
--- /dev/null
+++ b/res/values-sv/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Inspelningstid</string>
+</resources>
diff --git a/res/values-sv/codeaurora_strings.xml b/res/values-sv/codeaurora_strings.xml
new file mode 100644
index 000000000..fe39cf16d
--- /dev/null
+++ b/res/values-sv/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Steg</string>
+ <string name="step_option_desc">Anpassa snabbspolningssteg framåt/bakåt</string>
+ <string name="setp_option_three_second">3 sekunder</string>
+ <string name="setp_option_six_second">6 sekunder</string>
+ <string name="loop">"Repetera"</string>
+ <string name="single">"Enkel"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Högtalare PÅ</string>
+ <string name="speaker_off">Högtalare AV</string>
+ <string name="speaker_need_headset">Anslut hörlurarna för att använda denna funktion.</string>
+ <string name="single_track">"Enkelt spår"</string>
+ <string name="input_url">"Ange URL"</string>
+ <string name="streaming_settings">"Inställningar för direktuppspelning"</string>
+ <string name="next">"Nästa"</string>
+ <string name="previous">"Föregående"</string>
+ <string name="buffer_size">Bufferstorlek</string>
+ <string name="apn">Förvald APN</string>
+ <string name="rtp_min_port">Lägsta portnummer</string>
+ <string name="rtp_max_port">Högsta portnummer</string>
+ <string name="set_rtp_min_port">Ange lägsta portnummer</string>
+ <string name="set_rtp_max_port">Ange högsta portnummer</string>
+ <string name="set_buffer_size">Ange buffertstorlek</string>
+ <string name="set_apn">Välj önskad APN</string>
+ <string name="setting">Inställningar</string>
+ <string name="server_timeout_title">"Server-timeout"</string>
+ <string name="server_timeout_message">"Återanslut till servern för att spela videon?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Anslutning misslyckades, försöker återansluta till %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Spelar</string>
+ <string name="media_controller_connecting">Ansluter\u2026</string>
+ <string name="bookmark_add">"Lägg till bokmärke"</string>
+ <string name="bookmark_display">"Visa bokmärken"</string>
+ <string name="bookmark_empty">"Inga bokmärken"</string>
+ <string name="bookmark_exist">"Bokmärket finns redan"</string>
+ <string name="bookmark_add_success">"Bokmärke tillagt"</string>
+ <string name="bookmark_list">"Bokmärken"</string>
+ <string name="bookmark_title">"Titel"</string>
+ <string name="bookmark_location">"Plats"</string>
+ <string name="delete_all">"Ta bort alla"</string>
+ <string name="default_title">"Förvald titel"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Fler bilder</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Kan inte stänga av ljudet: video stöds inte</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Det finns ingen kartapplikation installerad för att visa platsen.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Basförstärkning</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-effekt</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Ljudeffekter</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Koppla in hörlurar för dessa effekter.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Tyvärr, denna videofil kan inte klippas</string>
+ <string name="no_permission_for_drm">Tyvärr, DRM-skyddade filer kan inte delas</string>
+ <string name="drm_license_info">Information om DRM-licens</string>
+</resources>
diff --git a/res/values-sw/cm_strings.xml b/res/values-sw/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-sw/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-sw/codeaurora_strings.xml b/res/values-sw/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-sw/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-ta-rIN/cm_strings.xml b/res/values-ta-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ta-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ta-rIN/codeaurora_strings.xml b/res/values-ta-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ta-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-te-rIN/cm_strings.xml b/res/values-te-rIN/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-te-rIN/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-te-rIN/codeaurora_strings.xml b/res/values-te-rIN/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-te-rIN/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-th/cm_strings.xml b/res/values-th/cm_strings.xml
new file mode 100644
index 000000000..f07442701
--- /dev/null
+++ b/res/values-th/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">เวลาบันทึก</string>
+</resources>
diff --git a/res/values-th/codeaurora_strings.xml b/res/values-th/codeaurora_strings.xml
new file mode 100644
index 000000000..e98cb19df
--- /dev/null
+++ b/res/values-th/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">ขั้นตอน</string>
+ <string name="step_option_desc">ปรับแต่งการไปข้างหน้า/การถอยกลับ</string>
+ <string name="setp_option_three_second">3 วินาที</string>
+ <string name="setp_option_six_second">6 วินาที</string>
+ <string name="loop">"วน"</string>
+ <string name="single">"เดี่ยว"</string>
+ <string name="stereo">"สเตอริโอ"</string>
+ <string name="speaker_on">เปิดลำโพง</string>
+ <string name="speaker_off">ปิดลำโพง</string>
+ <string name="speaker_need_headset">เสียบหูฟังเพื่อใช้คุณสมบัตินี้</string>
+ <string name="single_track">"แทรคเดี่ยว"</string>
+ <string name="input_url">"ป้อน URL"</string>
+ <string name="streaming_settings">"การตั้งค่าสตรีมมิ่ง"</string>
+ <string name="next">"ถัดไป"</string>
+ <string name="previous">"ก่อนหน้า"</string>
+ <string name="buffer_size">ขนาดของบัฟเฟอร์</string>
+ <string name="apn">APN ที่ต้องการ</string>
+ <string name="rtp_min_port">พอร์ตต่ำสุด</string>
+ <string name="rtp_max_port">พอร์ตสูงสุด</string>
+ <string name="set_rtp_min_port">ตั้งพอร์ตต่ำสุด</string>
+ <string name="set_rtp_max_port">ตั้งพอร์ดสูงสุด</string>
+ <string name="set_buffer_size">ตั้งขนาดบัฟเฟอร์</string>
+ <string name="set_apn">เลือก APN ที่ต้องการ</string>
+ <string name="setting">การตั้งค่า</string>
+ <string name="server_timeout_title">"หมดเวลาเชื่อมต่อเซิฟเวอร์"</string>
+ <string name="server_timeout_message">"เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งเพื่อเล่นวิดีโอหรือไม่"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"เชื่อมต่อล้มเหลว พยายามเชื่อมต่ออีกครั้งไปที่ %1$d\u2026"</string>
+ <string name="media_controller_live">ถ่ายทอดสด</string>
+ <string name="media_controller_playing">กำลังเล่น</string>
+ <string name="media_controller_connecting">กำลังเชื่อมต่อ\u2026</string>
+ <string name="bookmark_add">"เพิ่มคั่นหน้า"</string>
+ <string name="bookmark_display">"แสดงบุ๊คมาร์ค"</string>
+ <string name="bookmark_empty">"ไม่มีบุ๊คมาร์ค"</string>
+ <string name="bookmark_exist">"มีบุ๊คมาร์คอยู่แล้ว"</string>
+ <string name="bookmark_add_success">"เพิ่มบุ๊คมาร์คแล้ว"</string>
+ <string name="bookmark_list">"บุ๊คมาร์ค"</string>
+ <string name="bookmark_title">"ชื่อเรื่อง"</string>
+ <string name="bookmark_location">"ตำแหน่งที่ตั้ง"</string>
+ <string name="delete_all">"ลบทั้งหมด"</string>
+ <string name="default_title">"ชื่อเริ่มต้น"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">ภาพเพิ่มเติม</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">ไม่สามารถปิดเสียงได้ : วิดีโอไม่รองรับ</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">ไม่มีแอปแผนที่ติดตั้งอยู่เพื่อใช้แสดงตำแหน่งที่ตั้ง</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">เพิ่มเสียงเบส</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">เอฟเฟกต์ 3 มิติ</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">เอฟเฟกต์เสียง</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">เสียบหูฟังสำหรับเอฟเฟกต์เหล่านี้</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">ขออภัย ไม่สามารถตัดแต่งวิดีโอนี้ได้</string>
+ <string name="no_permission_for_drm">ขออภัย ไฟล์ DRM ที่ได้รับการปกป้อง ไม่สามารถแบ่งปันได้</string>
+ <string name="drm_license_info">ข้อมูลสิทธิ์การใช้ DRM</string>
+</resources>
diff --git a/res/values-tr/cm_strings.xml b/res/values-tr/cm_strings.xml
new file mode 100644
index 000000000..37b59ecbe
--- /dev/null
+++ b/res/values-tr/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Kayıt zamanı</string>
+</resources>
diff --git a/res/values-tr/codeaurora_strings.xml b/res/values-tr/codeaurora_strings.xml
new file mode 100644
index 000000000..05f302520
--- /dev/null
+++ b/res/values-tr/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Aralık</string>
+ <string name="step_option_desc">Hızlı ileri/geri sarma aralıklarını özelleştir</string>
+ <string name="setp_option_three_second">3 saniye</string>
+ <string name="setp_option_six_second">6 saniye</string>
+ <string name="loop">"Döngü"</string>
+ <string name="single">"Tek"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Hoparlör AÇIK</string>
+ <string name="speaker_off">Hoparlör KAPALI</string>
+ <string name="speaker_need_headset">Bu özelliği kullanmak için kulaklık takın.</string>
+ <string name="single_track">"Tek parça"</string>
+ <string name="input_url">"URL girin"</string>
+ <string name="streaming_settings">"Akış ayarları"</string>
+ <string name="next">"Sonraki"</string>
+ <string name="previous">"Önceki"</string>
+ <string name="buffer_size">Ara bellek boyutu</string>
+ <string name="apn">Tercih edilen APN</string>
+ <string name="rtp_min_port">Min bağlantı noktası</string>
+ <string name="rtp_max_port">Maks bağlantı noktası</string>
+ <string name="set_rtp_min_port">Min bağlantı noktasını ayarla</string>
+ <string name="set_rtp_max_port">Max bağlantı noktasını ayarla</string>
+ <string name="set_buffer_size">Ara bellek boyutunu ayarla</string>
+ <string name="set_apn">Tercih edilen APN\'yi seçin</string>
+ <string name="setting">Ayarlar</string>
+ <string name="server_timeout_title">"Sunucu zaman aşımı"</string>
+ <string name="server_timeout_message">"Videoyu oynatmak için sunucuya yeniden bağlanılsın mı?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Bağlantı başarısız, %1$d için yeniden bağlantı kuruluyor\u2026"</string>
+ <string name="media_controller_live">Canlı</string>
+ <string name="media_controller_playing">Çalınıyor</string>
+ <string name="media_controller_connecting">Bağlanıyor\u2026</string>
+ <string name="bookmark_add">"Yer işareti ekle"</string>
+ <string name="bookmark_display">"Yer işaretlerini göster"</string>
+ <string name="bookmark_empty">"Yer işareti yok"</string>
+ <string name="bookmark_exist">"Yer işareti zaten var"</string>
+ <string name="bookmark_add_success">"Yer işareti eklendi"</string>
+ <string name="bookmark_list">"Yer işaretleri"</string>
+ <string name="bookmark_title">"Başlık"</string>
+ <string name="bookmark_location">"Konum"</string>
+ <string name="delete_all">"Tümünü sil"</string>
+ <string name="default_title">"Varsayılan başlık"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Daha çok resim</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Susturulamıyor : video desteklemiyor</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Konum göstermek için yüklü harita uygulaması yok.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bas yükseltici</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D efekti</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Ses efektleri</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Bu efektler için kulaklık takın.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Üzgünüz, bu video kesilemiyor</string>
+ <string name="no_permission_for_drm">Üzgünüz, DHY korumalı dosyalar paylaşılamaz</string>
+ <string name="drm_license_info">DHY lisans bilgisi</string>
+</resources>
diff --git a/res/values-ug/cm_strings.xml b/res/values-ug/cm_strings.xml
new file mode 100644
index 000000000..281acb013
--- /dev/null
+++ b/res/values-ug/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">خاتىرىلىگەن ۋاقىت</string>
+</resources>
diff --git a/res/values-ug/codeaurora_strings.xml b/res/values-ug/codeaurora_strings.xml
new file mode 100644
index 000000000..61d042473
--- /dev/null
+++ b/res/values-ug/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">ئارىلىق</string>
+ <string name="step_option_desc">ئىختىيارىي تېز ئالدىغا/كەينىگە ئارىلىقى</string>
+ <string name="setp_option_three_second">3 سېكۇنت</string>
+ <string name="setp_option_six_second">6 سېكۇنت</string>
+ <string name="loop">"دەۋرىي"</string>
+ <string name="single">"يەككە"</string>
+ <string name="stereo">"سىتېرېئو"</string>
+ <string name="speaker_on">ياڭراتقۇ ئوچۇق</string>
+ <string name="speaker_off">ياڭراتقۇ تاقاق</string>
+ <string name="speaker_need_headset">بۇ ئىقتىدارنى ئىشلىتىش ئۈچۈن تىڭشىغۇچنى قىستۇرۇڭ.</string>
+ <string name="single_track">"يەككە ئاۋاز يولى"</string>
+ <string name="input_url">"URL كىرگۈزۈڭ"</string>
+ <string name="streaming_settings">"ئېقىم تەڭشەكلەر"</string>
+ <string name="next">"كېيىنكى"</string>
+ <string name="previous">"ئالدىنقى"</string>
+ <string name="buffer_size">غەملەك چوڭلۇقى</string>
+ <string name="apn">ئالدىن تاللانغان APN</string>
+ <string name="rtp_min_port">ئەڭ كىچىك ئېغىز</string>
+ <string name="rtp_max_port">ئەڭ چوڭ ئېغىز</string>
+ <string name="set_rtp_min_port">ئەڭ كىچىك ئېغىز تەڭشىكى</string>
+ <string name="set_rtp_max_port">ئەڭ چوڭ ئېغىز تەڭشىكى</string>
+ <string name="set_buffer_size">غەملەك چوڭلۇق تەڭشىكى</string>
+ <string name="set_apn">ئالدىن بەلگىلەنگەن APN نى تاللاڭ</string>
+ <string name="setting">تەڭشەكلەر</string>
+ <string name="server_timeout_title">"مۇلازىمىتىر ۋاقىت ھالقىدى"</string>
+ <string name="server_timeout_message">"سىن قويۇشنى داۋاملاشتۇرۇش ئۈچۈن مۇلازىمېتىرغا قايتا باغلىنامدۇ؟"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"باغلىنالمىدى، %1$d غا قايتا باغلاشنى سىناۋاتىدۇ\u2026"</string>
+ <string name="media_controller_live">بىۋاستە</string>
+ <string name="media_controller_playing">چېلىۋاتىدۇ</string>
+ <string name="media_controller_connecting">باغلىنىۋاتىدۇ\u2026</string>
+ <string name="bookmark_add">"خەتكۈچ قوش"</string>
+ <string name="bookmark_display">"خەتكۈچ كۆرسەت"</string>
+ <string name="bookmark_empty">"خەتكۈچ يوق"</string>
+ <string name="bookmark_exist">"خەتكۈچ مەۋجۇت"</string>
+ <string name="bookmark_add_success">"خەتكۈچ قوشۇلدى"</string>
+ <string name="bookmark_list">"خەتكۈچلەر"</string>
+ <string name="bookmark_title">"ماۋزۇ"</string>
+ <string name="bookmark_location">"ئورنى"</string>
+ <string name="delete_all">"ھەممىنى ئۆچۈر"</string>
+ <string name="default_title">"كۆڭۈلدىكى ماۋزۇ"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">تېخىمۇ كۆپ سۈرەت</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">ئۈنسىز قىلغىلى بولمايدۇ: سىننى قوللىمايدۇ</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">ئورنىنى كۆرسىتىشكە ئىشلىتىدىغان خەرىتە ئەپنى تاپالمىدى.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">تۆۋەن ئاۋازنى يۇقىرىلىتىش</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D ئۈنۈم</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">ئاۋاز ئۈنۈملىرى</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">بۇ ئۈنۈمدىن ھۇزۇرلىنىش ئۈچۈن تىڭشىغۇچنى قىستۇرۇڭ.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">كەچۈرۈڭ، بۇ سىن ھۆججىتىنى كەسكىلى بولمايدۇ</string>
+</resources>
diff --git a/res/values-ug/filtershow_strings.xml b/res/values-ug/filtershow_strings.xml
new file mode 100644
index 000000000..3ab26f43b
--- /dev/null
+++ b/res/values-ug/filtershow_strings.xml
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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.
+-->
+<resources>
+ <!-- Title for the image editor activity [CHAR LIMIT=NONE]-->
+ <string name="title_activity_filter_show">سۈرەت تەھرىرلىگۈچ</string>
+ <!-- String shown when we cannot load the image when starting the activity [CHAR LIMIT=NONE] -->
+ <string name="cannot_load_image">بۇ سۈرەتنى يۈكلىيەلمەيدۇ!</string>
+ <!-- String shown when cannot load the original image. We will edit selected image [CHAR LIMIT=NONE] -->
+ <string name="cannot_edit_original">دەسلەپكى نۇسخىنى تەھرىرلىيەلمەيدۇ</string>
+ <!-- String displayed when showing the original image [CHAR LIMIT=NONE] -->
+ <!-- String displayed when setting the homepage wallpaper in the background [CHAR LIMIT=NONE] -->
+ <string name="setting_wallpaper">تام قەغەزنى تەڭشەۋاتىدۇ</string>
+ <!-- generic strings -->
+ <!-- Text for to display on a download failure [CHAR LIMIT=NONE] -->
+ <string name="download_failure">سۈرەتنى چۈشۈرەلمەيدۇ. تورنى ئىشلەتكىلى بولمايدۇ.</string>
+ <!-- Text to label an image as "original" [CHAR LIMIT=20] -->
+ <string name="original">ئەسلى</string>
+ <!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
+ <!-- Text for the custom border filter [CHAR LIMIT=20] -->
+ <string name="custom_border">ئىختىيارىي</string>
+ <!-- actionbar menu -->
+ <!-- Text for the undo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_undo">يېنىۋال</string>
+ <!-- Text for redo menu item [CHAR LIMIT=20] -->
+ <string name="filtershow_redo">قايتىلا</string>
+ <!-- Text for the image menu item showing the filters that have been applied [CHAR LIMIT=30] -->
+ <string name="show_imagestate_panel">قوللانغان ئۈنۈملەرنى كۆرسەت</string>
+ <!-- Text for the image state panel menu item [CHAR LIMIT=30] -->
+ <string name="hide_imagestate_panel">قوللانغان ئۈنۈملەرنى يوشۇر</string>
+ <!-- Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
+ <string name="export_image">چىقار</string>
+ <!-- Text for the print menu item [CHAR LIMIT=20] -->
+ <string name="print_image">باس</string>
+ <!-- Export Dialog-->
+ <!-- Text for the dialog title to export a flattened photo[CHAR LIMIT=25] -->
+ <string name="export_flattened">جىپىسلىغان سۈرەتنى چىقار</string>
+ <!-- Text for selecting export image quality [CHAR LIMIT=100] -->
+ <string name="select_output_settings">چىقىرىلغان سۈرەت كۆچۈرۈلمە نۇسخا، ھېچقانداق تەھرىرلەش خاتىرىسىنى ئۆز ئىچىگە ئالمايدۇ.</string>
+ <!-- Text for quality value tag [CHAR LIMIT=30] -->
+ <string name="quality">سۈپەت</string>
+ <!-- Text for size value tag [CHAR LIMIT=30] -->
+ <string name="size">چوڭلۇقى</string>
+ <!-- Text for size x [CHAR LIMIT=1] -->
+ <string name="x">x</string>
+ <!-- Name for the overflow menu item for settings [CHAR LIMIT=20] -->
+ <string name="menu_settings">تەڭشەكلەر</string>
+ <!-- Exit Dialog -->
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="unsaved">بۇ سۈرەتنىڭ ساقلانمىغان ئۆزگەرتىشلىرى بار.</string>
+ <!-- String displayed when exiting with unsaved changes [CHAR LIMIT=NONE] -->
+ <string name="save_before_exit">چېكىنىش ئاۋۋال ساقلامسىز؟</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_exit">ساقلاپ چېكىن</string>
+ <!-- String displayed when saving and exiting editor [CHAR LIMIT=NONE] -->
+ <string name="save_and_processing">ئەسلى ئېنىقلىقتىكى سۈرەتنى بىر تەرەپ قىلىۋاتىدۇ…</string>
+ <!-- String displayed when exiting editor[CHAR LIMIT=NONE] -->
+ <string name="exit">چېكىن</string>
+ <!-- History Panel -->
+ <!-- Text for the history panel title [CHAR LIMIT=50] -->
+ <string name="history">تارىخ</string>
+ <!-- Text for the history panel reset button [CHAR LIMIT=20]-->
+ <string name="reset">ئەسلىگە قايتۇر</string>
+ <!-- Text for the original image[CHAR LIMIT=20]-->
+ <!-- Image state panel -->
+ <!-- Text for the image state panel title [CHAR LIMIT=50] -->
+ <string name="imageState">قوللانغان ئۈنۈملەر</string>
+ <!-- Additional filters buttons -->
+ <!-- Label for the compare original image filter button [CHAR LIMIT=15] -->
+ <string name="compare_original">سېلىشتۇر</string>
+ <!-- Label for the apply effect button [CHAR LIMIT=15] -->
+ <string name="apply_effect">قوللان</string>
+ <!-- Label for the reset effect button [CHAR LIMIT=15] -->
+ <string name="reset_effect">ئەسلىگە قايتۇر</string>
+ <!-- Label for aspect [CHAR LIMIT=15] -->
+ <string name="aspect">ئېگىز-كەڭلىك</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect1to1_effect">1, 1</string>
+ <!-- Label for the aspect 4:3 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to3_effect">4:3</string>
+ <!-- Label for the aspect 3:4 effect [CHAR LIMIT=15] -->
+ <string name="aspect3to4_effect">3:4</string>
+ <!-- Label for the aspect 4:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect4to6_effect">4:6</string>
+ <!-- Label for the aspect 5:7 effect [CHAR LIMIT=15] -->
+ <string name="aspect5to7_effect">5:7</string>
+ <!-- Label for the aspect 7:5 effect [CHAR LIMIT=15] -->
+ <string name="aspect7to5_effect">7:5</string>
+ <!-- Label for the aspect 1:1 effect [CHAR LIMIT=15] -->
+ <string name="aspect9to16_effect">16:9</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <string name="aspectNone_effect">يوق</string>
+ <!-- Label for the aspect None effect [CHAR LIMIT=15] -->
+ <!-- Label for when the aspect ratio is fixed to a value [CHAR LIMIT=15] -->
+ <string name="Fixed">مۇقىم</string>
+ <!-- Label for the tuny planet effect [CHAR LIMIT=10] -->
+ <string name="tinyplanet">كىچىك پىلانىت</string>
+ <!-- Filters buttons -->
+ <!-- Label for the image exposure (brightness) filter button [CHAR LIMIT=10] -->
+ <string name="exposure" msgid="1229093066434614811">نۇر ئۆتۈش</string>
+ <!-- Label for the image sharpness (clarity, distinctness) filter button [CHAR LIMIT=10] -->
+ <string name="sharpness">ئېنىقلىقى</string>
+ <!-- Label for the image contrast (color difference) filter button [CHAR LIMIT=10] -->
+ <string name="contrast">ئاق-قارىلىقى</string>
+ <!-- Label for the image vibrance (strengthens colors) filter button [CHAR LIMIT=10] -->
+ <string name="vibrance">تەبىئى تويۇنۇش</string>
+ <!-- Label for the image saturation (brightens colors) filter button [CHAR LIMIT=10] -->
+ <string name="saturation">تويۇنۇش</string>
+ <!-- Label for the image BW filter (makes black & white) button [CHAR LIMIT=10] -->
+ <string name="bwfilter">BW سۈزگۈچ</string>
+ <!-- Label for the image Autocolor filter (makes off-white colors whiter) button [CHAR LIMIT=10] -->
+ <string name="wbalance">ئاپتوماتىك رەڭ</string>
+ <!-- Label for the image Hue filter (color, shade, tinge, tone) button [CHAR LIMIT=10] -->
+ <string name="hue">رەڭگى</string>
+ <!-- Label for the image shadow recovery (lightens/darkens shadows) filter button [CHAR LIMIT=10] -->
+ <string name="shadow_recovery">سايە</string>
+ <!-- Label for the image highlights recovery (lightens/darkens bright regions) filter button [CHAR LIMIT=15] -->
+ <string name="highlight_recovery">يورۇت</string>
+ <!-- Label for the image curves filter button [CHAR LIMIT=10] -->
+ <string name="curvesRGB">ئەگرى سىزىقلار</string>
+ <!-- Label for the image vignette filter (darkens photo around edges) button [CHAR LIMIT=10] -->
+ <string name="vignette">سايە</string>
+ <!-- Label for the image vignette main parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_main">سايە</string>
+ <!-- Label for the image vignette exposure parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_exposure">نۇر ئۆتۈش</string>
+ <!-- Label for the image vignette saturation parameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_saturation">تويۇنۇش</string>
+ <!-- Label for the image vignette contrast fparameter ui [CHAR LIMIT=15] -->
+ <string name="vignette_contrast">ئاق-قارىلىقى</string>
+ <!-- Label for the rate of change in brightness as it goes to the edge [CHAR LIMIT=15] -->
+ <string name="vignette_falloff">ئاجىزلىشىشى</string>
+ <!-- Label for the image effect that removes redeye. [CHAR LIMIT=10] -->
+ <string name="redeye">قىزىل كۆز</string>
+ <!-- Label for the that allows drawing on Image [CHAR LIMIT=10] -->
+ <string name="imageDraw">سىز</string>
+ <!-- Label for the image straighten effect [CHAR LIMIT=15] -->
+ <string name="straighten" msgid="5217801513491493491">تۈزلە</string>
+ <!-- Label for the image crop effect [CHAR LIMIT=15] -->
+ <string name="crop" msgid="5584000454518174632">كەس</string>
+ <!-- Label for the image rotate effect [CHAR LIMIT=15] -->
+ <string name="rotate" msgid="460017689320955494">ئايلاندۇر</string>
+ <!-- Label for the image flip effect [CHAR LIMIT=15] -->
+ <string name="mirror">ئەينەك</string>
+ <!-- Name for the photo effect that inverts photo to negative images. [CHAR LIMIT=10] -->
+ <string name="negative">تەتۈر رەڭ</string>
+ <!-- Label for having no filters applied to the image [CHAR LIMIT=10] -->
+ <string name="none" msgid="3601545724573307541">يوق</string>
+ <!-- Label for the image edges effect (highlights edges in image) [CHAR LIMIT=10] -->
+ <string name="edge">گىرۋەكلەر</string>
+ <!-- Label for an image effect that replicates the "pop art" style of segmenting
+ images into solid colors, as popularized by Andy Warhol [CHAR LIMIT=15] -->
+ <string name="kmeans">رەڭ تۈسى ئايرىش</string>
+ <!-- Label for the image downsampling effect (makes image smaller) [CHAR LIMIT=15] -->
+ <string name="downsample">ئاستى مىسال</string>
+ <!-- Label for the "neutral density graduated filter" filter effect [CHAR LIMIT=15] -->
+ <string name="grad">تەدرىجىي ئۆزگىرىش</string>
+ <!-- Label for the Brightness effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_brightness">يورۇقلۇق</string>
+ <!-- Label for the Contrast filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_contrast">ئاق-قارىلىقى</string>
+ <!-- Label for the saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_saturation">تويۇنۇش</string>
+ <!-- Label for the Main or Master control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_main">ئاساسىي تىزىملىك</string>
+ <!-- Label for the red control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_red">قىزىل</string>
+ <!-- Label for the yellow control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_yellow">سېرىق</string>
+ <!-- Label for the green control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_green">يېشىل</string>
+ <!-- Label for the cyan control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_cyan">توق يېشىل</string>
+ <!-- Label for the blue control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_blue">كۆك</string>
+ <!-- Label for the Magenta control for per channel saturation effect [CHAR LIMIT=20] -->
+ <string name="editor_chan_sat_magenta">ئاچ قىزىل</string>
+ <!-- Label for the image graduated filter effect [CHAR LIMIT=20] -->
+ <string name="editor_grad_style">ئۇسلۇب</string>
+ <!-- new virtual graduated neutral density filter [CHAR LIMIT=20] -->
+ <string name="editor_grad_new">يېڭى</string>
+ <!-- Labels for the curves tool -->
+ <!-- Label for the curves tool, all channels (RGB) [CHAR LIMIT=3] -->
+ <string name="curves_channel_rgb">RGB</string>
+ <!-- Label for the curves tool, Red color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_red">قىزىل</string>
+ <!-- Label for the curves tool, Green color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_green">يېشىل</string>
+ <!-- Label for the curves tool, Blue color channel [CHAR LIMIT=14] -->
+ <string name="curves_channel_blue">كۆك</string>
+ <!-- Label for the The style to draw in [CHAR LIMIT=14] -->
+ <string name="draw_style">ئۇسلۇب</string>
+ <!-- Label for the size to draw in in [CHAR LIMIT=14] -->
+ <string name="draw_size">چوڭلۇقى</string>
+ <!-- Label for the Hue to draw in [CHAR LIMIT=14] -->
+ <string name="draw_hue">رەڭگى</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_saturation">تويۇنۇش</string>
+ <!-- Label for the Brightness to draw in [CHAR LIMIT=14] -->
+ <string name="draw_value">يورۇقلۇق</string>
+ <!-- Label for the color to draw in [CHAR LIMIT=14] -->
+ <string name="draw_color">رەڭ</string>
+ <!-- Label for the line style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_line">سىزىقلار</string>
+ <!-- Label for the Marker brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_spatter">بەلگە قەلىمى</string>
+ <!-- Label for the Spatter brush style of drawing in [CHAR LIMIT=14] -->
+ <string name="draw_style_brush_marker">چاچقۇن</string>
+ <!-- Label for the removing drawing from screen [CHAR LIMIT=14] -->
+ <string name="draw_clear">تازىلا</string>
+ <!-- Label for the with of the border[CHAR LIMIT=14] -->
+ <string name="color_border_size">قېلىنلىقى</string>
+ <!-- Label for the border corner size (or rounding) [CHAR LIMIT=14] -->
+ <string name="color_border_corner_size">بۇلۇڭ چوڭلۇقى</string>
+ <!-- Label for selecting the border color [CHAR LIMIT=14] -->
+ <string name="color_border_color">رەڭ</string>
+ <!-- Label for the removing borders [CHAR LIMIT=14] -->
+ <string name="color_border_clear">تازىلا</string>
+ <!-- Label for the select the color [CHAR LIMIT=35] -->
+ <string name="color_pick_select">ئىختىيارىي رەڭ تاللاڭ</string>
+ <!-- The title for the color pick dialog [CHAR LIMIT=20] -->
+ <string name="color_pick_title">رەڭ تاللاڭ</string>
+ <!-- The title for draw size [CHAR LIMIT=50] -->
+ <string name="draw_size_title">چوڭلۇقىنى تاللاڭ</string>
+ <!-- The accept the draw size [CHAR LIMIT=20] -->
+ <string name="draw_size_accept">جەزملە</string>
+ <!-- Name used to indicate the original image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_original">ئەسلى</string>
+ <!-- Name used to indicate the final image in the state panel [CHAR LIMIT=20] -->
+ <string name="state_panel_result">نەتىجە</string>
+ <!-- Label for the notification [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_label">سۈرەتنى ساقلاۋاتىدۇ</string>
+ <!-- Label for the notification message [CHAR LIMIT=50] -->
+ <string name="filtershow_notification_message">بىر تەرەپ قىلىۋاتىدۇ…</string>
+ <!-- Label for the save preset menu [CHAR LIMIT=30] -->
+ <string name="filtershow_save_preset">نۆۋەتتى ئالدىن تەڭشەكنى ساقلا</string>
+ <!-- Label for the manage preset menu [CHAR LIMIT=42] -->
+ <string name="filtershow_manage_preset">ئىشلەتكۈچى ئالدىن تەڭشەكنى باشقۇر</string>
+ <!-- Label for newly created user preset [CHAR LIMIT=30] -->
+ <string name="filtershow_new_preset">يېڭى ئالدىن تەڭشەك</string>
+ <!-- Label for preset name [CHAR LIMIT=30] -->
+ <string name="filtershow_preset_name">ئالدىن تەڭشەك ئىسمى</string>
+ <!-- Label for showing the image information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_show_info_panel">ئۇچۇر</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_name">سۈرەت ئاتى</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_size">سۈرەت چوڭلۇقى</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_histogram">چاسا دىئاگرامما</string>
+ <!-- Label for the information panel [CHAR LIMIT=30] -->
+ <string name="filtershow_show_info_panel_exif">EXIF سانلىق مەلۇمات</string>
+ <!-- Label for the add button in the category panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_looks">ئالدىن تەڭشەك</string>
+ <!-- Label for the add button in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_add_button_versions">نەشرى</string>
+ <!-- Label for the Original version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_original">ئەسلى</string>
+ <!-- Label for the Current version in the versions panel [CHAR LIMIT=30] -->
+ <string name="filtershow_version_current">نۆۋەتتىكى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_model">ئەندىزە</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_aperture">نۇر گەردىشى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_focal_length">فوكۇس ئارىلىقى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_subject_distance">جىسىم ئارىلىقى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_date">تارتىلغان چېسلا</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_f_stop">يورۇقلۇق چەمبەر قىممىتى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_exposure_time">نۇرلاندۇرۇش ۋاقتى</string>
+ <!-- Label for exif tags in the information panel [CHAR LIMIT=50] -->
+ <string name="filtershow_exif_copyright">نەشر ھوقوقى</string>
+</resources>
diff --git a/res/values-ug/strings.xml b/res/values-ug/strings.xml
new file mode 100644
index 000000000..eb471ff81
--- /dev/null
+++ b/res/values-ug/strings.xml
@@ -0,0 +1,840 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!-- 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_name">سۈرەت يىغقۇچ</string>
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <string name="gadget_title">رەسىم كاندۇك</string>
+ <!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
+ <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
+ <!-- Activity label. This might show up in the activity-picker -->
+ <string name="movie_view_label">سىن قويغۇچ</string>
+ <!-- shown in the video player view while the video is being loaded, before it starts playing -->
+ <string name="loading_video">سىن يۈكلەۋاتىدۇ…</string>
+ <string name="loading_image">سۈرەت يۈكلەۋاتىدۇ…</string>
+ <!-- Message shown on the progress dialog to indicate we're loading the
+ account info [CHAR LIMIT=30] -->
+ <string name="loading_account">ھېسابات يۈكلەۋاتىدۇ…</string>
+ <!-- Movie View Resume Playing dialog title -->
+ <string name="resume_playing_title">سىننى داۋاملاشتۇر</string>
+ <!-- Movie View Start Playing dialog title -->
+ <string name="resume_playing_message">%s دىن قويۇشنى داۋاملاشتۇرامدۇ؟</string>
+ <!-- Movie View Start Playing button "Resume from bookmark" -->
+ <string name="resume_playing_resume">قويۇشنى داۋاملاشتۇر</string>
+ <!-- Displayed in the title of those albums that are being loaded -->
+ <string name="loading">يۈكلەۋاتىدۇ…</string>
+ <!-- Displayed in the title of those pictures that fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load">يۈكلىيەلمىدى</string>
+ <!-- Used in a toast message when an image fails to be loaded
+ [CHAR LIMIT=50]-->
+ <string name="fail_to_load_image">بۇ سۈرەتنى يۈكلىيەلمەيدۇ</string>
+ <!-- Displayed in place of the picture when we fail to get the thumbnail of it.
+ [CHAR LIMIT=50]-->
+ <string name="no_thumbnail">كىچىك سۈرەت يوق</string>
+ <!-- Movie View Start Playing button "Beginning" -->
+ <string name="resume_playing_restart">قايتا باشلا</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="crop_save_text">جەزملە</string>
+ <!-- Title of a menu item to indicate performing the image crop operation
+ [CHAR LIMIT=20] -->
+ <string name="ok">جەزملە</string>
+ <!-- Button indicating that the cropped image should be reverted back to the original -->
+ <!-- Hint that appears when cropping an image with more than one face -->
+ <string name="multiface_crop_help">چىرايدىن بىرسى چېكىلسە باشلايدۇ.</string>
+ <!-- Toast/alert that the image is being saved to the SD card -->
+ <string name="saving_image">رەسىم ساقلاۋاتىدۇ…</string>
+ <!-- Toast/alert that the image is being saved after editing in filtershow [CHAR LIMIT=40]-->
+ <string name="filtershow_saving_image">رەسىمنى <xliff:g id="ALBUM_NAME">%1$s</xliff:g> غا ساقلاۋاتىدۇ…</string>
+ <!-- Eorror toast message that the image cannot be saved [CHAR LIMIT=40]-->
+ <string name="save_error">كېسىلگەن سۈرەتنى ساقلىيالمايدۇ.</string>
+ <!-- menu pick: crop the currently selected image [CHAR LIMIT=30]-->
+ <string name="crop_label">رەسىم كەس</string>
+ <!-- menu pick: trim the currently selected video [CHAR LIMIT=30]-->
+ <string name="trim_label">سىن كەس</string>
+ <!-- Toast/alert that the face detection is being run -->
+ <!-- Title prompted for user to choose a photo item [CHAR LIMIT=20] -->
+ <string name="select_image">سۈرەت تاللاڭ</string>
+ <!-- Title prompted for user to choose a video item [CHAR LIMIT=20] -->
+ <string name="select_video">سىن تاللاش</string>
+ <!-- Title prompted for user to choose a media object [CHAR LIMIT=20] -->
+ <string name="select_item">تۈر تاللاڭ</string>
+ <!-- Title prompted for user to choose an album [CHAR LIMIT=20] -->
+ <string name="select_album">ئالبۇم تاللاڭ</string>
+ <!-- Title prompted for user to choose a group [CHAR LIMIT=20] -->
+ <string name="select_group">گۇرۇپپا تاللاڭ</string>
+ <!-- Displayed in the title of the dialog for things to do with a picture
+ that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
+ <string name="set_image">رەسىم تەڭشىكى</string>
+ <!-- Activity title for cropping picture and setting it as wallpaper [CHAR LIMIT=20] -->
+ <string name="set_wallpaper">تام قەغەز تەڭشىكى</string>
+ <!-- Toast/alert after saving wallpaper -->
+ <string name="wallpaper">تام قەغەز تەڭشەۋاتىدۇ\u2026</string>
+ <string name="camera_setas_wallpaper">تام قەغىزى</string>
+ <!-- Details dialog "OK" button. Dismisses dialog. -->
+ <string name="delete">ئۆچۈر</string>
+ <!-- String Delete the selected media item(s) [CHAR LIMIT=50] -->
+ <string name="confirm">جەزملە</string>
+ <string name="cancel">ۋاز كەچ</string>
+ <string name="share">ھەمبەھىر</string>
+ <string name="share_panorama">پۈتۈن مەنزىرە ھەمبەھىر</string>
+ <string name="share_as_photo">سۈرەت سۈپىتىدە ھەمبەھىر</string>
+ <!-- The label shown after an image is deleted [CHAR LIMIT=16] -->
+ <string name="deleted">ئۆچۈرۈلدى</string>
+ <!-- The label on the button which when clicked will undo a deletion of image [CHAR LIMIT=16]-->
+ <string name="undo">يېنىۋال</string>
+ <!-- String indicating more actions are available -->
+ <string name="select_all">ھەممىنى تاللا</string>
+ <string name="deselect_all">ھەممىنى تاللىما</string>
+ <string name="slideshow">تام تەسۋىر كۆرسەت</string>
+ <string name="details">تەپسىلاتى</string>
+ <string name="details_title">%2$d دىن %1$d تۈر:</string>
+ <string name="close">ياپ</string>
+ <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] -->
+ <string name="switch_to_camera">كامېراغا ئالماشتۇر</string>
+ <!-- String indicating how many media item(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media album(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating how many media group(s) is(are) selected
+ eg. 1 selected [CHAR LIMIT=30] -->
+ <!-- String indicating timestamp of photo or video -->
+ <string name="show_on_map">خەرىتىدە كۆرسەت</string>
+ <string name="rotate_left">سولغا ئايلاندۇر</string>
+ <string name="rotate_right">ئوڭغا ئايلاندۇر</string>
+ <!-- Toast message prompted when the specified item is not found [CHAR LIMIT=40]-->
+ <string name="no_such_item">تۈرنى تاپالمىدى.</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="edit">تەھرىر</string>
+ <!-- String used as a menu label. The user can choose to edit the image
+ [CHAR_LIMIT=20]-->
+ <string name="simple_edit">ئاددىي تەھرىر</string>
+ <!-- String used as a title of a progress dialog. The user can
+ choose to cache some Picasa picture albums on device, so it can
+ be viewed offline. This string is shown when the request is being
+ processed. [CHAR LIMIT=50] -->
+ <string name="process_caching_requests">غەملەش ئىلتىماسىنى بىر تەرەپ قىلىۋاتىدۇ</string>
+ <!-- String used as a small notification label above a Picasa album.
+ It means the pictures of the Picasa album is currently being
+ transferred to local storage, so the pictures can later be viewed
+ offline. [CHAR LIMIT=15] -->
+ <string name="caching_label">غەملەۋاتىدۇ…</string>
+ <!-- The title of the menu item to let user crop the image. [CHAR LIMIT=15] -->
+ <string name="crop_action">كەس</string>
+ <!-- The title of the menu item to let user trim the video. [CHAR LIMIT=15] -->
+ <string name="trim_action">كەس</string>
+ <!-- The title of the menu item to let user mute the video. [CHAR LIMIT=15] -->
+ <string name="mute_action">ئۈنسىز</string>
+ <!-- The title of the menu item to let user set the image as background etc. [CHAR LIMIT=15] -->
+ <string name="set_as">تەڭشىكى</string>
+ <!-- String indicating an error when muting the video. [CHAR LIMIT=30] -->
+ <string name="video_mute_err">سىننى ئۈنسىز قىلالمايدۇ.</string>
+ <!-- String indicating an error when playing the video. [CHAR LIMIT=30] -->
+ <string name="video_err">سىننى قويالمايدۇ</string>
+ <!-- Strings for grouping operations in the menu. The photos can be grouped
+ by their location, taken time, or tags. -->
+ <!-- The title of the menu item to let user choose the grouping rule, when
+ pressed, a submenu will shown and user can choose one grouping rule
+ from the submenu. -->
+ <!-- Title of a menu item to group photo by location [CHAR LIMIT=30] -->
+ <string name="group_by_location">ئورنى بويىچە</string>
+ <!-- Title of a menu tiem to group photo by taken date [CHAR LIMIT=30]-->
+ <string name="group_by_time">ۋاقىت بويىچە</string>
+ <!-- Title of a menu item to group photo by tags [CHAR LIMIT=30]-->
+ <string name="group_by_tags">بەلگە بويىچە</string>
+ <!-- Title of a menu item to group photo by faces [CHAR LIMIT=30]-->
+ <string name="group_by_faces">كىشى بويىچە</string>
+ <!-- Title of a menu item to group photo by albums [CHAR LIMIT=30]-->
+ <string name="group_by_album">ئالبۇم بويىچە</string>
+ <!-- Title of a menu item to group photo by size [CHAR LIMIT=30]-->
+ <string name="group_by_size">چوڭلۇقى بويىچە</string>
+ <!-- When grouping photos by tags, the label used for photos without tags
+ [CHAR LIMIT=20]-->
+ <string name="untagged">بەلگە قويۇلمىغان</string>
+ <!-- When grouping photos by locations, the label used for photos that don't
+ have location information in them [CHAR LIMIT=20]-->
+ <string name="no_location">ئورنى يوق</string>
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <!-- This toast message is shown when network connection is lost while doing clustering -->
+ <string name="no_connectivity">بەزى ئورۇنلارنى تور كاشىلىسى سەۋەبىدىن ئېنىقلىيالمىدى.</string>
+ <!-- This toast message is shown when failed to load the album data. [CHAR LIMIT=NONE] -->
+ <string name="sync_album_error">بۇ ئالبۇمدىكى سۈرەتلەرنى چۈشۈرەلمىدى. سەل تۇرۇپ قايتا سىناڭ.</string>
+ <!-- The title of the menu item to let user choose the which portion of
+ the media items the user wants to see. When pressed, a submenu will
+ appear and user can choose one of "show images only",
+ "show videos only", or "show all" from the submenu. -->
+ <!-- Title of a menu item to show images only [CHAR LIMIT=30]-->
+ <string name="show_images_only">سۈرەتلەرلا</string>
+ <!-- Title of a menu item to show videos only [CHAR LIMIT=30]-->
+ <string name="show_videos_only">سىنلارلا</string>
+ <!-- Title of a menu item to show all (both images and videos) [CHAR LIMIT=30]-->
+ <string name="show_all">سۈرەت ۋە سىنلار</string>
+ <!-- Title of the StackView AppWidget -->
+ <string name="appwidget_title">سۈرەت يىغقۇچ</string>
+ <!-- Text for the empty state of the StackView AppWidget [CHAR LIMIT=30] -->
+ <string name="appwidget_empty_text">سۈرەت يوق.</string>
+ <!-- Toast message shown when the cropped image has been saved in the
+ %s folder (string: folder_download) [CHAR LIMIT=50]-->
+ <string name="crop_saved">كېسىلگەن سۈرەت <xliff:g id="FOLDER_NAME">%s</xliff:g> غا ساقلاندى.</string>
+ <!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
+ <string name="no_albums_alert">ئىشلەتكىلى بولىدىغان ئالبۇم يوق.</string>
+ <!-- Toast message shown when we close the AlbumPage because it is empty
+ [CHAR LIMIT=50] -->
+ <string name="empty_album">سۈرەت/سىننى ئىشلەتكىلى بولىدۇ.</string>
+ <!-- Album label used to indicate the collection of PWA Buzz/Post photos -->
+ <string name="picasa_posts">يازمىلار</string>
+ <!-- A label describing that the current screen is for the user to pick
+ some albums to be viewable offline [CHAR LIMIT=30] -->
+ <string name="make_available_offline">تورسىز ئىشلەتكىلى بولىدۇ</string>
+ <!-- A label of a menu item for user to sync the content [CHAR LIMIT=30] -->
+ <string name="sync_picasa_albums">يېڭىلا</string>
+ <!-- A label on a button. The user clicks this button after he has
+ finished selection. [CHAR LIMIT=15] -->
+ <string name="done">تامام</string>
+ <!-- String indicating the sequence of currently selected item in the
+ media set eg. 3 of 5 items [CHAR LIMIT=30] -->
+ <string name="sequence_in_set">%2$d دىن %1$d تۈر:</string>
+ <!-- Text indicating the title of a media item in details window [CHAR LIMIT=14] -->
+ <string name="title">ماۋزۇ</string>
+ <!-- Text indicating the description of a media item in details window [CHAR LIMIT=14] -->
+ <string name="description">چۈشەندۈرۈش</string>
+ <!-- Text indicating the creation time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="time">ۋاقىت</string>
+ <!-- Text indicating the location of a media item in details window [CHAR LIMIT=14] -->
+ <string name="location">ئورنى</string>
+ <!-- Text indicating the path of a media item in details window [CHAR LIMIT=14] -->
+ <string name="path">يول</string>
+ <!-- Text indicating the width of a media item in details window [CHAR LIMIT=14] -->
+ <string name="width">كەڭلىك</string>
+ <!-- Text indicating the height of a media item in details window [CHAR LIMIT=14] -->
+ <string name="height">ئېگىزلىك</string>
+ <!-- Text indicating the orientation of a media item in details window [CHAR LIMIT=14] -->
+ <string name="orientation">يۆنىلىش</string>
+ <!-- Text indicating the duration of a video item in details window [CHAR LIMIT=14] -->
+ <string name="duration">داۋاملىشىش ۋاقتى</string>
+ <!-- Text indicating the mime type of a media item in details window [CHAR LIMIT=14] -->
+ <string name="mimetype">MIME تىپى</string>
+ <!-- Text indicating the file size of a media item in details window [CHAR LIMIT=14] -->
+ <string name="file_size">ھۆججەت چوڭلۇقى</string>
+ <!-- Text indicating the maker of a media item in details window [CHAR LIMIT=14] -->
+ <string name="maker">ياسىغۇچ</string>
+ <!-- Text indicating the model of a media item in details window [CHAR LIMIT=14] -->
+ <string name="model">ئەندىزە</string>
+ <!-- Text indicating flash info of a media item in details window [CHAR LIMIT=14] -->
+ <string name="flash">چاقماق لامپا</string>
+ <!-- Text indicating aperture of a media item in details window [CHAR LIMIT=14] -->
+ <string name="aperture">نۇر گەردىشى</string>
+ <!-- Text indicating the focal length of a media item in details window [CHAR LIMIT=14] -->
+ <string name="focal_length">فوكۇس ئارىلىقى</string>
+ <!-- Text indicating the white balance of a media item in details window [CHAR LIMIT=14] -->
+ <string name="white_balance">ئاق تەڭپۇڭلۇق</string>
+ <!-- Text indicating the exposure time of a media item in details window [CHAR LIMIT=14] -->
+ <string name="exposure_time">ئاشكارىلانغان ۋاقتى</string>
+ <!-- Text indicating the ISO speed rating of a media item in details window [CHAR LIMIT=14] -->
+ <!-- String indicating the time units in seconds. [CHAR LIMIT=8] -->
+ <!-- String indicating the length units in milli-meters. [CHAR LIMIT=8] -->
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="manual">قولدا</string>
+ <!-- String indicating how camera shooting feature is used. [CHAR LIMIT=8] -->
+ <string name="auto">ئاپتوماتىك</string>
+ <!-- String indicating camera flash is fired. [CHAR LIMIT=14] -->
+ <string name="flash_on">چاقماق لامپا</string>
+ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] -->
+ <string name="flash_off">چاقماق لامپا يوق</string>
+ <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] -->
+ <string name="unknown">يوچۇن</string>
+ <!-- String for the empty not filtered image [CHAR LIMIT=10] -->
+ <string name="ffx_original">ئەسلى</string>
+ <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] -->
+ <string name="ffx_vintage">قەدىمىي</string>
+ <!-- String for filter that brightens colors like instant cameras(filtershow_fx_0001_instant) [CHAR LIMIT=10] -->
+ <string name="ffx_instant">شۇئان</string>
+ <!-- String for filter that washes out colors (filtershow_fx_0002_bleach) [CHAR LIMIT=10] -->
+ <string name="ffx_bleach">ئاقارتىش</string>
+ <!-- String for filter that makes colors a bluish (filtershow_fx_0003_blue_crush) [CHAR LIMIT=10] -->
+ <string name="ffx_blue_crush">كۆك</string>
+ <!-- String for filter that makes image black & white (filtershow_fx_0004_bw_contrast) [CHAR LIMIT=10] -->
+ <string name="ffx_bw_contrast">B/W</string>
+ <!-- String for filter that makes colors a yellowish (filtershow_fx_0005_punch) [CHAR LIMIT=10] -->
+ <string name="ffx_punch">يۇيۇپ چىڭداش</string>
+ <!-- String for filter that mimics the cross-process technique in
+ photography (makes colors bluish) (filtershow_fx_0006_x_process) [CHAR LIMIT=10] -->
+ <string name="ffx_x_process">ئەكسى يۇيۇش</string>
+ <!-- String for filter that makes image coffee-colored (filtershow_fx_0007_washout) [CHAR LIMIT=10] -->
+ <string name="ffx_washout">لاتتې قەھۋە</string>
+ <!-- String for filter that makes colors washed out and brownish
+ (filtershow_fx_0008_washout_color) [CHAR LIMIT=10] -->
+ <string name="ffx_washout_color">تاش باسما</string>
+ <!-- Toast message shown after we make some album(s) available offline [CHAR LIMIT=50] -->
+ <!-- Toast message shown after we try to make a local album available offline
+ [CHAR LIMIT=150] -->
+ <string name="try_to_set_local_album_available_offline">بۇ تۈر يەرلىك ئورۇنغا ساقلاندى، تورسىز ئىشلەتكىلى بولىدۇ.</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing all available albums [CHAR LIMIT=20] -->
+ <string name="set_label_all_albums">ھەممە ئالبۇم</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing albums stored locally on the device [CHAR LIMIT=20] -->
+ <string name="set_label_local_albums">يەرلىك ئالبۇم</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing MTP devices connected (like other digital cameras).
+ [CHAR LIMIT=20] -->
+ <string name="set_label_mtp_devices">MTP ئۈسكۈنىلىرى</string>
+ <!-- A label shown on the action bar. It indicates that the user is
+ viewing Picasa albums [CHAR LIMIT=20] -->
+ <string name="set_label_picasa_albums">Picasa ئالبۇمى</string>
+ <!-- Label indicating the amount on free space on the device. The parameter
+ is a string representation of the amount of free space, eg. "20MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="free_space_format"><xliff:g id="BYTES">%s</xliff:g> بوش</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ less than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_below"><xliff:g id="SIZE">%s</xliff:g> ياكى تۆۋەن</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ more than a certain amount. The parameter is a string representation
+ of that amount, eg. "10MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_above"><xliff:g id="SIZE">%s</xliff:g> ياكى يۇقىرى</string>
+ <!-- Label of a group of pictures. The size of each picture in this group is
+ between two amounts. The parameters are string representations of the two
+ amounts, eg. "10MB", "100MB".
+ [CHAR LIMIT=20]
+ -->
+ <string name="size_between"><xliff:g id="MIN_SIZE">%1$s</xliff:g> دىن <xliff:g id="MAX_SIZE">%2$s</xliff:g> غا</string>
+ <!-- A label shown on the action bar. It indicates that the operation
+ to import media item(s) [CHAR LIMIT=20] -->
+ <string name="Import">ئەكىر</string>
+ <!-- A label shown on the action bar. It indicates whether the import
+ operation succeeds or fails. [CHAR LIMIT=20] -->
+ <string name="import_complete">ئەكىرىش تامام</string>
+ <string name="import_fail">ئەكىرەلمىدى</string>
+ <!-- A toast indicating a camera is connected to the device [CHAR LIMIT=30]-->
+ <string name="camera_connected">كامېرا باغلاندى</string>
+ <!-- A toast indicating a camera is disconnected [CHAR LIMIT=30] -->
+ <string name="camera_disconnected">كامېرا ئۈزۈلدى</string>
+ <!-- A label shown on MTP albums thumbnail to instruct users to import
+ [CHAR LIMIT=40] -->
+ <string name="click_import">بۇ جاي چېكىلسە ئەكىرىدۇ</string>
+ <!-- The label on the radio button for the widget type that shows the images randomly. [CHAR LIMIT=30]-->
+ <string name="widget_type_album">بىر ئالبۇم تاللاڭ</string>
+ <!-- The label on the radio button for the widget type that shows the images in an album. [CHAR LIMIT=30]-->
+ <string name="widget_type_shuffle">ھەممە سۈرەتنى سۆرەڭ</string>
+ <!-- The label on the radio button for the widget type that shows only one image. [CHAR LIMIT=30]-->
+ <string name="widget_type_photo">بىر سۈرەت تاللاڭ:</string>
+ <!-- The title of the dialog for choosing the type of widget. [CHAR LIMIT=20] -->
+ <string name="widget_type">سۈرەت تاللاڭ</string>
+ <!-- Title of the Android Dreams slideshow screensaver. [CHAR LIMIT=20] -->
+ <string name="slideshow_dream_name">تام تەسۋىر كۆرسەت</string>
+ <!-- Group by Albums tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="albums">سۈرەت توپلىمى</string>
+ <!-- Group by Times tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="times">ۋاقىت</string>
+ <!-- Group by Locations tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="locations">ئورنى</string>
+ <!-- Group by People tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="people">كىشى</string>
+ <!-- Group by Tags tab on Action Bar. [CHAR LIMIT=12] -->
+ <string name="tags">خەتكۈچلەر</string>
+ <!-- Group by menu item. [CHAR LIMIT=20] -->
+ <string name="group_by">گۇرۇپپا ئاساسى</string>
+ <!-- The title of the menu item which enable the settings [CHAR LIMIT=20] -->
+ <string name="settings">تەڭشەكلەر</string>
+ <!-- The title of menu item where user can add a new account -->
+ <string name="add_account">ھېسابات قوش</string>
+ <!-- The label for the folder contains pictures taken by the camera. [CHAR LIMIT=20]-->
+ <string name="folder_camera">كامېرا</string>
+ <!-- The label for the folder contains downloaded pictures. [CHAR LIMIT=20]-->
+ <string name="folder_download">چۈشۈر</string>
+ <!-- The label for the folder contains edited online pictures. [CHAR LIMIT=40]-->
+ <string name="folder_edited_online_photos">تەھرىرلەنگەن توردىكى سۈرەتلەر</string>
+ <!-- The label for the folder contains pictures that was imported from an
+ external camera. [CHAR LIMIT=20]-->
+ <string name="folder_imported">ئەكىردى</string>
+ <!-- The label for the folder contains screenshot images. [CHAR LIMIT=20]-->
+ <string name="folder_screenshot">ئېكراندىن تۇتۇلغان سۈرەت</string>
+ <!-- The title of the menu item which display online help in browser. [CHAR LIMIT=20]-->
+ <string name="help">ياردەم</string>
+ <!-- The tilte of a dialog showing there is no external storage. [CHAR LIMIT=20] -->
+ <string name="no_external_storage_title">ساقلىغۇچ يوق</string>
+ <!-- The message of a dialog showing there is no external storage. [CHAR LIMIT=none] -->
+ <string name="no_external_storage">ھېچقانداق سىرتقى ساقلىغۇچ يوق</string>
+ <!-- Label for album filmstrip button -->
+ <string name="switch_photo_filmstrip">تام تەسۋىر كۆرۈنۈش</string>
+ <!-- Label for album grid button -->
+ <string name="switch_photo_grid">سېتكا كۆرۈنۈش</string>
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <string name="switch_photo_fullscreen">پۈتۈن ئېكران كۆرۈنۈش</string>
+ <!-- The tilte of a dialog showing trimming in progress. [CHAR LIMIT=20] -->
+ <string name="trimming">كېسىۋاتىدۇ</string>
+ <!-- The tilte of a dialog showing muting in progress. [CHAR LIMIT=20] -->
+ <string name="muting">ئۈنسىز قىلىۋاتىدۇ</string>
+ <!-- The content of a dialog showing trimming in progress. [CHAR LIMIT=30] -->
+ <string name="please_wait">سەل كۈتۈڭ</string>
+ <!-- Toast after the trimming / muting is done. [CHAR LIMIT=50] -->
+ <string name="save_into">سىننى <xliff:g id="ALBUM_NAME">%1$s</xliff:g> غا ساقلاۋاتىدۇ…</string>
+ <!-- Toast if the trimmed video is too short to trim. [CHAR LIMIT=80] -->
+ <string name="trim_too_short">كېسەلمەيدۇ: نىشان سىن بەك قىسقا\"</string>
+ <!-- Text to show with progress bar while stitching in Gallery -->
+ <string name="pano_progress_text">پۈتۈن مەنزىرە سۈرەتنى رەڭلەۋاتىدۇ</string>
+ <!-- The label on the button that will save an edited image -->
+ <string name="save" msgid="8140440041190264400">ساقلا</string>
+ <!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
+ <!-- A label that indicates the media import operation completed [CHAR LIMIT=20] -->
+ <!-- Text of notification message which is shown when user attaches camera -->
+ <string name="ingest_scanning" msgid="2048262851775139720">مەزمۇننى تەكشۈرۈۋاتىدۇ…</string>
+ <!-- String indicating how many media items from the camera have been scanned -->
+ <!-- String indicating how many media items from the camera have been selected -->
+ <!-- Status message shown when content from the camera is being sorted -->
+ <string name="ingest_sorting" msgid="624687230903648118">تەرتىپلەۋاتىدۇ…</string>
+ <!-- Status message shown when scanning the content from the camera has completed -->
+ <string name="ingest_scanning_done">تەكشۈرۈش تامام</string>
+ <!-- Status message shown when content from an external camera is being imported -->
+ <string name="ingest_importing">ئەكىرىۋاتىدۇ…</string>
+ <!-- Status message shown when there is no content available to be imported -->
+ <string name="ingest_empty_device">بۇ ئۈسكۈنىدە ئەكىرگىلى بولىدىغان ھېچقانداق مەزمۇن يوق.</string>
+ <!-- Status message shown when there is no MTP device connected -->
+ <string name="ingest_no_device">ھېچقانداق MTP ئۈسكۈنە باغلانمىدى</string>
+ <!-- Label for album grid button -->
+ <!-- Label for fullscreen button. [CHAR LIMIT=20] -->
+ <!-- Camera resources below -->
+ <!-- General strings -->
+ <!-- title for the dialog showing the error of camera hardware -->
+ <string name="camera_error_title">كامېرا خاتالىقى</string>
+ <!-- message for the dialog showing the error of camera hardware -->
+ <string name="cannot_connect_camera">كامېراغا باغلىنالمىدى</string>
+ <!-- message for the dialog showing the camera is disabled because of security policies. Camera cannot be used. -->
+ <string name="camera_disabled">بىخەتەرلىك تەدبىرى سەۋەبىدىن كامېرا چەكلەندى.</string>
+ <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
+ <string name="camera_label">كامېرا</string>
+ <!-- alert to the user to wait for some operation to complete -->
+ <string name="wait">سەل كۈتۈڭ…</string>
+ <!-- alert to the user that USB storage must be available before using the camera [CHAR LIMIT=NONE] -->
+ <string name="no_storage" product="nosdcard">كامېرانى ئىشلىتىشتىن ئىلگىرى USB ساقلىغۇچنى ئېگەرلەڭ.</string>
+ <!-- alert to the user that an SD card must be installed before using the camera -->
+ <string name="no_storage" product="default">كامېرا ئىشلىتىشتىن ئىلگىرى SD كارتا قىستۇرۇڭ.</string>
+ <!-- alert to the user that the USB storage is being disk-checked [CHAR LIMIT=30] -->
+ <string name="preparing_sd" product="nosdcard">USB ساقلىغۇچنى تەييارلاۋاتىدۇ…</string>
+ <!-- alert to the user that the SD card is being disk-checked -->
+ <string name="preparing_sd" product="default">SD كارتا تەييارلاۋاتىدۇ…</string>
+ <!-- alert to the user that the camera fails to read or write the USB storage. [CHAR LIMIT=NONE] -->
+ <string name="access_sd_fail" product="nosdcard">USB ساقلىغۇچنى زىيارەت قىلالمايدۇ.</string>
+ <!-- alert to the user that the camera fails to read or write the SD card. -->
+ <string name="access_sd_fail" product="default">SD كارتىنى زىيارەت قىلالمايدۇ.</string>
+ <!-- button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT=10] -->
+ <string name="review_cancel">ۋاز كەچ</string>
+ <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
+ <string name="review_ok">تامام</string>
+ <!-- A label that overlays on top of the preview frame to indicate the camcorder is in time lapse mode [CHAR LIMIT=35] -->
+ <string name="time_lapse_title">ۋاقىت بەلگىلەپ خاتىرىلەش</string>
+ <!-- Settings screen, camera selection dialog title. Users can select a camera from the phone (front-facing or back-facing). [CHAR LIMIT=20] -->
+ <string name="pref_camera_id_title">كامېرا تاللاڭ</string>
+ <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_back">قايت</string>
+ <!-- In select camera setting, front-facing camera. [CHAR LIMIT=14] -->
+ <string name="pref_camera_id_entry_front">ئالدى</string>
+ <!-- Settings screen, setting title text -->
+ <string name="pref_camera_recordlocation_title">ساقلاش ئورنى</string>
+ <!-- Label for record location preference [CHAR LIMIT=50] -->
+ <string name="pref_camera_location_label">ئورنى</string>
+ <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+ <string name="pref_camera_timer_title">تەتۈر سانىغۇچ ۋاقىت خاتىرىلىگۈچ</string>
+ <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+ <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+ <string name="pref_camera_timer_sound_title">تەتۈر ساناۋاتقاندا ئەسكەرتىش ئاۋازى چىقار</string>
+ <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
+ <string name="setting_off">تاقاق</string>
+ <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
+ <string name="setting_on">ئوچۇق</string>
+ <!-- The value of a camera preference indicating the setting is off. -->
+ <!-- The value of a camera preference indicating the setting is on. -->
+ <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
+ <string name="pref_video_quality_title">سىن سۈپىتى</string>
+ <!-- The default quality value is 5 (720p) -->
+ <!-- Video quality setting entry. Videos will be recorded in 1080p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 720p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in 480p quality. [CHAR LIMIT=24] -->
+ <!-- Video quality setting entry. Videos will be recorded in the highest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_high">يۇقىرى</string>
+ <!-- Video quality setting entry. Videos will be recorded in the lowest quality available on the device. [CHAR LIMIT=24] -->
+ <string name="pref_video_quality_entry_low">تۆۋەن</string>
+ <!-- Describes the preference dialog for choosing interval between frame capture for
+ time lapse recording. Appears at top of the dialog. [CHAR LIMIT=30] -->
+ <string name="pref_video_time_lapse_frame_interval_title">ۋاقىت بەلگىلەپ سۈرەت تارتىش</string>
+ <!-- Settings screen, Camera setting category title -->
+ <string name="pref_camera_settings_category">كامېرا تەڭشەك</string>
+ <!-- Settings screen, Camcorder setting category title -->
+ <string name="pref_camcorder_settings_category">سىنئالغۇ تەڭشەك</string>
+ <!-- Settings screen, Picture size title -->
+ <string name="pref_camera_picturesize_title">رەسىم چوڭلۇقى</string>
+ <!-- Settings screen, dialog choice for 13 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_13mp">13 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_8mp">8 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_5mp">5 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 4 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_4mp">4 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_3mp">3 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp">2 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 2 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_2mp_wide">2 مىليون پىكسېل (16:9)</string>
+ <!-- Settings screen, dialog choice for 1.3 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1_3mp">1،3 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for 1 megapixels picture size [CHAR LIMIT=15] -->
+ <string name="pref_camera_picturesize_entry_1mp">1 مىليون پىكسېل</string>
+ <!-- Settings screen, dialog choice for VGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, dialog choice for QVGA picture size [CHAR LIMIT=15] -->
+ <!-- Settings screen, Focus mode title -->
+ <string name="pref_camera_focusmode_title">فوكۇس مودېلى</string>
+ <!-- Settings screen, Focus mode dialog radio button choices -->
+ <string name="pref_camera_focusmode_entry_auto">ئاپتوماتىك</string>
+ <string name="pref_camera_focusmode_entry_infinity">چەكسىز</string>
+ <string name="pref_camera_focusmode_entry_macro">ماكرو</string>
+ <!-- Menu, focus mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_focusmode_label_auto">ئاپتوماتىك</string>
+ <string name="pref_camera_focusmode_label_infinity">چەكسىز</string>
+ <string name="pref_camera_focusmode_label_macro">ماكرو</string>
+ <!-- Default flash mode setting.-->
+ <!-- Value for flash off setting-->
+ <!-- Settings screen, Flash mode title -->
+ <string name="pref_camera_flashmode_title">قول چىراغ ھالىتى</string>
+ <!-- flash label [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label">چاقماق چىراغ ھالىتى</string>
+ <!-- Settings screen, Flash mode dialog radio button choices -->
+ <string name="pref_camera_flashmode_entry_auto">ئاپتوماتىك</string>
+ <string name="pref_camera_flashmode_entry_on">ئوچۇق</string>
+ <string name="pref_camera_flashmode_entry_off">تاقاق</string>
+ <!-- Menu, flash mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_flashmode_label_auto">چاقماق چىراغ ئاپتوماتىل</string>
+ <string name="pref_camera_flashmode_label_on">چاقماق چىراغ ئوچۇق</string>
+ <string name="pref_camera_flashmode_label_off">چاقماق چىراغ تاقاق</string>
+ <!-- Default videocamera flash mode setting.-->
+ <!-- Default white balance setting. -->
+ <!-- Settings screen, white balance title -->
+ <string name="pref_camera_whitebalance_title">ئاق تەڭپۇڭلۇق</string>
+ <!-- Menu, white balance label -->
+ <string name="pref_camera_whitebalance_label">ئاق تەڭپۇڭلۇق</string>
+ <!-- Settings screen, White balance dialog radio button choices -->
+ <string name="pref_camera_whitebalance_entry_auto">ئاپتوماتىك</string>
+ <string name="pref_camera_whitebalance_entry_incandescent">چوغلانما لامپا</string>
+ <string name="pref_camera_whitebalance_entry_daylight">كۈن نۇرى</string>
+ <string name="pref_camera_whitebalance_entry_fluorescent">يالتىراق لامپا</string>
+ <string name="pref_camera_whitebalance_entry_cloudy">بۇلۇتلۇق</string>
+ <!-- Menu, White balance labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_whitebalance_label_auto">ئاپتوماتىك</string>
+ <string name="pref_camera_whitebalance_label_incandescent">چوغلانما لامپا</string>
+ <string name="pref_camera_whitebalance_label_daylight">كۈن نۇرى</string>
+ <string name="pref_camera_whitebalance_label_fluorescent">يالتىراق لامپا</string>
+ <string name="pref_camera_whitebalance_label_cloudy">بۇلۇتلۇق</string>
+ <!-- Default scene mode setting. -->
+ <!-- Settings screen, Select Scene mode -->
+ <string name="pref_camera_scenemode_title">مەنزىرە ھالىتى</string>
+ <!-- Settings menu, scene mode choices [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_auto">ئاپتوماتىك</string>
+ <!-- Scene mode that uses HDR (high dynamic range) [CHAR LIMIT=16] -->
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_action">مەشغۇلات</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_night">كېچە</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_sunset">كۈن پېتىش</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=16] -->
+ <string name="pref_camera_scenemode_entry_party">يىغىلىش</string>
+ <!-- Settings menu, scene mode labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_auto">يوق</string>
+ <!-- Scene mode that takes an image quickly with little motion blur. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_action">مەشغۇلات</string>
+ <!-- Scene mode that takes long exposures to capture night scenes without flash. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_night">كېچە</string>
+ <!-- Scene mode optimized for taking images in the sunset. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_sunset">كۈن پېتىش</string>
+ <!-- Scene mode optimized for taking indoor low-lights pictures. [CHAR LIMIT=50] -->
+ <string name="pref_camera_scenemode_label_party">يىغىلىش</string>
+ <!-- Settings menu countdown timer labels [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label">تەتۈر سانىغۇچ ۋاقىت خاتىرىلىگۈچ</string>
+ <!-- Settings menu countdown timer off [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_off">ۋاقىت خاتىرىلىگۈچ تاقاق</string>
+ <!-- Settings menu countdown timer 1 second [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_one">1 سېكۇنت</string>
+ <!-- Settings menu countdown timer 3 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_three">3 سېكۇنت</string>
+ <!-- Settings menu countdown timer 10 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_ten">10 سېكۇنت</string>
+ <!-- Settings menu countdown timer 15 seconds [CHAR LIMIT=50] -->
+ <string name="pref_camera_countdown_label_fifteen">15 سېكۇنت</string>
+ <!-- Toast after trying to select a setting that is not allowed to change in scene mode [CHAR LIMIT=NONE] -->
+ <string name="not_selectable_in_scene_mode">تەڭشەكنى مەنزىرە ھالىتىدە تاللىغىلى بولمايدۇ.</string>
+ <!-- Exposure settings in preference -->
+ <string name="pref_exposure_title">نۇر ئۆتۈش</string>
+ <!-- menu label exposure compensation [CHAR LIMIT=50] -->
+ <string name="pref_exposure_label">نۇر ئۆتۈش</string>
+ <!-- Default HDR entry value -->
+ <!-- HDR label ON [CHAR LIMIT=60] -->
+ <!-- switch camera label back [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_back">ئالدى كامېرا</string>
+ <!-- switch camera label front [CHAR LIMIT=60] -->
+ <string name="pref_camera_id_label_front">كەينى كامېرا</string>
+ <!-- Dialog "OK" button. Dismisses dialog. -->
+ <string name="dialog_ok">جەزملە</string>
+ <!-- Low-memory dialog message [CHAR LIMT=NONE] -->
+ <string name="spaceIsLow_content" product="nosdcard">USB ساقلىغۇچ بوشلۇقىڭىز توشاي دېدى. سۈپەت تەڭشەكنى ئۆزگەرتىڭ ياكى بەزى سۈرەتلەرنى ياكى باشقا ھۆججەتلەرنى ئۆچۈرۈڭ.</string>
+ <!-- Low-memory dialog message [CHAR LIMIT=NONE] -->
+ <string name="spaceIsLow_content" product="default">SD كارتا بوشلۇقىڭىز توشاي دېدى. سۈپەت تەڭشەكنى ئۆزگەرتىڭ ياكى بەزى سۈرەتلەرنى ياكى باشقا ھۆججەتلەرنى ئۆچۈرۈڭ.</string>
+ <!-- Camera format string for new image files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat. -->
+ <!-- Filename prefix for panorama output. -->
+ <!-- The message shown when video record reaches size limit. -->
+ <string name="video_reach_size_limit">چوڭلۇق چېكىگە يەتتى.</string>
+ <!-- The text shown when the panorama panning speed is to fast [CHAR LIMIT=12] -->
+ <string name="pano_too_fast_prompt">بەك تېز</string>
+ <!-- The text shown in the progress dialog when panorama preview is generating in the background [CHAR LIMIT=30] -->
+ <string name="pano_dialog_prepare_preview">پۈتۈن مەنزىرە تەييارلاۋاتىدۇ</string>
+ <!-- The text shown in the dialog when panorama saving failed [CHAR LIMIT=40] -->
+ <string name="pano_dialog_panorama_failed">پۈتۈن مەنزىرە ساقلىيالمايدۇ.</string>
+ <!-- The text shown on the dialog title in the dialogs for Panorama [CHAR LIMIT=12] -->
+ <string name="pano_dialog_title">پۈتۈن مەنزىرە</string>
+ <!-- The text shown on the top-left corner of the screen to indicate the capturing is on going [CHAR LIMIT=27] -->
+ <string name="pano_capture_indication">پۈتۈن مەنزىرە سۈرەت تارتىۋاتىدۇ</string>
+ <!-- The text shown in the progress dialog when waiting for previous panorama finishing [CHAR LIMIT=40] -->
+ <string name="pano_dialog_waiting_previous">ئالدىنقى پۈتۈن مەنزىرە سۈرەتنىڭ بىر تەرەپ قىلىنىشىنى كۈتۈۋاتىدۇ</string>
+ <!-- The text shown on the bottom-left corner of the screen to indicate that the saving is in process [CHAR LIMIT=13] -->
+ <string name="pano_review_saving_indication_str">ساقلاۋاتىدۇ…</string>
+ <!-- The text shown on the screen to indicate that the panorama is rendering [CHAR LIMIT=27] -->
+ <string name="pano_review_rendering">پۈتۈن مەنزىرە سۈرەتنى رەڭلەۋاتىدۇ</string>
+ <!-- Toast telling users tapping on the viewfinder will trigger autofocus [CHAR LIMIT=28] -->
+ <string name="tap_to_focus">چېكىسلە فوكۇس توغرىلايدۇ.</string>
+ <!-- Default effect setting that clears the effect. -->
+ <!-- Title of video effect setting popup window -->
+ <string name="pref_video_effect_title">ئالاھىدە ئۈنۈم</string>
+ <!-- Effect setting item that clear the effect. [CHAR LIMIT=14] -->
+ <string name="effect_none">يوق</string>
+ <!-- Effect setting item that squeezes the face. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_squeeze">شەيتان ئەينەك</string>
+ <!-- Effect setting item that makes eyes big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_eyes">چوڭ كۆز</string>
+ <!-- Effect setting item that makes mouth big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_mouth">چوڭ ئېغىز</string>
+ <!-- Effect setting item that makes mouth small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_mouth">كىچىك ئېغىز</string>
+ <!-- Effect setting item that makes nose big. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_big_nose">چوڭ بۇرۇن</string>
+ <!-- Effect setting item that makes eyes small. [CHAR LIMIT=14] -->
+ <string name="effect_goofy_face_small_eyes">كىچىك كۆز</string>
+ <!-- Effect setting item that replaces background with Android in Space. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_space">ئالەم تەگلىكى</string>
+ <!-- Effect setting item that replaces background with a sunset. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_sunset">كۈن پېتىش</string>
+ <!-- Effect setting item that replaces background with video from gallery. [CHAR LIMIT=14] -->
+ <string name="effect_backdropper_gallery">سىنلىرىڭىز</string>
+ <!-- Message displayed in overlay during background replacement training [CHAR LIMIT=180]-->
+ <string name="bg_replacement_message">ئۈسكۈنىنى پەسكە قويۇڭ.\"\n\"كۆرۈنۈش ئالدىدىن بىر دەم ئايرىلىڭ.</string>
+ <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
+ <string name="video_snapshot_hint">سىنغا ئېلىۋاتقاندا چېكىلسە بىر پارچە سۈرەت تارتىدۇ.</string>
+ <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+ <string name="video_recording_started">سىنغا ئېلىش باشلاندى.</string>
+ <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+ <string name="video_recording_stopped">سىنغا ئېلىش توختىدى.</string>
+ <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
+ <string name="disable_video_snapshot_hint">ئالاھىدە ئۈنۈمنى قوزغاتقاندا سىندىن سۈرەت تۇتۇش چەكلىنىدۇ.</string>
+ <!-- A button in effect setting popup to clear the effect. [CHAR LIMIT=26] -->
+ <string name="clear_effects">ئۈنۈمنى تازىلا</string>
+ <!-- Title of category for silly face effects. [CHAR LIMIT=26] -->
+ <string name="effect_silly_faces">كۈلكىلىك چىرايلار</string>
+ <!-- Title of category for background replacement effects. [CHAR LIMIT=26] -->
+ <string name="effect_background">تەگلىك</string>
+ <!-- The shutter button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_shutter_button">Shutter توپچا</string>
+ <!-- The menu button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_menu_button">تىزىملىك توپچا</string>
+ <!-- The button to review the thumbnail. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_thumbnail">يېقىنقى سۈرەت</string>
+ <!-- The front/back camera switch. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_camera_picker">ئالدى كەينى كامېرا ئالماشتۇرغۇچ</string>
+ <!-- The mode picker to switch between camera, video and panorama. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_mode_picker">كامېرا، سىن ياكى پۈتۈن مەنزىرە تاللىغۇچ</string>
+ <!-- The button to switch to the second-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_second_level_indicators">تېخىمۇ كۆپ تەڭشەك تىزگىنلىرى</string>
+ <!-- The button to back to the first-level indicators of the camera settings. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_back_to_first_level">تەڭشەك تىزگىنىنى ياپ</string>
+ <!-- The zoom control button. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_zoom_control">يىراق يېقىن تىزگىنى</string>
+ <!-- The decrement button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_decrement">%1$s نى يىراقلات</string>
+ <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_increment">%1$s نى يېقىنلات</string>
+ <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_check_box">%1$s كۆپ تاللاش رامكىسى</string>
+ <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_camera">سۈرەتكە ئالماشتۇر</string>
+ <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_video">سىنغا ئالماشتۇر</string>
+ <!-- The button to switch to Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_panorama">پۈتۈن مەنزىرىگە ئالماشتۇر</string>
+ <!-- The button to switch to new Panorama mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_new_panorama">يېڭى پۈتۈن مەنزىرىگە ئالماشتۇر</string>
+ <!-- The button to switch to the Re-Focus mode. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_switch_to_refocus">قايتا فوكۇسلاشقا ئالماشتۇر</string>
+ <!-- The button in review mode indicating that the photo taking, video recording, and panorama saving session should be canceled [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_cancel">ئالدىن كۆزىتىشتىن ۋاز كەچ</string>
+ <!-- The button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_ok">ئالدىن كۆزىتىش تامام</string>
+ <!-- button in review mode indicate the user want to retake another photo/video for attachment [
+CHAR LIMIT = NONE] -->
+ <string name="accessibility_review_retake">ئالدىن كۆزىتىشنى قايتا تارت</string>
+ <!-- The button to play the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_play_video">سىن چال</string>
+ <!-- The button to pause the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_pause_video">سىننى ۋاقىتلىق توختات</string>
+ <!-- The button to reload the video. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_reload_video">سىننى قايتا يۈكلە</string>
+ <!-- The time bar of the media player. [CHAR LIMIT = NONE] -->
+ <string name="accessibility_time_bar">سىن چالغۇچ ۋاقىت بالداق</string>
+ <!-- TODO: remove the string as it is a work-around solution to bypass the default speak of the element type. -->
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_on">ئوچۇق</string>
+ <!-- Default text for a button that can be toggled on and off. -->
+ <string name="capital_off">تاقاق</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_off">تاقاق</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_500">0.5 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1000">1 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1500">1.5 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2000">2 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_2500">2.5 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3000">3 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_4000">4 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5000">5 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_6000">6 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10000">10 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_12000">12 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_15000">15 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_24000">24 سېكۇنت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_30000">0-5 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_60000">1 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_90000">1.5 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_120000">2 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_150000">2.5 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_180000">3 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_240000">4 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_300000">5 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_360000">6 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_600000">10 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_720000">12 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_900000">15 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1440000">24 مىنۇت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_1800000">0.5 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_3600000">1 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_5400000">1.5 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_7200000">2 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_9000000">2.5 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_10800000">3 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_14400000">4 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_18000000">5 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_21600000">6 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_36000000">10 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_43200000">12 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_54000000">15 سائەت</string>
+ <!-- Text to indicate time lapse recording frame interval [CHAR LIMIT = 30] -->
+ <string name="pref_video_time_lapse_frame_interval_86400000">24 سائەت</string>
+ <!-- Seconds: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_seconds">سېكۇنت</string>
+ <!-- Minutes: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_minutes">مىنۇت</string>
+ <!-- Hours: a unit of time for time lapse intervals. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_hours">سائەت</string>
+ <!-- The button to confirm time-lapse setting changes. [CHAR LIMIT = 20] -->
+ <string name="time_lapse_interval_set">تامام</string>
+ <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
+ <string name="set_time_interval">\"ۋاقىت ئارىلىق تەڭشىكى\"</string>
+ <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_time_interval_help">ۋاقىت كېچىكتۈرۈپ سۈرەت تارتىش ئىقتىدارى تاقالدى. ۋاقىت ئارىلىقى تەڭشىمەكچى بولغاندا، ئالدى بىلەن شۇ ئىقتىدارنى ئېچىڭ.</string>
+ <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+ <string name="set_timer_help">تەتۈر ساناق ۋاقىت خاتىرىلىغۇچ تاقاق. سۈرەت تارتىشتىن ئىلگىرى تەتۈر ساناق ئۈچۈن، ئالدى بىلەن شۇ ئىقتىدارنى ئېچىڭ.</string>
+ <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+ <string name="set_duration">داۋاملىشىش ۋاقىت تەڭشىكى سېكۇنت</string>
+ <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+ <string name="count_down_title_text">سۈرەت تارتىش تەتۈر ساناق ساناۋاتىدۇ</string>
+ <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
+ <string name="remember_location_title">سۈرەت تارتقان ئورۇننى ئەستە تۇتامدۇ؟</string>
+ <!-- Message for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = None] -->
+ <string name="remember_location_prompt">سىز تارتقان سىن ۋە سۈرەتلىرىڭىزگە تارتقان ئورۇن بەلگىسىنى سالىدۇ.\"\n\n\"باشقا ئەپلەر سىز ساقلىغان سۈرەتلەرنى كۆرگەندە بۇ ئۇچۇرلارنى زىيارەت قىلالايدۇ.</string>
+ <!-- Negative answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_no">ياق، رەھمەت</string>
+ <!-- Positive answer for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 20] -->
+ <string name="remember_location_yes">ھەئە</string>
+ <!-- Menu item to launch the camera app [CHAR LIMIT=25] -->
+ <string name="menu_camera">كامېرا</string>
+ <!-- Menu item to search for photos [CHAR LIMIT=25] -->
+ <string name="menu_search">ئىزدە</string>
+ <!-- Title for the all photos tab [CHAR LIMIT=25] -->
+ <string name="tab_photos">سۈرەتلەر</string>
+ <!-- Title for the albums tab [CHAR LIMIT=25] -->
+ <string name="tab_albums">سۈرەت توپلىمى</string>
+ <!-- Camera menu labels -->
+ <!-- more options label [CHAR LIMIT=50] -->
+ <string name="camera_menu_more_label">تېخىمۇ كۆپ تاللانما</string>
+ <!-- settings label [CHAR LIMIT=50] -->
+ <string name="camera_menu_settings_label">تەڭشەكلەر</string>
+ <!-- String indicating how many photos are in an album [CHAR LIMIT=15] -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-uk/cm_strings.xml b/res/values-uk/cm_strings.xml
new file mode 100644
index 000000000..4713de03e
--- /dev/null
+++ b/res/values-uk/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Час запису</string>
+</resources>
diff --git a/res/values-uk/codeaurora_strings.xml b/res/values-uk/codeaurora_strings.xml
new file mode 100644
index 000000000..075c5f344
--- /dev/null
+++ b/res/values-uk/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Крок</string>
+ <string name="step_option_desc">Налаштувати швидкий крок вперед/назад</string>
+ <string name="setp_option_three_second">3 секунди</string>
+ <string name="setp_option_six_second">6 секунд</string>
+ <string name="loop">"Петля"</string>
+ <string name="single">"Одиночна"</string>
+ <string name="stereo">"Стерео"</string>
+ <string name="speaker_on">Динамік УВІМК</string>
+ <string name="speaker_off">Динамік ВИМК</string>
+ <string name="speaker_need_headset">Підключіть навушники для використання цієї функції.</string>
+ <string name="single_track">"Одна композиція"</string>
+ <string name="input_url">"Введіть URL-адресу"</string>
+ <string name="streaming_settings">"Налаштування трансляції"</string>
+ <string name="next">"Наступна"</string>
+ <string name="previous">"Попередня"</string>
+ <string name="buffer_size">Розмір буфера</string>
+ <string name="apn">Бажаний APN</string>
+ <string name="rtp_min_port">Мін порт</string>
+ <string name="rtp_max_port">Макс порт</string>
+ <string name="set_rtp_min_port">Встановити мін. порт</string>
+ <string name="set_rtp_max_port">Встановити макс. порт</string>
+ <string name="set_buffer_size">Встановити розмір буфера</string>
+ <string name="set_apn">Виберіть бажаний APN</string>
+ <string name="setting">Налаштування</string>
+ <string name="server_timeout_title">"Час очікування сервера"</string>
+ <string name="server_timeout_message">"Підключатися до сервера повторно, щоб відтворити відео?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Не вдалося підключитися, спроба встановити підключення з %1$d\u2026"</string>
+ <string name="media_controller_live">Наживо</string>
+ <string name="media_controller_playing">Відтворюється</string>
+ <string name="media_controller_connecting">Підключення\u2026</string>
+ <string name="bookmark_add">"Додати закладку"</string>
+ <string name="bookmark_display">"Показати закладки"</string>
+ <string name="bookmark_empty">"Немає закладок"</string>
+ <string name="bookmark_exist">"Закладка вже існує"</string>
+ <string name="bookmark_add_success">"Закладку додано"</string>
+ <string name="bookmark_list">"Закладки"</string>
+ <string name="bookmark_title">"Назва"</string>
+ <string name="bookmark_location">"Місцезнаходження"</string>
+ <string name="delete_all">"Видалити все"</string>
+ <string name="default_title">"Назва за замовчуванням"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Більше зображень</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Не можна вимкнути звук: відео не підтримується</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Не встановлено жодних програм з картами, щоб показати місце.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Підсилення НЧ</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D-ефект</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Аудіо ефекти</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Підключіть навушники для цих ефектів.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Даний відеофайл не може бути обрізаний</string>
+ <string name="no_permission_for_drm">Вибачте, але відправка захищених DRM файлів неможлива</string>
+ <string name="drm_license_info">Відомості про ліцензію DRM</string>
+</resources>
diff --git a/res/values-ur-rPK/cm_strings.xml b/res/values-ur-rPK/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-ur-rPK/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-ur-rPK/codeaurora_strings.xml b/res/values-ur-rPK/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-ur-rPK/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-uz-rUZ/cm_strings.xml b/res/values-uz-rUZ/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-uz-rUZ/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-uz-rUZ/codeaurora_strings.xml b/res/values-uz-rUZ/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-uz-rUZ/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values-v21/colors.xml b/res/values-v21/colors.xml
new file mode 100644
index 000000000..4ebfd2881
--- /dev/null
+++ b/res/values-v21/colors.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<resources>
+ <!-- configuration for album set page -->
+ <color name="albumset_background">#ff21272b</color>
+ <color name="albumset_placeholder">#37474F</color>
+ <color name="albumset_label_background">#EE37474F</color>
+ <color name="albumset_label_title">#FBFBFB</color>
+ <color name="albumset_label_count">#A9ABAD</color>
+
+ <!-- configuration for album page -->
+ <color name="album_background">#ff21272b</color>
+ <color name="album_placeholder">#37474F</color>
+
+ <!-- configuration for photo page -->
+ <color name="photo_background">#ff21272b</color>
+ <color name="photo_placeholder">#37474F</color>
+
+ <!-- configuration for manage cache page -->
+ <color name="cache_background">#ff21272b</color>
+ <color name="cache_placeholder">#37474F</color>
+
+ <color name="bitmap_screennail_placeholder">#37474F</color>
+
+ <color name="slideshow_background">#ff21272b</color>
+
+ <color name="button_dark_transparent_background">#263238</color>
+
+ <color name="ingest_highlight_semitransparent">#8833b5e5</color>
+ <color name="ingest_date_tile_text">#33b5e5</color>
+
+ <!-- FAB -->
+ <color name="fab">#FF9800</color>
+ <color name="floating_action_button_touch_tint">#FFB74D</color>
+ <color name="floating_action_button_icon_color">#ffffff</color>
+
+</resources>
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
new file mode 100644
index 000000000..75457ca1a
--- /dev/null
+++ b/res/values-v21/styles.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<resources>
+ <style name="Theme.GalleryBase" parent="android:Theme.Material">
+ <item name="android:colorPrimary">@color/primary</item>
+ <item name="android:colorPrimaryDark">@color/primary_dark</item>
+ <item name="android:colorAccent">@color/accent</item>
+ <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
+ <item name="switchStyle">@android:style/Widget.CompoundButton</item>
+ </style>
+ <style name="Theme.Gallery.Dialog" parent="android:Theme.Material.Dialog"/>
+ <style name="Theme.Gallery" parent="Theme.GalleryBase">
+ <item name="android:displayOptions"></item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:actionBarStyle">@style/Material.ActionBar</item>
+ <item name="android:colorBackground">@color/material_blue_grey_950</item>
+ <item name="android:colorBackgroundCacheHint">@color/material_blue_grey_950</item>
+ <item name="android:actionModeBackground">@color/primary</item>
+ </style>
+ <style name="Theme.Crop" parent="Theme.GalleryBase">
+ <item name="android:displayOptions"></item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:actionBarStyle">@style/Material.ActionBar</item>
+ <item name="android:colorBackground">@null</item>
+ <item name="android:colorBackgroundCacheHint">@null</item>
+ <item name="android:windowBackground">@color/filtershow_background</item>
+ </style>
+ <style name="Material.ActionBar" parent="android:Widget.Material.ActionBar">
+ <item name="android:title"></item>
+ <item name="android:displayOptions">useLogo|showTitle</item>
+ <item name="android:background">@color/primary</item>
+ <item name="android:backgroundStacked">@null</item>
+ <item name="android:titleTextStyle">@style/ActionBarTitle</item>
+ <item name="android:elevation">@dimen/action_bar_elevation</item>
+ </style>
+ <style name="ActionBarTitle" parent="android:style/TextAppearance.Material.Widget.ActionBar.Title">
+ <item name="android:textStyle">bold</item>
+ <item name="android:textSize">18sp</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
+ <style name="ActionBarTwoLinePrimary" parent="@android:style/TextAppearance.Material.Widget.ActionBar.Title"></style>
+ <style name="ActionBarTwoLineSecondary" parent="@android:style/TextAppearance.Material.Widget.ActionBar.Subtitle"></style>
+ <style name="ActionBarTwoLineItem">
+ <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
+ </style>
+ <style name="Theme.Photos.Gallery" parent="android:Theme.Material">
+ </style>
+ <style name="Theme.Photos.Fullscreen" parent="android:Theme.Material">
+ </style>
+</resources>
diff --git a/res/values-vi/cm_strings.xml b/res/values-vi/cm_strings.xml
new file mode 100644
index 000000000..ef477326a
--- /dev/null
+++ b/res/values-vi/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Thời gian ghi</string>
+</resources>
diff --git a/res/values-vi/codeaurora_strings.xml b/res/values-vi/codeaurora_strings.xml
new file mode 100644
index 000000000..bf25c88c8
--- /dev/null
+++ b/res/values-vi/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Bước</string>
+ <string name="step_option_desc">Tuỳ chỉnh bước tới/lui nhanh</string>
+ <string name="setp_option_three_second">3 giây</string>
+ <string name="setp_option_six_second">16 giây</string>
+ <string name="loop">"Lặp lại"</string>
+ <string name="single">"Đơn"</string>
+ <string name="stereo">"Âm thanh nổi"</string>
+ <string name="speaker_on">Loa ngoài BẬT</string>
+ <string name="speaker_off">Loa ngoài TẮT</string>
+ <string name="speaker_need_headset">Cắm tai nghe để dùng tính năng này.</string>
+ <string name="single_track">"Một bài hát"</string>
+ <string name="input_url">"Nhập URL"</string>
+ <string name="streaming_settings">"Cài đặt phát trực tuyến"</string>
+ <string name="next">"Tiếp theo"</string>
+ <string name="previous">"Trước"</string>
+ <string name="buffer_size">Kích cỡ bộ đệm</string>
+ <string name="apn">APN ưu tiên</string>
+ <string name="rtp_min_port">Cổng nhỏ nhất</string>
+ <string name="rtp_max_port">Cổng lớn nhất</string>
+ <string name="set_rtp_min_port">Đặt cổng nhỏ nhất</string>
+ <string name="set_rtp_max_port">Đặt cổng lớn nhất</string>
+ <string name="set_buffer_size">Đặt kích thước bộ đệm</string>
+ <string name="set_apn">Chọn APN ưu tiên</string>
+ <string name="setting">Cài đặt</string>
+ <string name="server_timeout_title">"Thời gian chờ máy chủ"</string>
+ <string name="server_timeout_message">"Kết nối lại đến máy chủ để phát video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Kết nối thất bại, đang thử kết nối lại đến %1$d\u2026"</string>
+ <string name="media_controller_live">Trực tiếp</string>
+ <string name="media_controller_playing">Đang phát</string>
+ <string name="media_controller_connecting">Đang kết nối\u2026</string>
+ <string name="bookmark_add">"Thêm dấu trang"</string>
+ <string name="bookmark_display">"Hiện dấu trang"</string>
+ <string name="bookmark_empty">"Không có dấu trang"</string>
+ <string name="bookmark_exist">"Dấu trang đã tồn tại"</string>
+ <string name="bookmark_add_success">"Đã thêm dấu trang"</string>
+ <string name="bookmark_list">"Dấu trang"</string>
+ <string name="bookmark_title">"Tiêu đề"</string>
+ <string name="bookmark_location">"Vị trí"</string>
+ <string name="delete_all">"Xoá tất cả"</string>
+ <string name="default_title">"Tiêu đề mặc định"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">Nhiều ảnh hơn</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Không thể ngắt tiếng: video không hỗ trợ</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">Không có ứng dụng bản đồ để hiện vị trí.</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Tăng bass</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">Hiệu ứng 3D</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Hiệu ứng âm thanh</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Cắm tai nghe cho những hiệu ứng này.</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Xin lỗi, không thể cắt video này</string>
+ <string name="no_permission_for_drm">Rất tiếc, không thể chia sẻ tập tin được bảo vệ DRM</string>
+ <string name="drm_license_info">Thông tin giấy phép DRM</string>
+</resources>
diff --git a/res/values-xlarge/dimensions.xml b/res/values-xlarge/dimensions.xml
index 85329e012..ba654d5a5 100644
--- a/res/values-xlarge/dimensions.xml
+++ b/res/values-xlarge/dimensions.xml
@@ -22,6 +22,8 @@
<!-- configuration for album set page -->
<integer name="albumset_rows_land">3</integer>
<integer name="albumset_rows_port">5</integer>
+ <integer name="albumset_cols_land">5</integer>
+ <integer name="albumset_cols_port">3</integer>
<dimen name="albumset_title_font_size">14sp</dimen>
<dimen name="albumset_count_font_size">11sp</dimen>
<dimen name="albumset_title_right_margin">23dp</dimen>
@@ -30,4 +32,6 @@
<!-- configuration for album page -->
<integer name="album_rows_land">3</integer>
<integer name="album_rows_port">5</integer>
+ <integer name="album_cols_land">5</integer>
+ <integer name="album_cols_port">3</integer>
</resources>
diff --git a/res/values-zh-rCN/cm_strings.xml b/res/values-zh-rCN/cm_strings.xml
new file mode 100644
index 000000000..ffa5bb6a4
--- /dev/null
+++ b/res/values-zh-rCN/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">已记录时间</string>
+</resources>
diff --git a/res/values-zh-rCN/codeaurora_strings.xml b/res/values-zh-rCN/codeaurora_strings.xml
new file mode 100644
index 000000000..3c6690ab5
--- /dev/null
+++ b/res/values-zh-rCN/codeaurora_strings.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">步长</string>
+ <string name="step_option_desc">自定义快进/倒带步长</string>
+ <string name="setp_option_three_second">3 秒</string>
+ <string name="setp_option_six_second">6 秒</string>
+ <string name="loop">"循环"</string>
+ <string name="single">"单声道"</string>
+ <string name="stereo">"立体声​​​"</string>
+ <string name="speaker_on">扬声器 开</string>
+ <string name="speaker_off">扬声器 关</string>
+ <string name="speaker_need_headset">插入耳机以使用此功能。</string>
+ <string name="single_track">"单音轨"</string>
+ <string name="input_url">"输入 URL"</string>
+ <string name="streaming_settings">"流媒体设置"</string>
+ <string name="next">"下一个"</string>
+ <string name="previous">"上一个"</string>
+ <string name="buffer_size">缓冲大小</string>
+ <string name="apn">首选 APN</string>
+ <string name="rtp_min_port">最小端口</string>
+ <string name="rtp_max_port">最大端口</string>
+ <string name="set_rtp_min_port">设置最小端口</string>
+ <string name="set_rtp_max_port">设置最大端口</string>
+ <string name="set_buffer_size">设置缓冲区大小</string>
+ <string name="set_apn">选择首选的 APN</string>
+ <string name="setting">设置</string>
+ <string name="server_timeout_title">"服务器超时"</string>
+ <string name="server_timeout_message">"重新连接到服务器以便继续播放视频?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"连接失败,正在尝试重新连接到 %1$d\u2026"</string>
+ <string name="media_controller_live">直播</string>
+ <string name="media_controller_playing">正在播放</string>
+ <string name="media_controller_connecting">正在连接\u2026</string>
+ <string name="bookmark_add">"添加书签"</string>
+ <string name="bookmark_display">"显示书签"</string>
+ <string name="bookmark_empty">"没有书签"</string>
+ <string name="bookmark_exist">"书签已存在"</string>
+ <string name="bookmark_add_success">"书签已添加"</string>
+ <string name="bookmark_list">"书签"</string>
+ <string name="bookmark_title">"标题"</string>
+ <string name="bookmark_location">"位置"</string>
+ <string name="delete_all">"删除所有"</string>
+ <string name="default_title">"默认标题"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">更多图片</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">不能静音:视频不支持</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">找不到用于显示地点的地图应用。</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">低音增强</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D 效果</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">音效</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">插上耳机来享受这些效果。</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">抱歉,此视频文件不能被修剪</string>
+ <string name="no_permission_for_drm">抱歉,受 DRM 保护的文件不能共享</string>
+ <string name="drm_license_info">DRM 许可证信息</string>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 91a6358c2..e977e177c 100644..100755
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -105,6 +105,7 @@
<string name="group_by_size" msgid="153766174950394155">"按大小分组"</string>
<string name="untagged" msgid="7281481064509590402">"未加标签"</string>
<string name="no_location" msgid="4043624857489331676">"无位置信息"</string>
+ <string name="no_faces">"无人物信息"</string>
<string name="no_connectivity" msgid="7164037617297293668">"出现网络问题,系统无法识别某些位置。"</string>
<string name="sync_album_error" msgid="1020688062900977530">"无法下载此相册中的照片,请稍后重试。"</string>
<string name="show_images_only" msgid="7263218480867672653">"仅限图片"</string>
@@ -436,4 +437,9 @@
<item quantity="one" msgid="6949174783125614798">"%1$d张照片"</item>
<item quantity="other" msgid="3813306834113858135">"%1$d张照片"</item>
</plurals>
+
+ <string name="text_makeup_whiten">美白</string>
+ <string name="text_makeup_Soften">磨皮</string>
+ <string name="text_makeup_trimface">瘦脸</string>
+ <string name="text_makeup_bigeye">大眼</string>
</resources>
diff --git a/res/values-zh-rHK/cm_strings.xml b/res/values-zh-rHK/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-zh-rHK/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-zh-rHK/codeaurora_strings.xml b/res/values-zh-rHK/codeaurora_strings.xml
new file mode 100644
index 000000000..48c9ff0c9
--- /dev/null
+++ b/res/values-zh-rHK/codeaurora_strings.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">步驟</string>
+ <string name="step_option_desc">自訂快進/後退步驟</string>
+ <string name="setp_option_six_second">6 秒</string>
+ <string name="loop">"循環"</string>
+ <string name="single">"單聲道"</string>
+ <string name="stereo">"立體聲"</string>
+ <string name="speaker_on">開啟喇叭</string>
+ <string name="speaker_off">關閉喇叭</string>
+ <string name="speaker_need_headset">插上耳機才能使用此功能。</string>
+ <string name="single_track">"單音軌"</string>
+ <string name="input_url">"輸入 URL"</string>
+ <string name="streaming_settings">"串流設定"</string>
+ <string name="next">"下一首"</string>
+ <string name="previous">"上一首"</string>
+ <string name="buffer_size">緩衝區大小</string>
+ <string name="apn">首選 APN</string>
+ <string name="rtp_min_port">最小埠</string>
+ <string name="rtp_max_port">最大埠</string>
+ <string name="set_rtp_min_port">設定最小埠</string>
+ <string name="set_rtp_max_port">設定最大埠</string>
+ <string name="set_buffer_size">設定緩衝區大小</string>
+ <string name="set_apn">選擇首選 APN</string>
+ <string name="setting">設定</string>
+ <string name="server_timeout_title">"伺服器逾時"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"連綫失敗,嘗試重新連綫至 %1$d\u2026"</string>
+ <string name="media_controller_live">直播</string>
+ <string name="media_controller_playing">正在播放</string>
+ <string name="media_controller_connecting">正在連綫\u2026</string>
+ <string name="bookmark_add">"新增書籤"</string>
+ <string name="bookmark_display">"顯示書籤"</string>
+ <string name="bookmark_empty">"無書籤"</string>
+ <string name="bookmark_exist">"書籤已存在"</string>
+ <string name="bookmark_add_success">"書籤已新增"</string>
+ <string name="bookmark_list">"書籤"</string>
+ <string name="bookmark_title">"標題"</string>
+ <string name="bookmark_location">"位置"</string>
+ <string name="delete_all">"全部刪除"</string>
+ <string name="default_title">"預設標題"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">更多圖像</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">無法靜音:影片不支援</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">沒有安裝地圖應用程式供顯示位置。</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">低音增強</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D 效果</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">音效</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">插入耳機來享受這些效果。</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">抱歉,此影片檔無法被修剪</string>
+</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 68317d582..434190b43 100644..100755
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -105,6 +105,7 @@
<string name="group_by_size" msgid="153766174950394155">"依大小分類"</string>
<string name="untagged" msgid="7281481064509590402">"無標記"</string>
<string name="no_location" msgid="4043624857489331676">"無地點資訊"</string>
+ <string name="no_faces">"無人物資訊"</string>
<string name="no_connectivity" msgid="7164037617297293668">"網絡發生問題,因此部分位置無法辨別。"</string>
<string name="sync_album_error" msgid="1020688062900977530">"無法下載這本相簿中的相片,請稍後再試。"</string>
<string name="show_images_only" msgid="7263218480867672653">"僅顯示相片"</string>
diff --git a/res/values-zh-rTW/cm_strings.xml b/res/values-zh-rTW/cm_strings.xml
new file mode 100644
index 000000000..b9e0b0e19
--- /dev/null
+++ b/res/values-zh-rTW/cm_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">記錄時間</string>
+</resources>
diff --git a/res/values-zh-rTW/codeaurora_strings.xml b/res/values-zh-rTW/codeaurora_strings.xml
new file mode 100644
index 000000000..62a61f429
--- /dev/null
+++ b/res/values-zh-rTW/codeaurora_strings.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">步幅</string>
+ <string name="step_option_desc">自訂快進/快退步驟</string>
+ <string name="setp_option_three_second">3 秒</string>
+ <string name="setp_option_six_second">6 秒</string>
+ <string name="loop">"重複"</string>
+ <string name="single">"單次"</string>
+ <string name="stereo">"立體聲"</string>
+ <string name="speaker_on">開啟揚聲器</string>
+ <string name="speaker_off">關閉揚聲器</string>
+ <string name="speaker_need_headset">插上耳機即可使用此功能。</string>
+ <string name="single_track">"單音軌"</string>
+ <string name="input_url">"輸入網址"</string>
+ <string name="streaming_settings">"串流媒體設定"</string>
+ <string name="next">"下一首"</string>
+ <string name="previous">"上一首"</string>
+ <string name="buffer_size">緩衝區大小</string>
+ <string name="apn">首選 APN</string>
+ <string name="rtp_min_port">最小埠</string>
+ <string name="rtp_max_port">最大埠</string>
+ <string name="set_rtp_min_port">設定最小埠</string>
+ <string name="set_rtp_max_port">設定最大埠</string>
+ <string name="set_buffer_size">設置緩衝區大小</string>
+ <string name="set_apn">選取首選的 APN</string>
+ <string name="setting">設定</string>
+ <string name="server_timeout_title">"伺服器逾時"</string>
+ <string name="server_timeout_message">"重新連接至伺服器並繼續播放影片嗎?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"連接失敗,嘗試重新連接至「%1$d」\u2026"</string>
+ <string name="media_controller_live">直播</string>
+ <string name="media_controller_playing">正在播放</string>
+ <string name="media_controller_connecting">正在連接\u2026</string>
+ <string name="bookmark_add">"新增書籤"</string>
+ <string name="bookmark_display">"顯示書籤"</string>
+ <string name="bookmark_empty">"沒有書籤"</string>
+ <string name="bookmark_exist">"書籤已存在"</string>
+ <string name="bookmark_add_success">"已新增書籤"</string>
+ <string name="bookmark_list">"書籤"</string>
+ <string name="bookmark_title">"標題"</string>
+ <string name="bookmark_location">"位置"</string>
+ <string name="delete_all">"刪除全部"</string>
+ <string name="default_title">"預設標題"</string>
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">更多圖片</string>
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">無法靜音:影片不支援</string>
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">沒有安裝地圖應用程式可顯示位置</string>
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">低音強化</string>
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D 效果</string>
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">音訊效果</string>
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">接上耳機來享受這些效果。</string>
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">抱歉,此影片檔案無法被剪輯</string>
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 88fa970d9..7372aabd3 100644..100755
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -105,6 +105,7 @@
<string name="group_by_size" msgid="153766174950394155">"依大小分類"</string>
<string name="untagged" msgid="7281481064509590402">"無標記"</string>
<string name="no_location" msgid="4043624857489331676">"無位置資訊"</string>
+ <string name="no_faces">"無人物資訊"</string>
<string name="no_connectivity" msgid="7164037617297293668">"網路發生問題,因此無法辨識部分位置。"</string>
<string name="sync_album_error" msgid="1020688062900977530">"無法下載這個相簿中的相片,請稍後再試。"</string>
<string name="show_images_only" msgid="7263218480867672653">"僅顯示圖片"</string>
diff --git a/res/values-zu/cm_strings.xml b/res/values-zu/cm_strings.xml
new file mode 100644
index 000000000..6b111e056
--- /dev/null
+++ b/res/values-zu/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+</resources>
diff --git a/res/values-zu/codeaurora_strings.xml b/res/values-zu/codeaurora_strings.xml
new file mode 100644
index 000000000..5936bedfc
--- /dev/null
+++ b/res/values-zu/codeaurora_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <!-- The label for the audio effects menu. -->
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <!-- The title of the audio effects dialog. -->
+ <!-- The tips of trimming video -->
+</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 5a00a695a..eadd4f20b 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -42,5 +42,9 @@
<attr name="largeIcons" format="reference" />
<attr name="images" format="reference" />
</declare-styleable>
-
+ <declare-styleable name="Knob">
+ <attr name="label" format="string" />
+ <attr name="background" format="integer" />
+ <attr name="foreground" format="integer" />
+ </declare-styleable>
</resources>
diff --git a/res/values/bool.xml b/res/values/bool.xml
index 464842ab4..3412d825d 100644..100755
--- a/res/values/bool.xml
+++ b/res/values/bool.xml
@@ -15,4 +15,9 @@
-->
<resources>
<bool name="show_action_bar_title">false</bool>
-</resources> \ No newline at end of file
+ <bool name="playlist">true</bool>
+ <bool name="loop">true</bool>
+ <bool name="stereo">true</bool>
+ <bool name="streaming">true</bool>
+ <bool name="speaker">true</bool>
+</resources>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
new file mode 100644
index 000000000..d6da3b19d
--- /dev/null
+++ b/res/values/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2012-2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+ <string name="record_time">Record time</string>
+</resources> \ No newline at end of file
diff --git a/res/values/codeaurora_strings.xml b/res/values/codeaurora_strings.xml
new file mode 100644
index 000000000..9bc0ff4e8
--- /dev/null
+++ b/res/values/codeaurora_strings.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+Copyright (C) 2014-2015 The CyanogenMod Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Strings for step option settins -->
+ <string name="setp_option_name">Step</string>
+ <string name="step_option_desc">Customize fast forward/rewind step</string>
+ <string name="setp_option_three_second">3 seconds</string>
+ <string name="setp_option_six_second">6 seconds</string>
+
+ <string name="loop">"Loop"</string>
+ <string name="single">"Single"</string>
+ <string name="stereo">"Stereo"</string>
+ <string name="speaker_on">Speaker ON</string>
+ <string name="speaker_off">Speaker OFF</string>
+ <string name="speaker_need_headset">Plug in headphones to use this feature.</string>
+ <string name="single_track">"Single track"</string>
+ <string name="input_url">"Enter URL"</string>
+ <string name="streaming_settings">"Streaming settings"</string>
+ <string name="next">"Next"</string>
+ <string name="previous">"Previous"</string>
+
+ <string name="rtp_rtcp" translatable="false">RTP/RTCP</string>
+ <string name="buffer_size">Buffer size</string>
+ <string name="apn">Preferred APN</string>
+ <string name="rtp_min_port">Min port</string>
+ <string name="rtp_max_port">Max port</string>
+ <string name="set_rtp_min_port">Set min port</string>
+ <string name="set_rtp_max_port">Set max port</string>
+ <string name="set_buffer_size">Set buffer size</string>
+ <string name="set_apn">Select preferred APN</string>
+ <string name="setting">Settings</string>
+
+ <string name="server_timeout_title">"Server timeout"</string>
+ <string name="server_timeout_message">"Reconnect to the server to play the video?"</string>
+ <string name="videoview_error_text_cannot_connect_retry">"Connection failed, trying to reconnect to %1$d\u2026"</string>
+ <string name="media_controller_live">Live</string>
+ <string name="media_controller_playing">Playing</string>
+ <string name="media_controller_connecting">Connecting\u2026</string>
+
+ <string name="bookmark_add">"Add bookmark"</string>
+ <string name="bookmark_display">"Show bookmarks"</string>
+ <string name="bookmark_empty">"No bookmarks"</string>
+ <string name="bookmark_exist">"Bookmark already exists"</string>
+ <string name="bookmark_add_success">"Bookmark added"</string>
+ <string name="bookmark_list">"Bookmarks"</string>
+ <string name="bookmark_title">"Title"</string>
+ <string name="bookmark_location">"Location"</string>
+ <string name="delete_all">"Delete all"</string>
+ <string name="default_title">"Default title"</string>
+
+ <!-- A label describing to link website [CHAR LIMIT=30] -->
+ <string name="more_image">More images</string>
+ <string name="website_for_more_image" translatable="false"></string>
+
+ <!-- Toast if the muted video is not supported. [CHAR LIMIT=80] -->
+ <string name="mute_nosupport">Can not mute : video not supported</string>
+
+ <!-- The message is shown in toast when click showOnMap Menu and there is no map app -->
+ <string name="map_activity_not_found_err">There is no maps app installed to show the location.</string>
+
+ <!-- The label for the bass boost knob of the audio effects dialog. -->
+ <string name="bass_boost_strength">Bass boost</string>
+
+ <!-- The label for the 3d effect knob of the audio effects dialog. -->
+ <string name="virtualizer_strength">3D effect</string>
+
+ <!-- The label for the audio effects menu. -->
+ <string name="audio_effects">Audio effects</string>
+
+ <!-- Toast if user attempts to control audio effects without headphones plugged in. -->
+ <string name="headset_plug">Plug in headphones for these effects.</string>
+
+ <!-- The title of the audio effects dialog. -->
+ <string name="audio_effects_dialog_title">Snapdragon Audio+</string>
+
+ <!-- The tips of trimming video -->
+ <string name="fail_trim">Sorry, this video file can not be trimmed</string>
+
+ <string name="no_permission_for_drm">Sorry, DRM protected files cannot be shared</string>
+ <string name="drm_license_info">DRM license info</string>
+</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 4fe918094..9396a99cf 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,7 +15,10 @@
-->
<resources>
<color name="default_background">#000</color>
-
+ <color name="primary">#37474F</color>
+ <color name="primary_dark">#263238</color>
+ <color name="accent">#607D8B</color>
+ <color name="material_blue_grey_950">#ff21272b</color>
<!-- configuration for album set page -->
<color name="albumset_background">#1A1A1A</color>
<color name="albumset_placeholder">#333</color>
@@ -70,4 +73,8 @@
<color name="face_detect_fail">#80d05060</color>
<color name="gray">#FFAAAAAA</color>
+ <color name="highlight">#f41e26</color>
+ <color name="lowlight">#650101</color>
+ <color name="grey">#e7e7e7</color>
+ <color name="disabled_knob">#575757</color>
</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 33e1e146b..25b8e6a49 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
+<!-- Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ Not a Contribution.
+
+ 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.
@@ -19,4 +22,7 @@
<resources>
<!-- Maximum recording length in milliseconds. 0 means unlimited. -->
<integer name="max_video_recording_length">0</integer>
+ <bool name="config_show_more_images">false</bool>
+
+ <bool name="config_scroll_horizontal">false</bool>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ef742d2b5..308f31c41 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -112,9 +112,13 @@
<!-- configuration for legacy album set page -->
<integer name="albumset_rows_land">2</integer>
<integer name="albumset_rows_port">3</integer>
- <dimen name="albumset_padding_top">7dp</dimen>
- <dimen name="albumset_padding_bottom">7dp</dimen>
- <dimen name="albumset_slot_gap">7dp</dimen>
+ <integer name="albumset_cols_land">3</integer>
+ <integer name="albumset_cols_port">2</integer>
+ <dimen name="albumset_padding_top">3dp</dimen>
+ <dimen name="albumset_padding_bottom">3dp</dimen>
+ <dimen name="albumset_padding_left">3dp</dimen>
+ <dimen name="albumset_padding_right">3dp</dimen>
+ <dimen name="albumset_slot_gap">3dp</dimen>
<dimen name="albumset_label_background_height">30dp</dimen>
<dimen name="albumset_title_offset">10dp</dimen>
@@ -126,9 +130,15 @@
<dimen name="albumset_icon_size">25dp</dimen>
<!-- configuration for album page -->
- <integer name="album_rows_land">2</integer>
+ <integer name="album_rows_land">3</integer>
<integer name="album_rows_port">4</integer>
- <dimen name="album_slot_gap">5dp</dimen>
+ <integer name="album_cols_land">6</integer>
+ <integer name="album_cols_port">3</integer>
+ <dimen name="album_padding_top">3dp</dimen>
+ <dimen name="album_padding_bottom">3dp</dimen>
+ <dimen name="album_padding_left">3dp</dimen>
+ <dimen name="album_padding_right">3dp</dimen>
+ <dimen name="album_slot_gap">3dp</dimen>
<!-- configuration for manage page -->
<dimen name="cache_pin_size">24dp</dimen>
@@ -152,4 +162,20 @@
<dimen name="photoeditor_text_padding">10dp</dimen>
<dimen name="photoeditor_original_text_size">18dp</dimen>
<dimen name="photoeditor_original_text_margin">4dp</dimen>
+
+ <dimen name="action_bar_elevation">8dp</dimen>
+
+ <!-- FAB -->
+ <!-- Floating action button -->
+ <dimen name="floating_action_button_height">56dp</dimen>
+ <dimen name="floating_action_button_width">56dp</dimen>
+ <dimen name="floating_action_button_radius">28dp</dimen>
+ <dimen name="floating_action_button_translation_z">5dp</dimen>
+ <dimen name="floating_action_button_margin_left">5dp</dimen>
+ <dimen name="floating_action_button_margin_right">5dp</dimen>
+ <dimen name="floating_action_button_margin_bottom">16dp</dimen>
+ <dimen name="elevation_low">1dp</dimen>
+ <dimen name="elevation_high">4dp</dimen>
+ <dimen name="add_button_margin">16dp</dimen>
+
</resources>
diff --git a/res/values/filtershow_color.xml b/res/values/filtershow_color.xml
index 4fb4495e7..9cdec49e2 100644
--- a/res/values/filtershow_color.xml
+++ b/res/values/filtershow_color.xml
@@ -20,29 +20,29 @@
<color name="red">#FF0000</color>
<color name="blue">#0000FF</color>
<color name="text_toolbar">#FFFFFF</color>
- <color name="background_screen">#101010</color>
- <color name="background_toolbar">#363949</color>
- <color name="background_main_toolbar">#232323</color>
+ <color name="background_screen">#ff21272b</color>
+ <color name="background_toolbar">#37474F</color>
+ <color name="background_main_toolbar">#37474F</color>
<color name="toolbar_separation_line">#333333</color>
<color name="slider_dot_color">#646464</color>
<color name="slider_line_color">#888888</color>
- <color name="state_panel_separation_line">#232323</color>
- <color name="filtershow_background">#333333</color>
+ <color name="state_panel_separation_line">#263238</color>
+ <color name="filtershow_background">#ff21272b</color>
<color name="filtershow_graphic">#717171</color>
- <color name="filtershow_stateview_end_background">#232323</color>
+ <color name="filtershow_stateview_end_background">#263238</color>
<color name="filtershow_stateview_end_text">#a7a7a7</color>
<color name="filtershow_stateview_background">#464646</color>
<color name="filtershow_stateview_text">#FFFFFF</color>
<color name="filtershow_stateview_selected_background">#c8c8c8</color>
<color name="filtershow_stateview_selected_text">#000000</color>
- <color name="filtershow_categoryview_background">#1a1a1a</color>
+ <color name="filtershow_categoryview_background">#ff21272b</color>
<color name="filtershow_categoryview_text">#a7a7a7</color>
<color name="filtershow_category_selection">#ffffffff</color>
<color name="gradcontrol_point_center">#ffffffff</color>
<color name="gradcontrol_point_edge">#ffffffff</color>
<color name="gradcontrol_graypoint_center">#888888</color>
<color name="gradcontrol_graypoint_edge">#BBBBBB</color>
- <color name="gradcontrol_point_shadow_start">#66000000</color>
+ <color name="gradcontrol_point_shadow_start">#6621272b</color>
<color name="gradcontrol_point_shadow_end">#00000000</color>
<color name="gradcontrol_line_color">#FFFFFF</color>
<color name="gradcontrol_line_shadow">#000000</color>
diff --git a/res/values/filtershow_ids.xml b/res/values/filtershow_ids.xml
index 460da61aa..58f16dcd1 100644
--- a/res/values/filtershow_ids.xml
+++ b/res/values/filtershow_ids.xml
@@ -50,4 +50,5 @@
<item type="id" name="editorParametric" />
<item type="id" name="editorGrad" />
<item type="id" name="editorChanSat" />
+ <item type="id" name="editorMakeup" />
</resources>
diff --git a/res/values/filtershow_strings.xml b/res/values/filtershow_strings.xml
index 98f32ebda..9a6b08f08 100644
--- a/res/values/filtershow_strings.xml
+++ b/res/values/filtershow_strings.xml
@@ -35,7 +35,7 @@
<!-- Text to label an image as "original" [CHAR LIMIT=20] -->
<string name="original">Original</string>
<!-- Text for filters that apply a border to a picture [CHAR LIMIT=20] -->
- <string name="borders" msgid="4461692156695893616">Borders</string>
+ <string name="borders" msgid="4461692156695893616">Frame</string>
<!-- Text for the custom border filter [CHAR LIMIT=20] -->
<string name="custom_border">Custom</string>
diff --git a/res/values/iconbutton_styles.xml b/res/values/iconbutton_styles.xml
index e33460af2..5e34063c1 100644
--- a/res/values/iconbutton_styles.xml
+++ b/res/values/iconbutton_styles.xml
@@ -38,8 +38,8 @@
<item name="android:textSize">13dp</item>
<item name="android:scaleType">centerInside</item>
<item name="android:gravity">center</item>
- <item name="android:paddingLeft">3dp</item>
- <item name="android:paddingRight">3dp</item>
+ <item name="android:paddingStart">3dp</item>
+ <item name="android:paddingEnd">3dp</item>
<item name="android:paddingTop">6dp</item>
<item name="android:paddingBottom">6dp</item>
<item name="android:ellipsize">marquee</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 570014e3e..167ac893c 100644..100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -233,6 +233,10 @@
have location information in them [CHAR LIMIT=20]-->
<string name="no_location">No location</string>
+ <!-- When grouping photos by peoples, the label used for photos that don't
+ have people information in them [CHAR LIMIT=20]-->
+ <string name="no_faces">No faces</string>
+
<!-- This toast message is shown when network connection is lost while doing clustering -->
<string name="no_connectivity">Some locations couldn\'t be identified due to network problems.</string>
@@ -1115,4 +1119,12 @@ CHAR LIMIT = NONE] -->
<item quantity="one">%1$d photo</item>
<item quantity="other">%1$d photos</item>
</plurals>
+
+ <!-- The tips of trimming video -->
+ <string name="can_not_trim">Only mp4 and 3gp file can be trimmed</string>
+ <string name="text_makeup_whiten">Whiten</string>
+ <string name="text_makeup_Soften">Soften</string>
+ <string name="text_makeup_trimface">Trimface</string>
+ <string name="text_makeup_bigeye">Bigeye</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 33dcbecb6..45a965f6b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -37,7 +37,7 @@
<item name="android:actionBarStyle">@style/Holo.ActionBar</item>
<item name="android:colorBackground">@null</item>
<item name="android:colorBackgroundCacheHint">@null</item>
- <item name="android:windowBackground">@drawable/filtershow_tiled_background</item>
+ <item name="android:windowBackground">@color/filtershow_background</item>
</style>
<style name="Holo.ActionBar" parent="android:Widget.Holo.ActionBar">
<item name="android:displayOptions">useLogo|showHome</item>
@@ -128,8 +128,8 @@
<item name="android:orientation">horizontal</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/setting_row_height</item>
- <item name="android:paddingLeft">@dimen/setting_item_list_margin</item>
- <item name="android:paddingRight">@dimen/setting_item_list_margin</item>
+ <item name="android:paddingStart">@dimen/setting_item_list_margin</item>
+ <item name="android:paddingEnd">@dimen/setting_item_list_margin</item>
<item name="android:background">@drawable/setting_picker</item>
</style>
<style name="OnViewfinderLabel">
@@ -138,8 +138,8 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:singleLine">true</item>
<item name="android:layout_margin">10dp</item>
- <item name="android:paddingLeft">15dp</item>
- <item name="android:paddingRight">15dp</item>
+ <item name="android:paddingStart">15dp</item>
+ <item name="android:paddingEnd">15dp</item>
<item name="android:paddingTop">3dp</item>
<item name="android:paddingBottom">3dp</item>
<item name="android:textColor">@android:color/white</item>
@@ -150,8 +150,8 @@
<item name="android:textAppearance">@android:style/TextAppearance.Medium</item>
</style>
<style name="EffectSettingGrid">
- <item name="android:layout_marginLeft">@dimen/setting_item_list_margin</item>
- <item name="android:layout_marginRight">@dimen/setting_item_list_margin</item>
+ <item name="android:layout_marginStart">@dimen/setting_item_list_margin</item>
+ <item name="android:layout_marginEnd">@dimen/setting_item_list_margin</item>
<item name="android:paddingBottom">3dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
@@ -166,8 +166,8 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingTop">9dp</item>
<item name="android:paddingBottom">9dp</item>
- <item name="android:paddingLeft">2dp</item>
- <item name="android:paddingRight">2dp</item>
+ <item name="android:paddingStart">2dp</item>
+ <item name="android:paddingEnd">2dp</item>
<item name="android:background">@drawable/setting_picker</item>
</style>
<style name="EffectSettingItemTitle">
@@ -188,12 +188,12 @@
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:minHeight">@dimen/effect_setting_type_text_min_height</item>
- <item name="android:paddingLeft">@dimen/effect_setting_type_text_left_padding</item>
+ <item name="android:paddingStart">@dimen/effect_setting_type_text_left_padding</item>
</style>
<style name="EffectTypeSeparator">
<item name="android:layout_width">match_parent</item>
- <item name="android:layout_marginLeft">8dp</item>
- <item name="android:layout_marginRight">8dp</item>
+ <item name="android:layout_marginStart">8dp</item>
+ <item name="android:layout_marginEnd">8dp</item>
<item name="android:layout_marginBottom">14dp</item>
<item name="android:layout_height">2dp</item>
<item name="android:background">#2c2c2c</item>
@@ -215,8 +215,8 @@
<item name="android:textColor">@color/primary_text</item>
<item name="android:minHeight">48dip</item>
<item name="android:minWidth">64dip</item>
- <item name="android:paddingLeft">4dip</item>
- <item name="android:paddingRight">4dip</item>
+ <item name="android:paddingStart">4dip</item>
+ <item name="android:paddingEnd">4dip</item>
</style>
<style name="ReviewControlText_xlarge">
@@ -224,8 +224,8 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:background">@drawable/bg_pressed_exit_fading</item>
<item name="android:gravity">center</item>
- <item name="android:paddingLeft">2dp</item>
- <item name="android:paddingRight">10dp</item>
+ <item name="android:paddingStart">2dp</item>
+ <item name="android:paddingEnd">10dp</item>
<item name="android:paddingTop">10dp</item>
<item name="android:paddingBottom">10dp</item>
<item name="android:textSize">18sp</item>
@@ -240,7 +240,7 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@color/popup_title_color</item>
- <item name="android:layout_marginLeft">10dp</item>
+ <item name="android:layout_marginStart">10dp</item>
</style>
<style name="PanoCustomDialogText_xlarge">
<item name="android:textAppearance">@android:style/TextAppearance.Large</item>
@@ -266,9 +266,9 @@
<item name="android:layout_height">match_parent</item>
</style>
<style name="UndoBar">
- <item name="android:layout_marginLeft">4dp</item>
- <item name="android:layout_marginRight">4dp</item>
- <item name="android:paddingLeft">16dp</item>
+ <item name="android:layout_marginStart">4dp</item>
+ <item name="android:layout_marginEnd">4dp</item>
+ <item name="android:paddingStart">16dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">48dp</item>
<item name="android:layout_gravity">bottom</item>
@@ -284,12 +284,12 @@
<item name="android:layout_height">match_parent</item>
<item name="android:layout_marginTop">10dp</item>
<item name="android:layout_marginBottom">10dp</item>
- <item name="android:paddingRight">12dp</item>
+ <item name="android:paddingEnd">12dp</item>
</style>
<style name="UndoButton">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
- <item name="android:paddingRight">16dp</item>
+ <item name="android:paddingEnd">16dp</item>
<item name="android:textSize">12sp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textStyle">bold</item>
diff --git a/res/xml/file_paths.xml b/res/xml/file_paths.xml
new file mode 100644
index 000000000..28d186477
--- /dev/null
+++ b/res/xml/file_paths.xml
@@ -0,0 +1,18 @@
+<!--
+ Copyright (C) 2012-2015 The CyanogenMod 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.
+-->
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+ <cache-path name="cropped_image"/>
+</paths>
diff --git a/res/xml/rtsp_settings_preferences.xml b/res/xml/rtsp_settings_preferences.xml
new file mode 100644
index 000000000..4809cf0ee
--- /dev/null
+++ b/res/xml/rtsp_settings_preferences.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <PreferenceCategory android:title="@string/rtp_rtcp" >
+ <EditTextPreference
+ android:dialogTitle="@string/set_rtp_min_port"
+ android:inputType="number"
+ android:key="rtp_min_port"
+ android:maxLength="5"
+ android:order="1"
+ android:summary=""
+ android:title="@string/rtp_min_port" />
+ <EditTextPreference
+ android:dialogTitle="@string/set_rtp_max_port"
+ android:inputType="number"
+ android:key="rtp_max_port"
+ android:maxLength="5"
+ android:order="2"
+ android:summary=""
+ android:title="@string/rtp_max_port" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/buffer_size" >
+ <EditTextPreference
+ android:dialogTitle="@string/set_buffer_size"
+ android:inputType="number"
+ android:key="buffer_size"
+ android:maxLength="10"
+ android:order="5"
+ android:summary=""
+ android:title="@string/buffer_size" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/apn" >
+ <PreferenceScreen
+ android:key="apn"
+ android:title="@string/set_apn" >
+ </PreferenceScreen>
+ </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/slim_manifest/AndroidManifest.xml b/slim_manifest/AndroidManifest.xml
new file mode 100644
index 000000000..aae3467bc
--- /dev/null
+++ b/slim_manifest/AndroidManifest.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
+ Not a Contribution.
+
+ 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.
+-->
+
+<manifest android:versionCode="40030"
+ android:versionName="1.1.40030"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.gallery3d">
+
+ <original-package android:name="com.android.gallery3d" />
+
+ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
+
+ <permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER"
+ android:protectionLevel="signatureOrSystem" />
+
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.CAMERA" />
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+ <uses-permission android:name="android.permission.NFC" />
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
+ <uses-permission android:name="android.permission.SET_WALLPAPER" />
+ <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+ <uses-permission android:name="android.permission.VIBRATE" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
+ <uses-permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER" />
+ <uses-permission android:name="android.permission.BLUETOOTH" />
+
+ <supports-screens android:smallScreens="false"
+ android:normalScreens="true" android:largeScreens="true"
+ android:anyDensity="true" />
+
+ <application android:icon="@mipmap/ic_launcher_gallery" android:label="@string/app_name"
+ android:name="com.android.gallery3d.app.GalleryAppImpl"
+ android:theme="@style/Theme.Gallery"
+ android:logo="@mipmap/ic_launcher_gallery"
+ android:hardwareAccelerated="true"
+ android:largeHeap="true"
+ android:restoreAnyVersion="true"
+ android:supportsRtl="true">
+ <uses-library android:name="com.google.android.media.effects" android:required="false" />
+
+ <activity android:name="com.android.gallery3d.app.GalleryActivity"
+ android:label="@string/app_name"
+ android:configChanges="keyboardHidden|orientation|screenSize">
+ <intent-filter>
+ <action android:name="android.intent.action.GET_CONTENT" />
+ <category android:name="android.intent.category.OPENABLE" />
+ <data android:mimeType="vnd.android.cursor.dir/image" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.PICK" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.dir/image" />
+ <data android:mimeType="vnd.android.cursor.dir/video" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.dir/image" />
+ <data android:mimeType="vnd.android.cursor.dir/video" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="com.android.gallery3d.app.Wallpaper"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/android:Theme.Translucent.NoTitleBar">
+ <intent-filter android:label="@string/camera_setas_wallpaper">
+ <action android:name="android.intent.action.ATTACH_DATA" />
+ <data android:mimeType="image/*" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:label="@string/app_name">
+ <action android:name="android.intent.action.SET_WALLPAPER" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="android.wallpaper.preview"
+ android:resource="@xml/wallpaper_picker_preview" />
+ </activity>
+ <activity android:name="com.android.gallery3d.app.TrimVideo"
+ android:label="@string/trim_label">
+ <intent-filter android:label="@string/crop_label">
+ <action android:name="com.android.camera.action.TRIM" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="content" />
+ <data android:scheme="file" />
+ <data android:mimeType="video/*" />
+ </intent-filter>
+ </activity>
+
+ <permission android:name="com.android.gallery3d.filtershow.permission.READ"
+ android:protectionLevel="signature" />
+
+ <permission android:name="com.android.gallery3d.filtershow.permission.WRITE"
+ android:protectionLevel="signature" />
+
+ <provider
+ android:name="com.android.gallery3d.filtershow.provider.SharedImageProvider"
+ android:authorities="com.android.gallery3d.filtershow.provider.SharedImageProvider"
+ android:grantUriPermissions="true"
+ android:readPermission="com.android.gallery3d.filtershow.permission.READ"
+ android:writePermission="com.android.gallery3d.filtershow.permission.WRITE" />
+
+ <service
+ android:name=".filtershow.pipeline.ProcessingService"
+ android:exported="false" />
+
+ <activity
+ android:name="com.android.gallery3d.filtershow.FilterShowActivity"
+ android:label="@string/title_activity_filter_show"
+ android:theme="@style/Theme.FilterShow"
+ android:configChanges="keyboardHidden|orientation|screenSize">
+ <intent-filter>
+ <action android:name="android.intent.action.EDIT" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="image/*" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="action_nextgen_edit" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="image/*" />
+ </intent-filter>
+ </activity>
+
+ <activity
+ android:name="com.android.gallery3d.filtershow.crop.CropActivity"
+ android:label="@string/crop"
+ android:theme="@style/Theme.Crop"
+ android:configChanges="keyboardHidden|orientation|screenSize">
+ <intent-filter android:label="@string/crop_label">
+ <action android:name="com.android.camera.action.CROP" />
+ <data android:scheme="http" />
+ <data android:scheme="https" />
+ <data android:scheme="content" />
+ <data android:scheme="file" />
+ <data android:mimeType="image/*" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.ALTERNATIVE" />
+ <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
+ </intent-filter>
+ </activity>
+
+ <uses-library android:name="com.google.android.media.effects"
+ android:required="false" />
+
+ <activity android:name="com.android.gallery3d.settings.GallerySettings"
+ android:theme="@style/Theme.Gallery"
+ android:configChanges="orientation|keyboardHidden|screenSize" />
+
+ <activity android:name="com.android.gallery3d.util.ViewGifImage"
+ android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+ android:configChanges="orientation|keyboardHidden|screenSize|keyboard|navigation">
+ <intent-filter>
+ <action android:name="com.android.gallery3d.VIEW_GIF" />
+ <data android:mimeType="image/gif" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <provider android:name="com.android.gallery3d.provider.GalleryProvider"
+ android:syncable="false"
+ android:grantUriPermissions="true"
+ android:exported="true"
+ android:permission="com.android.gallery3d.permission.GALLERY_PROVIDER"
+ android:authorities="com.android.gallery3d.provider" />
+ <provider
+ android:name="com.android.photos.data.PhotoProvider"
+ android:authorities="com.android.gallery3d.photoprovider"
+ android:syncable="false"
+ android:exported="false"/>
+ <activity android:name="com.android.gallery3d.gadget.WidgetClickHandler" />
+ <activity android:name="com.android.gallery3d.app.DialogPicker"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/DialogPickerTheme"/>
+ <activity android:name="com.android.gallery3d.app.AlbumPicker"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/DialogPickerTheme"/>
+ <activity android:name="com.android.gallery3d.gadget.WidgetTypeChooser"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/Theme.Gallery.Dialog"/>
+
+ <receiver android:name="com.android.gallery3d.gadget.PhotoAppWidgetProvider"
+ android:label="@string/appwidget_title">
+ <intent-filter>
+ <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
+ </intent-filter>
+ <meta-data android:name="android.appwidget.provider"
+ android:resource="@xml/widget_info" />
+ </receiver>
+ <receiver android:name="com.android.gallery3d.app.PackagesMonitor">
+ <intent-filter>
+ <action android:name="android.intent.action.PACKAGE_ADDED"/>
+ <action android:name="android.intent.action.PACKAGE_REMOVED"/>
+ <action android:name="android.intent.action.PACKAGE_CHANGED"/>
+ <data android:scheme="package"/>
+ </intent-filter>
+ </receiver>
+ <service android:name="com.android.gallery3d.app.PackagesMonitor$AsyncService"/>
+ <service android:name="com.android.gallery3d.gadget.WidgetService"
+ android:permission="android.permission.BIND_REMOTEVIEWS"/>
+ <activity android:name="com.android.gallery3d.gadget.WidgetConfigure"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/android:Theme.Translucent.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
+ </intent-filter>
+ </activity>
+ <service android:name="com.android.gallery3d.app.BatchService" />
+ <provider
+ android:name="android.support.v4.content.FileProvider"
+ android:authorities="com.android.gallery3d.fileprovider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_paths" />
+ </provider>
+ </application>
+</manifest>
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index 9af1fb8ba..9f43b8de4 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -28,15 +28,20 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
+import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.IBinder;
+import android.os.storage.StorageManager;
+import android.preference.PreferenceManager;
import android.support.v4.print.PrintHelper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
+import android.os.Handler;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
@@ -45,6 +50,7 @@ import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.ui.GLRoot;
import com.android.gallery3d.ui.GLRootView;
+import com.android.gallery3d.util.MediaSetUtils;
import com.android.gallery3d.util.PanoramaViewHelper;
import com.android.gallery3d.util.ThreadPool;
import com.android.photos.data.GalleryBitmapPool;
@@ -60,6 +66,7 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
private TransitionStore mTransitionStore = new TransitionStore();
private boolean mDisableToggleStatusBar;
private PanoramaViewHelper mPanoramaViewHelper;
+ private static final int ONRESUME_DELAY = 50;
private AlertDialog mAlertDialog = null;
private BroadcastReceiver mMountReceiver = new BroadcastReceiver() {
@@ -73,6 +80,7 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setStoragePath();
mOrientationManager = new OrientationManager(this);
toggleStatusBarByOrientation();
getWindow().setBackgroundDrawable(null);
@@ -81,6 +89,21 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
doBindBatchService();
}
+ private void setStoragePath() {
+ final String defaultStoragePath = Environment.getExternalStorageDirectory().toString();
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ String storagePath = prefs.getString(StorageChangeReceiver.KEY_STORAGE,
+ defaultStoragePath);
+
+ // Check if volume is mounted
+ StorageManager sm = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
+ if (!sm.getVolumeState(storagePath).equals(Environment.MEDIA_MOUNTED)) {
+ storagePath = defaultStoragePath;
+ }
+
+ MediaSetUtils.setRoot(storagePath);
+ }
+
@Override
protected void onSaveInstanceState(Bundle outState) {
mGLRootView.lockRenderThread();
@@ -133,6 +156,15 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
return mGLRootView;
}
+ public void GLRootResume(boolean isResume) {
+ if (isResume) {
+ mGLRootView.onResume();
+ mGLRootView.lockRenderThread();
+ } else {
+ mGLRootView.unlockRenderThread();
+ }
+ }
+
public OrientationManager getOrientationManager() {
return mOrientationManager;
}
@@ -203,15 +235,31 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
@Override
protected void onResume() {
super.onResume();
- mGLRootView.lockRenderThread();
- try {
- getStateManager().resume();
- getDataManager().resume();
- } finally {
- mGLRootView.unlockRenderThread();
- }
- mGLRootView.onResume();
- mOrientationManager.resume();
+ delayedOnResume(ONRESUME_DELAY);
+ }
+
+ private void delayedOnResume(final int delay){
+ final Handler handler = new Handler();
+ Runnable delayTask = new Runnable() {
+ @Override
+ public void run() {
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mGLRootView.lockRenderThread();
+ try {
+ getStateManager().resume();
+ getDataManager().resume();
+ } finally {
+ mGLRootView.unlockRenderThread();
+ }
+ mGLRootView.onResume();
+ mOrientationManager.resume();
+ }}, delay);
+ }
+ };
+ Thread delayThread = new Thread(delayTask);
+ delayThread.start();
}
@Override
diff --git a/src/com/android/gallery3d/app/AlbumDataLoader.java b/src/com/android/gallery3d/app/AlbumDataLoader.java
index 28a822830..b56304e39 100644
--- a/src/com/android/gallery3d/app/AlbumDataLoader.java
+++ b/src/com/android/gallery3d/app/AlbumDataLoader.java
@@ -19,6 +19,8 @@ package com.android.gallery3d.app;
import android.os.Handler;
import android.os.Message;
import android.os.Process;
+import android.text.TextUtils;
+import android.view.View;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.ContentListener;
@@ -33,6 +35,7 @@ import java.util.Arrays;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
+import java.util.Locale;
public class AlbumDataLoader {
@SuppressWarnings("unused")
@@ -119,7 +122,9 @@ public class AlbumDataLoader {
}
public MediaItem get(int index) {
- if (!isActive(index)) {
+ if (!isActive(index)
+ && View.LAYOUT_DIRECTION_LTR == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
return mSource.getMediaItem(index, 1).get(0);
}
return mData[index % mData.length];
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index 44f24043b..7e2f5f9e4 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -25,10 +25,12 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
+import android.text.TextUtils;
import android.view.HapticFeedbackConstants;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
import android.widget.Toast;
import com.android.gallery3d.R;
@@ -59,6 +61,7 @@ import com.android.gallery3d.util.Future;
import com.android.gallery3d.util.GalleryUtils;
import com.android.gallery3d.util.MediaSetUtils;
+import java.util.Locale;
public class AlbumPage extends ActivityState implements GalleryActionBar.ClusterRunner,
SelectionManager.SelectionListener, MediaSet.SyncListener, GalleryActionBar.OnAlbumModeSelectedListener {
@@ -82,11 +85,15 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private static final float USER_DISTANCE_METER = 0.3f;
+ // Data cache size, equal to AlbumDataLoader.DATA_CACHE_SIZE
+ private static final int DATA_CACHE_SIZE = 256;
+
private boolean mIsActive = false;
private AlbumSlotRenderer mAlbumView;
private Path mMediaSetPath;
private String mParentMediaSetString;
private SlotView mSlotView;
+ private Config.AlbumPage mConfig;
private AlbumDataLoader mAlbumDataAdapter;
@@ -152,9 +159,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
protected void onLayout(
boolean changed, int left, int top, int right, int bottom) {
- int slotViewTop = mActivity.getGalleryActionBar().getHeight();
- int slotViewBottom = bottom - top;
- int slotViewRight = right - left;
+ int slotViewTop = mActivity.getGalleryActionBar().getHeight() + mConfig.paddingTop;
+ int slotViewBottom = bottom - top - mConfig.paddingBottom;
+ int slotViewRight = right - left - mConfig.paddingRight;
if (mShowDetails) {
mDetailsHelper.layout(left, slotViewTop, right, bottom);
@@ -163,8 +170,8 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
// Set the mSlotView as a reference point to the open animation
- mOpenCenter.setReferencePosition(0, slotViewTop);
- mSlotView.layout(0, slotViewTop, slotViewRight, slotViewBottom);
+ mOpenCenter.setReferencePosition(mConfig.paddingLeft, slotViewTop);
+ mSlotView.layout(mConfig.paddingLeft, slotViewTop, slotViewRight, slotViewBottom);
GalleryUtils.setViewPointMatrix(mMatrix,
(right - left) / 2, (bottom - top) / 2, -mUserDistance);
}
@@ -266,6 +273,17 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
private void pickPhoto(int slotIndex) {
+ if ((View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault()))
+ && !mGetContent) {
+ // Fetch corresponding slotIndex from another side, (RTL)
+ if (slotIndex > DATA_CACHE_SIZE / 2
+ && slotIndex < mAlbumDataAdapter.size() - DATA_CACHE_SIZE / 2) {
+ slotIndex = mAlbumDataAdapter.size() - slotIndex - 2;
+ } else {
+ slotIndex = mAlbumDataAdapter.size() - slotIndex - 1;
+ }
+ }
pickPhoto(slotIndex, false);
}
@@ -278,10 +296,25 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
MediaItem item = mAlbumDataAdapter.get(slotIndex);
- if (item == null) return; // Item not ready yet, ignore the click
+
+ // Checking it is RTL or not
+ boolean isLayoutRtl = (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) ? true : false;
+
+ // When not RTL, return directly to ignore the click
+ if (!isLayoutRtl && item == null) {
+ return;
+ }
+
if (mGetContent) {
+ if (isLayoutRtl && item == null) {
+ return; // Item not ready yet, ignore the click
+ }
onGetContent(item);
} else if (mLaunchedFromPhotoPage) {
+ if (isLayoutRtl && item == null) {
+ return; // Item not ready yet, ignore the click
+ }
TransitionStore transitions = mActivity.getTransitionStore();
transitions.put(
PhotoPage.KEY_ALBUMPAGE_TRANSITION,
@@ -297,8 +330,12 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mSlotView.getSlotRect(slotIndex, mRootPane));
data.putString(PhotoPage.KEY_MEDIA_SET_PATH,
mMediaSetPath.toString());
- data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH,
- item.getPath().toString());
+
+ // Item not ready yet, don't pass the photo path to bundle
+ if (!isLayoutRtl && item != null) {
+ data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH,
+ item.getPath().toString());
+ }
data.putInt(PhotoPage.KEY_ALBUMPAGE_TRANSITION,
PhotoPage.MSG_ALBUMPAGE_STARTED);
data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP,
@@ -468,10 +505,10 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private void initializeViews() {
mSelectionManager = new SelectionManager(mActivity, false);
mSelectionManager.setSelectionListener(this);
- Config.AlbumPage config = Config.AlbumPage.get(mActivity);
- mSlotView = new SlotView(mActivity, config.slotViewSpec);
+ mConfig = Config.AlbumPage.get(mActivity);
+ mSlotView = new SlotView(mActivity, mConfig.slotViewSpec);
mAlbumView = new AlbumSlotRenderer(mActivity, mSlotView,
- mSelectionManager, config.placeholderColor);
+ mSelectionManager, mConfig.placeholderColor);
mSlotView.setSlotRenderer(mAlbumView);
mRootPane.addComponent(mSlotView);
mSlotView.setListener(new SlotView.SimpleListener() {
@@ -574,8 +611,17 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
private void switchToFilmstrip() {
- if (mAlbumDataAdapter.size() < 1) return;
+ // Invalid album, return back directly.
+ if (mAlbumDataAdapter.size() < 1) {
+ return;
+ }
+
int targetPhoto = mSlotView.getVisibleStart();
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // Fetch corresponding index from another side, only in RTL
+ targetPhoto = mAlbumDataAdapter.size() - targetPhoto - 1;
+ }
prepareAnimationBackToFilmstrip(targetPhoto);
if(mLaunchedFromPhotoPage) {
onBackPressed();
@@ -642,7 +688,22 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
case REQUEST_PHOTO: {
if (data == null) return;
mFocusIndex = data.getIntExtra(PhotoPage.KEY_RETURN_INDEX_HINT, 0);
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // Fetch corresponding index from another side, only in RTL
+ mFocusIndex = mAlbumDataAdapter.size() - mFocusIndex - 1;
+ // Prepare to jump to mFocusIndex position, only enabled in RTL
+ mSlotView.setIsFromPhotoPage(true);
+ }
+
+ // Let picture of mFocusIndex visible
mSlotView.makeSlotVisible(mFocusIndex);
+
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // Reset variable
+ mSlotView.setIsFromPhotoPage(false);
+ }
break;
}
case REQUEST_DO_ANIMATION: {
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index d56b5b85d..c09b91f6e 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +23,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -134,7 +138,7 @@ public class AlbumSetPage extends ActivityState implements
int slotViewTop = mActionBar.getHeight() + mConfig.paddingTop;
int slotViewBottom = bottom - top - mConfig.paddingBottom;
- int slotViewRight = right - left;
+ int slotViewRight = right - left - mConfig.paddingRight;
if (mShowDetails) {
mDetailsHelper.layout(left, slotViewTop, right, bottom);
@@ -142,7 +146,7 @@ public class AlbumSetPage extends ActivityState implements
mAlbumSetView.setHighlightItemPath(null);
}
- mSlotView.layout(0, slotViewTop, slotViewRight, slotViewBottom);
+ mSlotView.layout(mConfig.paddingLeft, slotViewTop, slotViewRight, slotViewBottom);
}
@Override
@@ -543,6 +547,13 @@ public class AlbumSetPage extends ActivityState implements
inflater.inflate(R.menu.albumset, menu);
boolean wasShowingClusterMenu = mShowClusterMenu;
mShowClusterMenu = !inAlbum;
+ if (mShowClusterMenu != wasShowingClusterMenu) {
+ if (mShowClusterMenu) {
+ mActionBar.enableClusterMenu(mSelectedAction, this);
+ } else {
+ mActionBar.disableClusterMenu(true);
+ }
+ }
boolean selectAlbums = !inAlbum &&
mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
MenuItem selectItem = menu.findItem(R.id.action_select);
@@ -560,15 +571,13 @@ public class AlbumSetPage extends ActivityState implements
helpItem.setVisible(helpIntent != null);
if (helpIntent != null) helpItem.setIntent(helpIntent);
+ MenuItem moreItem = menu.findItem(R.id.action_more_image);
+ moreItem.setVisible(mActivity.getResources().getBoolean(
+ R.bool.config_show_more_images));
+
+
mActionBar.setTitle(mTitle);
mActionBar.setSubtitle(mSubtitle);
- if (mShowClusterMenu != wasShowingClusterMenu) {
- if (mShowClusterMenu) {
- mActionBar.enableClusterMenu(mSelectedAction, this);
- } else {
- mActionBar.disableClusterMenu(true);
- }
- }
}
return true;
}
@@ -577,6 +586,11 @@ public class AlbumSetPage extends ActivityState implements
protected boolean onItemSelected(MenuItem item) {
Activity activity = mActivity;
switch (item.getItemId()) {
+ case R.id.action_more_image:
+ Uri moreUri = Uri.parse(mActivity.getString(R.string.website_for_more_image));
+ Intent moreIntent = new Intent(Intent.ACTION_VIEW, moreUri);
+ mActivity.startActivity(moreIntent);
+ return true;
case R.id.action_cancel:
activity.setResult(Activity.RESULT_CANCELED);
activity.finish();
diff --git a/src/com/android/gallery3d/app/CommonControllerOverlay.java b/src/com/android/gallery3d/app/CommonControllerOverlay.java
index 9adb4e7a8..7a553e906 100644
--- a/src/com/android/gallery3d/app/CommonControllerOverlay.java
+++ b/src/com/android/gallery3d/app/CommonControllerOverlay.java
@@ -47,10 +47,13 @@ public abstract class CommonControllerOverlay extends FrameLayout implements
PAUSED,
ENDED,
ERROR,
- LOADING
+ LOADING,
+ BUFFERING,
+ RETRY_CONNECTING,
+ RETRY_CONNECTING_ERROR
}
- private static final float ERROR_MESSAGE_RELATIVE_PADDING = 1.0f / 6;
+ protected static final float ERROR_MESSAGE_RELATIVE_PADDING = 1.0f / 6;
protected Listener mListener;
@@ -96,13 +99,9 @@ public abstract class CommonControllerOverlay extends FrameLayout implements
ProgressBar spinner = new ProgressBar(context);
spinner.setIndeterminate(true);
mLoadingView.addView(spinner, wrapContent);
- TextView loadingText = createOverlayTextView(context);
- loadingText.setText(R.string.loading_video);
- mLoadingView.addView(loadingText, wrapContent);
addView(mLoadingView, wrapContent);
mPlayPauseReplayView = new ImageView(context);
- mPlayPauseReplayView.setImageResource(R.drawable.ic_vidcontrol_play);
mPlayPauseReplayView.setContentDescription(
context.getResources().getString(R.string.accessibility_play_video));
mPlayPauseReplayView.setBackgroundResource(R.drawable.bg_vidcontrol);
@@ -119,7 +118,6 @@ public abstract class CommonControllerOverlay extends FrameLayout implements
new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
setLayoutParams(params);
- hide();
}
abstract protected void createTimeBar(Context context);
@@ -252,7 +250,7 @@ public abstract class CommonControllerOverlay extends FrameLayout implements
// | Navigation Bar | insets.bottom
// +-----------------+/
// Please see View.fitSystemWindows() for more details.
- private final Rect mWindowInsets = new Rect();
+ protected final Rect mWindowInsets = new Rect();
@Override
protected boolean fitSystemWindows(Rect insets) {
@@ -290,7 +288,7 @@ public abstract class CommonControllerOverlay extends FrameLayout implements
}
}
- private void layoutCenteredView(View view, int l, int t, int r, int b) {
+ protected void layoutCenteredView(View view, int l, int t, int r, int b) {
int cw = view.getMeasuredWidth();
int ch = view.getMeasuredHeight();
int cl = (r - l - cw) / 2;
diff --git a/src/com/android/gallery3d/app/Config.java b/src/com/android/gallery3d/app/Config.java
index 7183acc33..3625dafe4 100644
--- a/src/com/android/gallery3d/app/Config.java
+++ b/src/com/android/gallery3d/app/Config.java
@@ -31,6 +31,8 @@ final class Config {
public AlbumSetSlotRenderer.LabelSpec labelSpec;
public int paddingTop;
public int paddingBottom;
+ public int paddingLeft;
+ public int paddingRight;
public int placeholderColor;
public static synchronized AlbumSetPage get(Context context) {
@@ -48,11 +50,15 @@ final class Config {
slotViewSpec = new SlotView.Spec();
slotViewSpec.rowsLand = r.getInteger(R.integer.albumset_rows_land);
slotViewSpec.rowsPort = r.getInteger(R.integer.albumset_rows_port);
+ slotViewSpec.colsLand = r.getInteger(R.integer.albumset_cols_land);
+ slotViewSpec.colsPort = r.getInteger(R.integer.albumset_cols_port);
slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.albumset_slot_gap);
slotViewSpec.slotHeightAdditional = 0;
paddingTop = r.getDimensionPixelSize(R.dimen.albumset_padding_top);
paddingBottom = r.getDimensionPixelSize(R.dimen.albumset_padding_bottom);
+ paddingLeft = r.getDimensionPixelSize(R.dimen.albumset_padding_left);
+ paddingRight = r.getDimensionPixelSize(R.dimen.albumset_padding_right);
labelSpec = new AlbumSetSlotRenderer.LabelSpec();
labelSpec.labelBackgroundHeight = r.getDimensionPixelSize(
@@ -82,6 +88,10 @@ final class Config {
private static AlbumPage sInstance;
public SlotView.Spec slotViewSpec;
+ public int paddingTop;
+ public int paddingBottom;
+ public int paddingLeft;
+ public int paddingRight;
public int placeholderColor;
public static synchronized AlbumPage get(Context context) {
@@ -99,7 +109,14 @@ final class Config {
slotViewSpec = new SlotView.Spec();
slotViewSpec.rowsLand = r.getInteger(R.integer.album_rows_land);
slotViewSpec.rowsPort = r.getInteger(R.integer.album_rows_port);
+ slotViewSpec.colsLand = r.getInteger(R.integer.album_cols_land);
+ slotViewSpec.colsPort = r.getInteger(R.integer.album_cols_port);
slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.album_slot_gap);
+
+ paddingTop = r.getDimensionPixelSize(R.dimen.album_padding_top);
+ paddingBottom = r.getDimensionPixelSize(R.dimen.album_padding_bottom);
+ paddingLeft = r.getDimensionPixelSize(R.dimen.album_padding_left);
+ paddingRight = r.getDimensionPixelSize(R.dimen.album_padding_right);
}
}
diff --git a/src/com/android/gallery3d/app/ControllerOverlay.java b/src/com/android/gallery3d/app/ControllerOverlay.java
index 078f59e28..6f049da2d 100644
--- a/src/com/android/gallery3d/app/ControllerOverlay.java
+++ b/src/com/android/gallery3d/app/ControllerOverlay.java
@@ -27,6 +27,8 @@ public interface ControllerOverlay {
void onSeekEnd(int time, int trimStartTime, int trimEndTime);
void onShown();
void onHidden();
+ // get current video is from RTSP
+ boolean onIsRTSP();
void onReplay();
}
@@ -53,4 +55,10 @@ public interface ControllerOverlay {
void setTimes(int currentTime, int totalTime,
int trimStartTime, int trimEndTime);
+
+ //set view enabled (play/pause asynchronous processing)
+ void setViewEnabled(boolean isEnabled);
+
+ //view from disable to resume (play/pause asynchronous processing)
+ void setPlayPauseReplayResume();
}
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 588f5842a..11057fb02 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -47,6 +47,7 @@ public class GalleryActionBar implements OnNavigationListener {
private ClusterRunner mClusterRunner;
private CharSequence[] mTitles;
+ private CharSequence mTitle;
private ArrayList<Integer> mActions;
private Context mContext;
private LayoutInflater mInflater;
@@ -159,7 +160,8 @@ public class GalleryActionBar implements OnNavigationListener {
parent, false);
}
TwoLineListItem view = (TwoLineListItem) convertView;
- view.getText1().setText(mActionBar.getTitle());
+ CharSequence title = mActionBar.getTitle();
+ view.getText1().setText(title == null ? mTitle : title);
view.getText2().setText((CharSequence) getItem(position));
return convertView;
}
@@ -326,12 +328,14 @@ public class GalleryActionBar implements OnNavigationListener {
}
public void setTitle(String title) {
+ mTitle = title;
if (mActionBar != null) mActionBar.setTitle(title);
}
public void setTitle(int titleId) {
if (mActionBar != null) {
- mActionBar.setTitle(mContext.getString(titleId));
+ mTitle = mContext.getString(titleId);
+ mActionBar.setTitle(mTitle);
}
}
diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java
index bb2a6b8f1..1be5e73c8 100644
--- a/src/com/android/gallery3d/app/GalleryActivity.java
+++ b/src/com/android/gallery3d/app/GalleryActivity.java
@@ -50,6 +50,7 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
public static final String KEY_TYPE_BITS = "type-bits";
public static final String KEY_MEDIA_TYPES = "mediaTypes";
public static final String KEY_DISMISS_KEYGUARD = "dismiss-keyguard";
+ public static final String KEY_FROM_SNAPCAM = "from-snapcam";
private static final String TAG = "GalleryActivity";
private Dialog mVersionCheckDialog;
@@ -206,7 +207,9 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
Path albumPath = dm.getDefaultSetOf(itemPath);
data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH, itemPath.toString());
- data.putBoolean(PhotoPage.KEY_READONLY, true);
+ if (!intent.getBooleanExtra(KEY_FROM_SNAPCAM, false)) {
+ data.putBoolean(PhotoPage.KEY_READONLY, true);
+ }
// TODO: Make the parameter "SingleItemOnly" public so other
// activities can reference it.
diff --git a/src/com/android/gallery3d/app/GalleryAppImpl.java b/src/com/android/gallery3d/app/GalleryAppImpl.java
index c6e7a0b57..9c5f232df 100644
--- a/src/com/android/gallery3d/app/GalleryAppImpl.java
+++ b/src/com/android/gallery3d/app/GalleryAppImpl.java
@@ -36,6 +36,7 @@ public class GalleryAppImpl extends Application implements GalleryApp {
private static final String DOWNLOAD_FOLDER = "download";
private static final long DOWNLOAD_CAPACITY = 64 * 1024 * 1024; // 64M
+ private static GalleryAppImpl sGalleryAppImpl;
private ImageCacheService mImageCacheService;
private Object mLock = new Object();
@@ -51,6 +52,7 @@ public class GalleryAppImpl extends Application implements GalleryApp {
WidgetUtils.initialize(this);
PicasaSource.initialize(this);
UsageStatistics.initialize(this);
+ sGalleryAppImpl = this;
}
@Override
@@ -58,6 +60,10 @@ public class GalleryAppImpl extends Application implements GalleryApp {
return this;
}
+ public static Context getContext() {
+ return sGalleryAppImpl;
+ }
+
@Override
public synchronized DataManager getDataManager() {
if (mDataManager == null) {
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index 1547f6faf..275b04ab3 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -18,31 +18,62 @@ package com.android.gallery3d.app;
import android.annotation.TargetApi;
import android.app.ActionBar;
+import android.app.ActionBar.OnMenuVisibilityListener;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.KeyguardManager;
+import android.bluetooth.BluetoothClass;
+import android.bluetooth.BluetoothDevice;
import android.content.AsyncQueryHandler;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Configuration;
+import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioManager;
+import android.media.audiofx.AudioEffect;
+import android.media.audiofx.AudioEffect.Descriptor;
+import android.media.audiofx.BassBoost;
+import android.media.audiofx.Virtualizer;
+import android.media.MediaPlayer;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.OpenableColumns;
+import android.view.Gravity;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
+import android.widget.CompoundButton;
import android.widget.ShareActionProvider;
+import android.widget.ToggleButton;
+import android.widget.Toast;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
+import com.android.gallery3d.ui.Knob;
+import org.codeaurora.gallery3d.ext.IActivityHooker;
+import org.codeaurora.gallery3d.ext.IMovieItem;
+import org.codeaurora.gallery3d.ext.MovieItem;
+import org.codeaurora.gallery3d.ext.MovieUtils;
+import org.codeaurora.gallery3d.video.ExtensionHelper;
+import org.codeaurora.gallery3d.video.MovieTitleHelper;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothProfile;
/**
* This activity plays a video from a specified URI.
@@ -53,14 +84,77 @@ import com.android.gallery3d.common.Utils;
*/
public class MovieActivity extends Activity {
@SuppressWarnings("unused")
- private static final String TAG = "MovieActivity";
- public static final String KEY_LOGO_BITMAP = "logo-bitmap";
- public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back";
+ private static final String TAG = "MovieActivity";
+ private static final boolean LOG = false;
+ public static final String KEY_LOGO_BITMAP = "logo-bitmap";
+ public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back";
+ private static final String VIDEO_SDP_MIME_TYPE = "application/sdp";
+ private static final String VIDEO_SDP_TITLE = "rtsp://";
+ private static final String VIDEO_FILE_SCHEMA = "file";
+ private static final String VIDEO_MIME_TYPE = "video/*";
+ private static final String SHARE_HISTORY_FILE = "video_share_history_file";
private MoviePlayer mPlayer;
- private boolean mFinishOnCompletion;
- private Uri mUri;
- private boolean mTreatUpAsBack;
+ private boolean mFinishOnCompletion;
+ private Uri mUri;
+
+ private static final short BASSBOOST_MAX_STRENGTH = 1000;
+ private static final short VIRTUALIZER_MAX_STRENGTH = 1000;
+
+ private boolean mIsHeadsetOn = false;
+ private boolean mVirtualizerSupported = false;
+ private boolean mBassBoostSupported = false;
+
+ static enum Key {
+ global_enabled, bb_strength, virt_strength
+ };
+
+ private BassBoost mBassBoostEffect;
+ private Virtualizer mVirtualizerEffect;
+ private AlertDialog mEffectDialog;
+ private ToggleButton mSwitch;
+ private Knob mBassBoostKnob;
+ private Knob mVirtualizerKnob;
+
+ private SharedPreferences mPrefs;
+ private ShareActionProvider mShareProvider;
+ private IMovieItem mMovieItem;
+ private IActivityHooker mMovieHooker;
+ private KeyguardManager mKeyguardManager;
+
+ private boolean mResumed = false;
+ private boolean mControlResumed = false;
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ final String action = intent.getAction();
+ final AudioManager audioManager =
+ (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
+ mIsHeadsetOn = (intent.getIntExtra("state", 0) == 1)
+ || audioManager.isBluetoothA2dpOn();
+ } else if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)
+ || action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
+ final int deviceClass = ((BluetoothDevice)
+ intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE))
+ .getBluetoothClass().getDeviceClass();
+ if ((deviceClass == BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES)
+ || (deviceClass == BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET)) {
+ mIsHeadsetOn = action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)
+ || audioManager.isWiredHeadsetOn();
+ }
+ } else if (action.equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
+ mIsHeadsetOn = false;
+ }
+ if (mEffectDialog != null) {
+ if (!mIsHeadsetOn && !isBtHeadsetConnected() && mEffectDialog.isShowing()) {
+ mEffectDialog.dismiss();
+ showHeadsetPlugToast();
+ }
+ }
+ }
+ };
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setSystemUiVisibility(View rootView) {
@@ -84,16 +178,24 @@ public class MovieActivity extends Activity {
setSystemUiVisibility(rootView);
Intent intent = getIntent();
+
+ mMovieHooker = ExtensionHelper.getHooker(this);
+ initMovieInfo(intent);
+
initializeActionBar(intent);
mFinishOnCompletion = intent.getBooleanExtra(
MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
- mTreatUpAsBack = intent.getBooleanExtra(KEY_TREAT_UP_AS_BACK, false);
- mPlayer = new MoviePlayer(rootView, this, intent.getData(), savedInstanceState,
+ mPrefs = getSharedPreferences(getApplicationContext().getPackageName(),
+ Context.MODE_PRIVATE);
+ mPlayer = new MoviePlayer(rootView, this, mMovieItem, savedInstanceState,
!mFinishOnCompletion) {
@Override
public void onCompletion() {
if (mFinishOnCompletion) {
- finish();
+ finishActivity();
+ mControlResumed = false;
+ Bookmarker mBookmarker = new Bookmarker(MovieActivity.this);
+ mBookmarker.setBookmark(mMovieItem.getUri(), 0, 1);
}
}
};
@@ -114,6 +216,29 @@ public class MovieActivity extends Activity {
// We set the background in the theme to have the launching animation.
// But for the performance (and battery), we remove the background here.
win.setBackgroundDrawable(null);
+ mMovieHooker.init(this, intent);
+ mMovieHooker.setParameter(null, mPlayer.getMoviePlayerExt());
+ mMovieHooker.setParameter(null, mMovieItem);
+ mMovieHooker.setParameter(null, mPlayer.getVideoSurface());
+ mMovieHooker.onCreate(savedInstanceState);
+
+ // Determine available/supported effects
+ final Descriptor[] effects = AudioEffect.queryEffects();
+ for (final Descriptor effect : effects) {
+ if (effect.type.equals(AudioEffect.EFFECT_TYPE_VIRTUALIZER)) {
+ mVirtualizerSupported = true;
+ } else if (effect.type.equals(AudioEffect.EFFECT_TYPE_BASS_BOOST)) {
+ mBassBoostSupported = true;
+ }
+ }
+
+ mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
+ @Override
+ public void onPrepared(MediaPlayer mp) {
+ mPlayer.onPrepared(mp);
+ initEffects(mp.getAudioSessionId());
+ }
+ });
}
private void setActionBarLogoFromIntent(Intent intent) {
@@ -132,9 +257,21 @@ public class MovieActivity extends Activity {
}
setActionBarLogoFromIntent(intent);
actionBar.setDisplayOptions(
- ActionBar.DISPLAY_HOME_AS_UP,
- ActionBar.DISPLAY_HOME_AS_UP);
+ ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE,
+ ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
+ actionBar.addOnMenuVisibilityListener(new OnMenuVisibilityListener() {
+ @Override
+ public void onMenuVisibilityChanged(boolean isVisible) {
+ if (mPlayer != null) {
+ if (isVisible) {
+ mPlayer.cancelHidingController();
+ } else {
+ mPlayer.restartHidingController();
+ }
+ }
+ }
+ });
String title = intent.getStringExtra(Intent.EXTRA_TITLE);
if (title != null) {
actionBar.setTitle(title);
@@ -170,24 +307,193 @@ public class MovieActivity extends Activity {
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.movie, menu);
+ MenuItem shareMenu = menu.findItem(R.id.action_share);
+ ShareActionProvider provider = (ShareActionProvider) shareMenu.getActionProvider();
+ mShareProvider = provider;
+ if (mShareProvider != null) {
+ // share provider is singleton, we should refresh our history file.
+ mShareProvider.setShareHistoryFileName(SHARE_HISTORY_FILE);
+ }
+ refreshShareProvider(mMovieItem);
+
+ final MenuItem mi = menu.add(R.string.audio_effects);
+ mi.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ onAudioEffectsMenuItemClick();
+ return true;
+ }
+ });
+ mMovieHooker.onCreateOptionsMenu(menu);
+ return true;
+ }
- // Document says EXTRA_STREAM should be a content: Uri
- // So, we only share the video if it's "content:".
- MenuItem shareItem = menu.findItem(R.id.action_share);
- if (ContentResolver.SCHEME_CONTENT.equals(mUri.getScheme())) {
- shareItem.setVisible(true);
- ((ShareActionProvider) shareItem.getActionProvider())
- .setShareIntent(createShareIntent());
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ mMovieHooker.onPrepareOptionsMenu(menu);
+ return true;
+ }
+
+ private void onAudioEffectsMenuItemClick() {
+ if (!mIsHeadsetOn && !isBtHeadsetConnected()) {
+ showHeadsetPlugToast();
} else {
- shareItem.setVisible(false);
+ LayoutInflater factory = LayoutInflater.from(this);
+ final View content = factory.inflate(R.layout.audio_effects_dialog, null);
+ final View title = factory.inflate(R.layout.audio_effects_title, null);
+
+ boolean enabled = mPrefs.getBoolean(Key.global_enabled.toString(), false);
+
+ mSwitch = (ToggleButton) title.findViewById(R.id.audio_effects_switch);
+ mSwitch.setChecked(enabled);
+ mSwitch.setBackgroundResource(enabled ?
+ R.drawable.switch_thumb_activated : R.drawable.switch_thumb_off);
+
+ mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ mSwitch.setBackgroundResource(isChecked ?
+ R.drawable.switch_thumb_activated : R.drawable.switch_thumb_off);
+ if(mBassBoostEffect != null) {
+ mBassBoostEffect.setEnabled(isChecked);
+ }
+ if(mVirtualizerEffect != null) {
+ mVirtualizerEffect.setEnabled(isChecked);
+ }
+ mBassBoostKnob.setEnabled(isChecked);
+ mVirtualizerKnob.setEnabled(isChecked);
+ }
+ });
+
+ mBassBoostKnob = (Knob) content.findViewById(R.id.bBStrengthKnob);
+ mBassBoostKnob.setEnabled(enabled);
+ mBassBoostKnob.setMax(BASSBOOST_MAX_STRENGTH);
+ mBassBoostKnob.setValue(mPrefs.getInt(Key.bb_strength.toString(), 0));
+ mBassBoostKnob.setOnKnobChangeListener(new Knob.OnKnobChangeListener() {
+ @Override
+ public void onValueChanged(Knob knob, int value, boolean fromUser) {
+ if(mBassBoostEffect != null) {
+ mBassBoostEffect.setStrength((short) value);
+ }
+ }
+
+ @Override
+ public boolean onSwitchChanged(Knob knob, boolean enabled) {
+ return false;
+ }
+ });
+
+ mVirtualizerKnob = (Knob) content.findViewById(R.id.vIStrengthKnob);
+ mVirtualizerKnob.setEnabled(enabled);
+ mVirtualizerKnob.setMax(VIRTUALIZER_MAX_STRENGTH);
+ mVirtualizerKnob.setValue(mPrefs.getInt(Key.virt_strength.toString(), 0));
+ mVirtualizerKnob.setOnKnobChangeListener(new Knob.OnKnobChangeListener() {
+ @Override
+ public void onValueChanged(Knob knob, int value, boolean fromUser) {
+ if(mVirtualizerEffect != null) {
+ mVirtualizerEffect.setStrength((short) value);
+ }
+ }
+
+ @Override
+ public boolean onSwitchChanged(Knob knob, boolean enabled) {
+ return false;
+ }
+ });
+
+ mEffectDialog = new AlertDialog.Builder(MovieActivity.this,
+ AlertDialog.THEME_HOLO_DARK)
+ .setCustomTitle(title)
+ .setView(content)
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ SharedPreferences.Editor editor = mPrefs.edit();
+ editor.putBoolean(Key.global_enabled.toString(), mSwitch.isChecked());
+ editor.putInt(Key.bb_strength.toString(), mBassBoostKnob.getValue());
+ editor.putInt(Key.virt_strength.toString(),
+ mVirtualizerKnob.getValue());
+ editor.commit();
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ boolean enabled = mPrefs.getBoolean(Key.global_enabled.toString(), false);
+ if(mBassBoostEffect != null) {
+ mBassBoostEffect.setStrength((short)
+ mPrefs.getInt(Key.bb_strength.toString(), 0));
+ mBassBoostEffect.setEnabled(enabled);
+ }
+ if(mVirtualizerEffect != null) {
+ mVirtualizerEffect.setStrength((short)
+ mPrefs.getInt(Key.virt_strength.toString(), 0));
+ mVirtualizerEffect.setEnabled(enabled);
+ }
+ }
+ })
+ .setCancelable(false)
+ .create();
+ mEffectDialog.show();
+ mEffectDialog.findViewById(com.android.internal.R.id.titleDivider)
+ .setBackgroundResource(R.color.highlight);
+ }
+ }
+
+ public void initEffects(int sessionId) {
+ // Singleton instance
+ if ((mBassBoostEffect == null) && mBassBoostSupported) {
+ mBassBoostEffect = new BassBoost(0, sessionId);
+ }
+
+ if ((mVirtualizerEffect == null) && mVirtualizerSupported) {
+ mVirtualizerEffect = new Virtualizer(0, sessionId);
+ }
+
+ if (mIsHeadsetOn || isBtHeadsetConnected()) {
+ if (mPrefs.getBoolean(Key.global_enabled.toString(), false)) {
+ if (mBassBoostSupported) {
+ mBassBoostEffect.setStrength((short)
+ mPrefs.getInt(Key.bb_strength.toString(), 0));
+ mBassBoostEffect.setEnabled(true);
+ }
+ if (mVirtualizerSupported) {
+ mVirtualizerEffect.setStrength((short)
+ mPrefs.getInt(Key.virt_strength.toString(), 0));
+ mVirtualizerEffect.setEnabled(true);
+ }
+ } else {
+ if (mBassBoostSupported) {
+ mBassBoostEffect.setStrength((short)
+ mPrefs.getInt(Key.bb_strength.toString(), 0));
+ }
+ if (mVirtualizerSupported) {
+ mVirtualizerEffect.setStrength((short)
+ mPrefs.getInt(Key.virt_strength.toString(), 0));
+ }
+ }
+ }
+
+ }
+
+ public void releaseEffects() {
+ if (mBassBoostEffect != null) {
+ mBassBoostEffect.setEnabled(false);
+ mBassBoostEffect.release();
+ mBassBoostEffect = null;
+ }
+ if (mVirtualizerEffect != null) {
+ mVirtualizerEffect.setEnabled(false);
+ mVirtualizerEffect.release();
+ mVirtualizerEffect = null;
}
- return true;
}
private Intent createShareIntent() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("video/*");
- intent.putExtra(Intent.EXTRA_STREAM, mUri);
+ intent.putExtra(Intent.EXTRA_STREAM, mMovieItem.getUri());
return intent;
}
@@ -195,19 +501,23 @@ public class MovieActivity extends Activity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
- if (mTreatUpAsBack) {
- finish();
- } else {
- startActivity(new Intent(this, GalleryActivity.class));
- finish();
- }
+ // If click back up button, we will always finish current activity and
+ // back to previous one.
+ finish();
return true;
} else if (id == R.id.action_share) {
startActivity(Intent.createChooser(createShareIntent(),
getString(R.string.share)));
return true;
}
- return false;
+ return mMovieHooker.onOptionsItemSelected(item);
+ }
+
+ public void showHeadsetPlugToast() {
+ final Toast toast = Toast.makeText(getApplicationContext(), R.string.headset_plug,
+ Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2, toast.getYOffset() / 2);
+ toast.show();
}
@Override
@@ -216,6 +526,8 @@ public class MovieActivity extends Activity {
.requestAudioFocus(null, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
super.onStart();
+ mMovieHooker.onStart();
+ registerScreenReceiver();
}
@Override
@@ -223,18 +535,72 @@ public class MovieActivity extends Activity {
((AudioManager) getSystemService(AUDIO_SERVICE))
.abandonAudioFocus(null);
super.onStop();
+ if (mControlResumed && mPlayer != null) {
+ mPlayer.onStop();
+ mControlResumed = false;
+ }
+ mMovieHooker.onStop();
+ unregisterScreenReceiver();
}
@Override
public void onPause() {
- mPlayer.onPause();
+ // Audio track will be deallocated for local video playback,
+ // thus recycle effect here.
+ releaseEffects();
+ try {
+ unregisterReceiver(mReceiver);
+ } catch (IllegalArgumentException e) {
+ // Do nothing
+ }
+ mResumed = false;
+ if (mControlResumed && mPlayer != null) {
+ mControlResumed = !mPlayer.onPause();
+ }
super.onPause();
+ mMovieHooker.onPause();
}
@Override
public void onResume() {
- mPlayer.onResume();
+ invalidateOptionsMenu();
+
+ if ((mVirtualizerSupported) || (mBassBoostSupported)) {
+ final IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
+ intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
+ intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
+ intentFilter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
+ registerReceiver(mReceiver, intentFilter);
+ }
+
+ mResumed = true;
+ if (!isKeyguardLocked() && !mControlResumed && mPlayer != null) {
+ mPlayer.onResume();
+ mControlResumed = true;
+ //initEffects(mPlayer.getAudioSessionId());
+ }
+ enhanceActionBar();
super.onResume();
+ mMovieHooker.onResume();
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ||
+ this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
+ mPlayer.setDefaultScreenMode();
+ }
+ }
+
+ private boolean isBtHeadsetConnected() {
+ BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ if (adapter != null && adapter.isEnabled() &&
+ (BluetoothProfile.STATE_CONNECTED == adapter.getProfileConnectionState(BluetoothProfile.HEADSET)
+ || BluetoothProfile.STATE_CONNECTED == adapter.getProfileConnectionState(BluetoothProfile.A2DP))) {
+ return true;
+ }
+ return false;
}
@Override
@@ -245,8 +611,24 @@ public class MovieActivity extends Activity {
@Override
public void onDestroy() {
+ releaseEffects();
mPlayer.onDestroy();
super.onDestroy();
+ mMovieHooker.onDestroy();
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (LOG) {
+ Log.v(TAG, "onWindowFocusChanged(" + hasFocus + ") isKeyguardLocked="
+ + isKeyguardLocked()
+ + ", mResumed=" + mResumed + ", mControlResumed=" + mControlResumed);
+ }
+ if (hasFocus && !isKeyguardLocked() && mResumed && !mControlResumed && mPlayer != null) {
+ mPlayer.onResume();
+ mControlResumed = true;
+ }
}
@Override
@@ -260,4 +642,156 @@ public class MovieActivity extends Activity {
return mPlayer.onKeyUp(keyCode, event)
|| super.onKeyUp(keyCode, event);
}
+
+ private boolean isSharable() {
+ String scheme = mUri.getScheme();
+ return ContentResolver.SCHEME_FILE.equals(scheme)
+ || (ContentResolver.SCHEME_CONTENT.equals(scheme) && MediaStore.AUTHORITY
+ .equals(mUri.getAuthority()));
+ }
+ private void initMovieInfo(Intent intent) {
+ Uri original = intent.getData();
+ String mimeType = intent.getType();
+ if (VIDEO_SDP_MIME_TYPE.equalsIgnoreCase(mimeType)
+ && VIDEO_FILE_SCHEMA.equalsIgnoreCase(original.getScheme())) {
+ mMovieItem = new MovieItem(VIDEO_SDP_TITLE + original, mimeType, null);
+ } else {
+ mMovieItem = new MovieItem(original, mimeType, null);
+ }
+ mMovieItem.setOriginalUri(original);
+ }
+
+ // we do not stop live streaming when other dialog overlays it.
+ private BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (LOG) {
+ Log.v(TAG, "onReceive(" + intent.getAction() + ") mControlResumed="
+ + mControlResumed);
+ }
+ if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
+ // Only stop video.
+ if (mControlResumed) {
+ mPlayer.onStop();
+ mControlResumed = false;
+ }
+ } else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
+ if (!mControlResumed) {
+ mPlayer.onResume();
+ mControlResumed = true;
+ }
+ }
+ }
+
+ };
+
+ private void registerScreenReceiver() {
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_SCREEN_OFF);
+ filter.addAction(Intent.ACTION_USER_PRESENT);
+ registerReceiver(mScreenReceiver, filter);
+ }
+
+ private void unregisterScreenReceiver() {
+ unregisterReceiver(mScreenReceiver);
+ }
+
+ private boolean isKeyguardLocked() {
+ if (mKeyguardManager == null) {
+ mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
+ }
+ // isKeyguardSecure excludes the slide lock case.
+ boolean locked = (mKeyguardManager != null)
+ && mKeyguardManager.inKeyguardRestrictedInputMode();
+ if (LOG) {
+ Log.v(TAG, "isKeyguardLocked() locked=" + locked + ", mKeyguardManager="
+ + mKeyguardManager);
+ }
+ return locked;
+ }
+
+ public void refreshMovieInfo(IMovieItem info) {
+ mMovieItem = info;
+ setActionBarTitle(info.getTitle());
+ refreshShareProvider(info);
+ mMovieHooker.setParameter(null, mMovieItem);
+ }
+
+ private void refreshShareProvider(IMovieItem info) {
+ // we only share the video if it's "content:".
+ if (mShareProvider != null) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ if (MovieUtils.isLocalFile(info.getUri(), info.getMimeType())) {
+ intent.setType("video/*");
+ intent.putExtra(Intent.EXTRA_STREAM, info.getUri());
+ } else {
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, String.valueOf(info.getUri()));
+ }
+ mShareProvider.setShareIntent(intent);
+ }
+ }
+
+ private void enhanceActionBar() {
+ final IMovieItem movieItem = mMovieItem;// remember original item
+ final Uri uri = mMovieItem.getUri();
+ final String scheme = mMovieItem.getUri().getScheme();
+ final String authority = mMovieItem.getUri().getAuthority();
+ new AsyncTask<Void, Void, String>() {
+ @Override
+ protected String doInBackground(Void... params) {
+ String title = null;
+ if (ContentResolver.SCHEME_FILE.equals(scheme)) {
+ title = MovieTitleHelper.getTitleFromMediaData(MovieActivity.this, uri);
+ } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
+ title = MovieTitleHelper.getTitleFromDisplayName(MovieActivity.this, uri);
+ if (title == null) {
+ title = MovieTitleHelper.getTitleFromData(MovieActivity.this, uri);
+ }
+ }
+ if (title == null) {
+ title = MovieTitleHelper.getTitleFromUri(uri);
+ }
+ if (LOG) {
+ Log.v(TAG, "enhanceActionBar() task return " + title);
+ }
+ return title;
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ if (LOG) {
+ Log.v(TAG, "onPostExecute(" + result + ") movieItem=" + movieItem
+ + ", mMovieItem=" + mMovieItem);
+ }
+ movieItem.setTitle(result);
+ if (movieItem == mMovieItem) {
+ setActionBarTitle(result);
+ }
+ };
+ }.execute();
+ if (LOG) {
+ Log.v(TAG, "enhanceActionBar() " + mMovieItem);
+ }
+ }
+
+ public void setActionBarTitle(String title) {
+ if (LOG) {
+ Log.v(TAG, "setActionBarTitle(" + title + ")");
+ }
+ ActionBar actionBar = getActionBar();
+ if (title != null) {
+ actionBar.setTitle(title);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ finishActivity();
+ }
+ private void finishActivity(){
+ MovieActivity.this.finish();
+ overridePendingTransition(0,0);
+ return;
+ }
}
diff --git a/src/com/android/gallery3d/app/MovieControllerOverlay.java b/src/com/android/gallery3d/app/MovieControllerOverlay.java
index f01e619c6..c26b12655 100644
--- a/src/com/android/gallery3d/app/MovieControllerOverlay.java
+++ b/src/com/android/gallery3d/app/MovieControllerOverlay.java
@@ -17,14 +17,39 @@
package com.android.gallery3d.app;
import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.Rect;
import android.os.Handler;
+import android.util.DisplayMetrics;
+import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
import com.android.gallery3d.R;
+import com.android.gallery3d.app.CommonControllerOverlay.State;
+import org.codeaurora.gallery3d.ext.IContrllerOverlayExt;
+import org.codeaurora.gallery3d.video.IControllerRewindAndForward;
+import org.codeaurora.gallery3d.video.IControllerRewindAndForward.IRewindAndForwardListener;
+import org.codeaurora.gallery3d.video.ExtensionHelper;
+import org.codeaurora.gallery3d.video.ScreenModeManager;
+import org.codeaurora.gallery3d.video.ScreenModeManager.ScreenModeListener;
+
/**
* The playback controller for the Movie Player.
@@ -32,15 +57,25 @@ import com.android.gallery3d.R;
public class MovieControllerOverlay extends CommonControllerOverlay implements
AnimationListener {
+ private static final String TAG = "Gallery3D/MovieControllerOverlay";
+ private static final boolean LOG = false;
+
+ private ScreenModeManager mScreenModeManager;
+ private ScreenModeExt mScreenModeExt = new ScreenModeExt();
+ private ControllerRewindAndForwardExt mControllerRewindAndForwardExt = new ControllerRewindAndForwardExt();
+ private OverlayExtension mOverlayExt = new OverlayExtension();
private boolean hidden;
private final Handler handler;
private final Runnable startHidingRunnable;
private final Animation hideAnimation;
+ private boolean enableRewindAndForward = false;
+ private Context mContext;
+
public MovieControllerOverlay(Context context) {
super(context);
-
+ mContext = context;
handler = new Handler();
startHidingRunnable = new Runnable() {
@Override
@@ -52,9 +87,64 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
hideAnimation = AnimationUtils.loadAnimation(context, R.anim.player_out);
hideAnimation.setAnimationListener(this);
+ enableRewindAndForward = true;
+ if (LOG) {
+ Log.v(TAG, "enableRewindAndForward is " + enableRewindAndForward);
+ }
+ mControllerRewindAndForwardExt.init(context);
+ mScreenModeExt.init(context, mTimeBar);
+ mBackground.setClickable(true);
hide();
}
+ public void showPlaying() {
+ if (!mOverlayExt.handleShowPlaying()) {
+ mState = State.PLAYING;
+ showMainView(mPlayPauseReplayView);
+ }
+ if (LOG) {
+ Log.v(TAG, "showPlaying() state=" + mState);
+ }
+ }
+
+ public void showPaused() {
+ if (!mOverlayExt.handleShowPaused()) {
+ mState = State.PAUSED;
+ showMainView(mPlayPauseReplayView);
+ }
+ if (LOG) {
+ Log.v(TAG, "showPaused() state=" + mState);
+ }
+ }
+
+ public void showEnded() {
+ mOverlayExt.onShowEnded();
+ mState = State.ENDED;
+ showMainView(mPlayPauseReplayView);
+ if (LOG) {
+ Log.v(TAG, "showEnded() state=" + mState);
+ }
+ }
+
+ public void showLoading() {
+ mOverlayExt.onShowLoading();
+ mState = State.LOADING;
+ showMainView(mLoadingView);
+ if (LOG) {
+ Log.v(TAG, "showLoading() state=" + mState);
+ }
+ }
+
+ public void showErrorMessage(String message) {
+ mOverlayExt.onShowErrorMessage(message);
+ mState = State.ERROR;
+ int padding = (int) (getMeasuredWidth() * ERROR_MESSAGE_RELATIVE_PADDING);
+ mErrorView.setPadding(padding, mErrorView.getPaddingTop(), padding,
+ mErrorView.getPaddingBottom());
+ mErrorView.setText(message);
+ showMainView(mErrorView);
+ }
+
@Override
protected void createTimeBar(Context context) {
mTimeBar = new TimeBar(context, this);
@@ -64,25 +154,51 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
public void hide() {
boolean wasHidden = hidden;
hidden = true;
- super.hide();
+ mPlayPauseReplayView.setVisibility(View.INVISIBLE);
+ mLoadingView.setVisibility(View.INVISIBLE);
+ if (!mOverlayExt.handleHide()) {
+ setVisibility(View.INVISIBLE);
+ }
+ mBackground.setVisibility(View.INVISIBLE);
+ mTimeBar.setVisibility(View.INVISIBLE);
+ mScreenModeExt.onHide();
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.onHide();
+ }
+ setFocusable(true);
+ requestFocus();
if (mListener != null && wasHidden != hidden) {
mListener.onHidden();
}
}
+ private void showMainView(View view) {
+ mMainView = view;
+ mErrorView.setVisibility(mMainView == mErrorView ? View.VISIBLE
+ : View.INVISIBLE);
+ mLoadingView.setVisibility(mMainView == mLoadingView ? View.VISIBLE
+ : View.INVISIBLE);
+ mPlayPauseReplayView
+ .setVisibility(mMainView == mPlayPauseReplayView ? View.VISIBLE
+ : View.INVISIBLE);
+ mOverlayExt.onShowMainView(view);
+ show();
+ }
@Override
public void show() {
boolean wasHidden = hidden;
hidden = false;
- super.show();
+ updateViews();
+ setVisibility(View.VISIBLE);
+ setFocusable(false);
if (mListener != null && wasHidden != hidden) {
mListener.onShown();
}
maybeStartHiding();
}
- private void maybeStartHiding() {
+ public void maybeStartHiding() {
cancelHiding();
if (mState == State.PLAYING) {
handler.postDelayed(startHidingRunnable, 2500);
@@ -90,8 +206,14 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
}
private void startHiding() {
- startHideAnimation(mBackground);
- startHideAnimation(mTimeBar);
+ if (mOverlayExt.canHidePanel()) {
+ startHideAnimation(mBackground);
+ startHideAnimation(mTimeBar);
+ mScreenModeExt.onStartHiding();
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.onStartHiding();
+ }
+ }
startHideAnimation(mPlayPauseReplayView);
}
@@ -101,10 +223,16 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
}
}
- private void cancelHiding() {
+ public void cancelHiding() {
handler.removeCallbacks(startHidingRunnable);
- mBackground.setAnimation(null);
- mTimeBar.setAnimation(null);
+ if (mOverlayExt.canHidePanel()) {
+ mBackground.setAnimation(null);
+ mTimeBar.setAnimation(null);
+ mScreenModeExt.onCancelHiding();
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.onCancelHiding();
+ }
+ }
mPlayPauseReplayView.setAnimation(null);
}
@@ -123,6 +251,65 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
hide();
}
+ public void onClick(View view) {
+ if (LOG) {
+ Log.v(TAG, "onClick(" + view + ") listener=" + mListener
+ + ", state=" + mState + ", canReplay=" + mCanReplay);
+ }
+ if (mListener != null) {
+ if (view == mPlayPauseReplayView) {
+ if (mState == State.ENDED) {
+ if (mCanReplay) {
+ mListener.onReplay();
+ }
+ } else if (mState == State.PAUSED || mState == State.PLAYING) {
+ mListener.onPlayPause();
+ // set view disabled (play/pause asynchronous processing)
+ setViewEnabled(true);
+ }
+ }
+ } else {
+ mScreenModeExt.onClick(view);
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.onClick(view);
+ }
+ }
+ }
+
+ /*
+ * set view enable (non-Javadoc)
+ * @see com.android.gallery3d.app.ControllerOverlay#setViewEnabled(boolean)
+ */
+ @Override
+ public void setViewEnabled(boolean isEnabled) {
+ if (mListener.onIsRTSP()) {
+ if (LOG) {
+ Log.v(TAG, "setViewEnabled is " + isEnabled);
+ }
+ mOverlayExt.setCanScrubbing(isEnabled);
+ mPlayPauseReplayView.setEnabled(isEnabled);
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.setViewEnabled(isEnabled);
+ }
+ }
+ }
+
+ /*
+ * set play pause button from disable to normal (non-Javadoc)
+ * @see
+ * com.android.gallery3d.app.ControllerOverlay#setPlayPauseReplayResume(
+ * void)
+ */
+ @Override
+ public void setPlayPauseReplayResume() {
+ if (mListener.onIsRTSP()) {
+ if (LOG) {
+ Log.v(TAG, "setPlayPauseReplayResume is enabled is true");
+ }
+ mPlayPauseReplayView.setEnabled(true);
+ }
+ }
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (hidden) {
@@ -144,7 +331,10 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
cancelHiding();
- if (mState == State.PLAYING || mState == State.PAUSED) {
+ // you can click play or pause when view is resumed
+ // play/pause asynchronous processing
+ if ((mState == State.PLAYING || mState == State.PAUSED)
+ && mOverlayExt.mEnableScrubbing) {
mListener.onPlayPause();
}
break;
@@ -156,11 +346,71 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
}
@Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ int width = ((MovieActivity) mContext).getWindowManager().getDefaultDisplay().getWidth();
+ Rect insets = mWindowInsets;
+ int pl = insets.left; // the left paddings
+ int pr = insets.right;
+ int pt = insets.top;
+ int pb = insets.bottom;
+
+ int h = bottom - top;
+ int w = right - left;
+ boolean error = mErrorView.getVisibility() == View.VISIBLE;
+
+ int y = h - pb;
+ // Put both TimeBar and Background just above the bottom system
+ // component.
+ // But extend the background to the width of the screen, since we don't
+ // care if it will be covered by a system component and it looks better.
+
+ // Needed, otherwise the framework will not re-layout in case only the
+ // padding is changed
+ if (enableRewindAndForward) {
+ mBackground.layout(0, y - mTimeBar.getPreferredHeight() - 80, w, y);
+ mTimeBar.layout(pl, y - mTimeBar.getPreferredHeight() - 120, w - pr,
+ y - mTimeBar.getBarHeight());
+ mControllerRewindAndForwardExt.onLayout(0, width, y);
+ } else {
+ mBackground.layout(0, y - mTimeBar.getBarHeight(), w, y);
+ mTimeBar.layout(pl, y - mTimeBar.getPreferredHeight(),
+ w - pr - mScreenModeExt.getAddedRightPadding(), y);
+ }
+ mScreenModeExt.onLayout(w, pr, y);
+ // Put the play/pause/next/ previous button in the center of the screen
+ layoutCenteredView(mPlayPauseReplayView, 0, 0, w, h);
+
+ if (mMainView != null) {
+ layoutCenteredView(mMainView, 0, 0, w, h);
+ }
+ }
+
+ @Override
protected void updateViews() {
if (hidden) {
return;
}
- super.updateViews();
+ mBackground.setVisibility(View.VISIBLE);
+ mTimeBar.setVisibility(View.VISIBLE);
+ mPlayPauseReplayView.setImageResource(
+ mState == State.PAUSED ? R.drawable.videoplayer_play :
+ mState == State.PLAYING ? R.drawable.videoplayer_pause :
+ R.drawable.videoplayer_reload);
+ mScreenModeExt.onShow();
+ if (enableRewindAndForward) {
+ mControllerRewindAndForwardExt.onShow();
+ }
+ if (!mOverlayExt.handleUpdateViews()) {
+ mPlayPauseReplayView.setVisibility(
+ (mState != State.LOADING && mState != State.ERROR &&
+ !(mState == State.ENDED && !mCanReplay))
+ ? View.VISIBLE : View.GONE);
+ }
+ requestLayout();
+ if (LOG) {
+ Log.v(TAG, "updateViews() state=" + mState + ", canReplay="
+ + mCanReplay);
+ }
}
// TimeBar listener
@@ -182,4 +432,569 @@ public class MovieControllerOverlay extends CommonControllerOverlay implements
maybeStartHiding();
super.onScrubbingEnd(time, trimStartTime, trimEndTime);
}
+
+ public void setScreenModeManager(ScreenModeManager manager) {
+ mScreenModeManager = manager;
+ if (mScreenModeManager != null) {
+ mScreenModeManager.addListener(mScreenModeExt);
+ }
+ if (LOG) {
+ Log.v(TAG, "setScreenModeManager(" + manager + ")");
+ }
+ }
+
+ public void setDefaultScreenMode() {
+ mScreenModeManager.setScreenMode(ScreenModeManager.SCREENMODE_BIGSCREEN);
+ }
+
+ public IContrllerOverlayExt getOverlayExt() {
+ return mOverlayExt;
+ }
+
+ public IControllerRewindAndForward getControllerRewindAndForwardExt() {
+ if (enableRewindAndForward) {
+ return mControllerRewindAndForwardExt;
+ }
+ return null;
+ }
+
+ private class OverlayExtension implements IContrllerOverlayExt {
+ private State mLastState;
+ private String mPlayingInfo;
+ // for pause feature
+ private boolean mCanPause = true;
+ private boolean mEnableScrubbing = false;
+ // for only audio feature
+ private boolean mAlwaysShowBottom;
+
+ @Override
+ public void showBuffering(boolean fullBuffer, int percent) {
+ if (LOG) {
+ Log.v(TAG, "showBuffering(" + fullBuffer + ", " + percent
+ + ") " + "lastState=" + mLastState + ", state=" + mState);
+ }
+ if (fullBuffer) {
+ // do not show text and loading
+ mTimeBar.setSecondaryProgress(percent);
+ return;
+ }
+ if (mState == State.PAUSED || mState == State.PLAYING) {
+ mLastState = mState;
+ }
+ if (percent >= 0 && percent < 100) { // valid value
+ mState = State.BUFFERING;
+ String text = "media controller buffering";
+ mTimeBar.setInfo(text);
+ showMainView(mLoadingView);
+ } else if (percent == 100) {
+ mState = mLastState;
+ mTimeBar.setInfo(null);
+ showMainView(mPlayPauseReplayView);// restore play pause state
+ } else { // here to restore old state
+ mState = mLastState;
+ mTimeBar.setInfo(null);
+ }
+ }
+
+ // set buffer percent to unknown value
+ public void clearBuffering() {
+ if (LOG) {
+ Log.v(TAG, "clearBuffering()");
+ }
+ mTimeBar.setSecondaryProgress(TimeBar.UNKNOWN);
+ showBuffering(false, TimeBar.UNKNOWN);
+ }
+
+ public void showReconnecting(int times) {
+ clearBuffering();
+ mState = State.RETRY_CONNECTING;
+ int msgId = R.string.videoview_error_text_cannot_connect_retry;
+ String text = getResources().getString(msgId, times);
+ mTimeBar.setInfo(text);
+ showMainView(mLoadingView);
+ if (LOG) {
+ Log.v(TAG, "showReconnecting(" + times + ")");
+ }
+ }
+
+ public void showReconnectingError() {
+ clearBuffering();
+ mState = State.RETRY_CONNECTING_ERROR;
+
+ String text = "can not connect to server";
+ mTimeBar.setInfo(text);
+ showMainView(mPlayPauseReplayView);
+ if (LOG) {
+ Log.v(TAG, "showReconnectingError()");
+ }
+ }
+
+ public void setPlayingInfo(boolean liveStreaming) {
+ int msgId;
+ // TODO
+ if (liveStreaming) {
+ msgId = R.string.media_controller_live;
+ } else {
+ msgId = R.string.media_controller_playing;
+ }
+ mPlayingInfo = getResources().getString(msgId);
+ if (LOG) {
+ Log.v(TAG, "setPlayingInfo(" + liveStreaming
+ + ") playingInfo=" + mPlayingInfo);
+ }
+ }
+
+ public void setCanPause(boolean canPause) {
+ this.mCanPause = canPause;
+ if (LOG) {
+ Log.v(TAG, "setCanPause(" + canPause + ")");
+ }
+ }
+
+ public void setCanScrubbing(boolean enable) {
+ mEnableScrubbing = enable;
+ mTimeBar.setScrubbing(enable);
+ if (LOG) {
+ Log.v(TAG, "setCanScrubbing(" + enable + ")");
+ }
+ }
+
+ public void setBottomPanel(boolean alwaysShow, boolean foreShow) {
+ mAlwaysShowBottom = alwaysShow;
+ if (!alwaysShow) { // clear background
+ setBackgroundDrawable(null);
+ setBackgroundColor(Color.TRANSPARENT);
+ } else {
+ setBackgroundResource(R.drawable.media_default_bkg);
+ if (foreShow) {
+ setVisibility(View.VISIBLE);
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "setBottomPanel(" + alwaysShow + ", " + foreShow
+ + ")");
+ }
+ }
+
+ public boolean isPlayingEnd() {
+ if (LOG) {
+ Log.v(TAG, "isPlayingEnd() state=" + mState);
+ }
+ boolean end = false;
+ if (State.ENDED == mState || State.ERROR == mState
+ || State.RETRY_CONNECTING_ERROR == mState) {
+ end = true;
+ }
+ return end;
+ }
+
+ public boolean handleShowPlaying() {
+ if (mState == State.BUFFERING) {
+ mLastState = State.PLAYING;
+ return true;
+ }
+ return false;
+ }
+
+ public boolean handleShowPaused() {
+ mTimeBar.setInfo(null);
+ if (mState == State.BUFFERING) {
+ mLastState = State.PAUSED;
+ return true;
+ }
+ return false;
+ }
+
+ public void onShowLoading() {
+ // TODO
+ int msgId = R.string.media_controller_connecting;
+ String text = getResources().getString(msgId);
+ mTimeBar.setInfo(text);
+ }
+
+ public void onShowEnded() {
+ clearBuffering();
+ mTimeBar.setInfo(null);
+ }
+
+ public void onShowErrorMessage(String message) {
+ clearBuffering();
+ }
+
+ public boolean handleUpdateViews() {
+ mPlayPauseReplayView
+ .setVisibility((mState != State.LOADING
+ && mState != State.ERROR
+ && mState != State.BUFFERING
+ && mState != State.RETRY_CONNECTING && !(mState != State.ENDED
+ && mState != State.RETRY_CONNECTING_ERROR && !mCanPause))
+ // for live streaming
+ ? View.VISIBLE
+ : View.GONE);
+
+ if (mPlayingInfo != null && mState == State.PLAYING) {
+ mTimeBar.setInfo(mPlayingInfo);
+ }
+ return true;
+ }
+
+ public boolean handleHide() {
+ return mAlwaysShowBottom;
+ }
+
+ public void onShowMainView(View view) {
+ if (LOG) {
+ Log.v(TAG, "showMainView(" + view + ") errorView="
+ + mErrorView + ", loadingView=" + mLoadingView
+ + ", playPauseReplayView=" + mPlayPauseReplayView);
+ Log.v(TAG, "showMainView() enableScrubbing="
+ + mEnableScrubbing + ", state=" + mState);
+ }
+ if (mEnableScrubbing
+ && (mState == State.PAUSED || mState == State.PLAYING)) {
+ mTimeBar.setScrubbing(true);
+ } else {
+ mTimeBar.setScrubbing(false);
+ }
+ }
+
+ public boolean canHidePanel() {
+ return !mAlwaysShowBottom;
+ }
+ };
+
+ class ScreenModeExt implements View.OnClickListener, ScreenModeListener {
+ // for screen mode feature
+ private ImageView mScreenView;
+ private int mScreenPadding;
+ private int mScreenWidth;
+
+ private static final int MARGIN = 10; // dip
+ private ViewGroup mParent;
+ private ImageView mSeprator;
+
+ void init(Context context, View myTimeBar) {
+ DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+ int padding = (int) (metrics.density * MARGIN);
+ myTimeBar.setPadding(padding, 0, padding, 0);
+
+ LayoutParams wrapContent =
+ new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+ // add screenView
+ mScreenView = new ImageView(context);
+ // default next screen mode
+ mScreenView.setImageResource(R.drawable.ic_media_fullscreen);
+ mScreenView.setScaleType(ScaleType.CENTER);
+ mScreenView.setFocusable(true);
+ mScreenView.setClickable(true);
+ mScreenView.setOnClickListener(this);
+ addView(mScreenView, wrapContent);
+
+ if (enableRewindAndForward) {
+ if (LOG) {
+ Log.v(TAG, "ScreenModeExt enableRewindAndForward");
+ }
+ mSeprator = new ImageView(context);
+ // default next screen mode
+ mSeprator.setImageResource(R.drawable.ic_separator_line);
+ mSeprator.setScaleType(ScaleType.CENTER);
+ mSeprator.setFocusable(true);
+ mSeprator.setClickable(true);
+ mSeprator.setOnClickListener(this);
+ addView(mSeprator, wrapContent);
+
+ } else {
+ if (LOG) {
+ Log.v(TAG, "ScreenModeExt unenableRewindAndForward");
+ }
+ }
+
+ // for screen layout
+ Bitmap screenButton = BitmapFactory.decodeResource(context.getResources(),
+ R.drawable.ic_media_bigscreen);
+ mScreenWidth = screenButton.getWidth();
+ mScreenPadding = (int) (metrics.density * MARGIN);
+ screenButton.recycle();
+ }
+
+ private void updateScreenModeDrawable() {
+ int screenMode = mScreenModeManager.getNextScreenMode();
+ if (screenMode == ScreenModeManager.SCREENMODE_BIGSCREEN) {
+ mScreenView.setImageResource(R.drawable.ic_media_bigscreen);
+ } else if (screenMode == ScreenModeManager.SCREENMODE_FULLSCREEN) {
+ mScreenView.setImageResource(R.drawable.ic_media_fullscreen);
+ } else {
+ mScreenView.setImageResource(R.drawable.ic_media_cropscreen);
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == mScreenView && mScreenModeManager != null) {
+ mScreenModeManager.setScreenMode(mScreenModeManager
+ .getNextScreenMode());
+ show();
+ }
+ }
+
+ public void onStartHiding() {
+ startHideAnimation(mScreenView);
+ }
+
+ public void onCancelHiding() {
+ mScreenView.setAnimation(null);
+ }
+
+ public void onHide() {
+ mScreenView.setVisibility(View.INVISIBLE);
+ if (enableRewindAndForward) {
+ mSeprator.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ public void onShow() {
+ mScreenView.setVisibility(View.VISIBLE);
+ if (enableRewindAndForward) {
+ mSeprator.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public void onLayout(int width, int paddingRight, int yPosition) {
+ // layout screen view position
+ int sw = getAddedRightPadding();
+ mScreenView.layout(width - paddingRight - sw, yPosition
+ - mTimeBar.getPreferredHeight(), width - paddingRight,
+ yPosition);
+ if (enableRewindAndForward) {
+ mSeprator.layout(width - paddingRight - sw - 22, yPosition
+ - mTimeBar.getPreferredHeight(), width - paddingRight - sw - 20,
+ yPosition);
+ }
+ }
+
+ public int getAddedRightPadding() {
+ return mScreenPadding * 2 + mScreenWidth;
+ }
+
+ @Override
+ public void onScreenModeChanged(int newMode) {
+ updateScreenModeDrawable();
+ }
+ }
+
+ class ControllerRewindAndForwardExt implements View.OnClickListener,
+ IControllerRewindAndForward {
+ private LinearLayout mContollerButtons;
+ private ImageView mStop;
+ private ImageView mForward;
+ private ImageView mRewind;
+ private IRewindAndForwardListener mListenerForRewind;
+ private int mButtonWidth;
+ private static final int BUTTON_PADDING = 40;
+ private int mTimeBarHeight = 0;
+
+ void init(Context context) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt init");
+ }
+ mTimeBarHeight = mTimeBar.getPreferredHeight();
+ Bitmap button = BitmapFactory.decodeResource(context.getResources(),
+ R.drawable.ic_menu_forward);
+ mButtonWidth = button.getWidth();
+ button.recycle();
+
+ mContollerButtons = new LinearLayout(context);
+ LinearLayout.LayoutParams wrapContent = new LinearLayout.LayoutParams(
+ getAddedRightPadding(), mTimeBarHeight);
+ mContollerButtons.setHorizontalGravity(LinearLayout.HORIZONTAL);
+ mContollerButtons.setVisibility(View.VISIBLE);
+ mContollerButtons.setGravity(Gravity.CENTER);
+
+ LinearLayout.LayoutParams buttonParam = new LinearLayout.LayoutParams(
+ mButtonWidth, mTimeBarHeight);
+ mRewind = new ImageView(context);
+ mRewind.setImageResource(R.drawable.icn_media_rewind);
+ mRewind.setScaleType(ScaleType.CENTER);
+ mRewind.setFocusable(true);
+ mRewind.setClickable(true);
+ mRewind.setOnClickListener(this);
+ mContollerButtons.addView(mRewind, buttonParam);
+
+ mStop = new ImageView(context);
+ mStop.setImageResource(R.drawable.icn_media_stop);
+ mStop.setScaleType(ScaleType.CENTER);
+ mStop.setFocusable(true);
+ mStop.setClickable(true);
+ mStop.setOnClickListener(this);
+ LinearLayout.LayoutParams stopLayoutParam = new LinearLayout.LayoutParams(
+ mTimeBarHeight, mTimeBarHeight);
+ stopLayoutParam.setMargins(BUTTON_PADDING, 0, BUTTON_PADDING, 0);
+ mContollerButtons.addView(mStop, stopLayoutParam);
+
+ mForward = new ImageView(context);
+ mForward.setImageResource(R.drawable.icn_media_forward);
+ mForward.setScaleType(ScaleType.CENTER);
+ mForward.setFocusable(true);
+ mForward.setClickable(true);
+ mForward.setOnClickListener(this);
+ mContollerButtons.addView(mForward, buttonParam);
+
+ // Do NOT RTL for media controller
+ mContollerButtons.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+
+ addView(mContollerButtons, wrapContent);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == mStop) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onClick mStop");
+ }
+ mListenerForRewind.onStopVideo();
+ } else if (v == mRewind) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onClick mRewind");
+ }
+ mListenerForRewind.onRewind();
+ } else if (v == mForward) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onClick mForward");
+ }
+ mListenerForRewind.onForward();
+ }
+ }
+
+ public void onStartHiding() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onStartHiding");
+ }
+ startHideAnimation(mContollerButtons);
+ }
+
+ public void onCancelHiding() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onCancelHiding");
+ }
+ mContollerButtons.setAnimation(null);
+ }
+
+ public void onHide() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onHide");
+ }
+ mContollerButtons.setVisibility(View.INVISIBLE);
+ }
+
+ public void onShow() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onShow");
+ }
+ mContollerButtons.setVisibility(View.VISIBLE);
+ }
+
+ public void onLayout(int l, int r, int b) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onLayout");
+ }
+ int cl = (r - l - getAddedRightPadding()) / 2;
+ int cr = cl + getAddedRightPadding();
+ mContollerButtons.layout(cl, b - mTimeBar.getPreferredHeight(), cr, b);
+ }
+
+ public int getAddedRightPadding() {
+ return mTimeBarHeight * 3 + BUTTON_PADDING * 2;
+ }
+
+ @Override
+ public void setIListener(IRewindAndForwardListener listener) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt setIListener " + listener);
+ }
+ mListenerForRewind = listener;
+ }
+
+ @Override
+ public void showControllerButtonsView(boolean canStop, boolean canRewind, boolean canForward) {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt showControllerButtonsView " + canStop
+ + canRewind + canForward);
+ }
+ // show ui
+ mStop.setEnabled(canStop);
+ mRewind.setEnabled(canRewind);
+ mForward.setEnabled(canForward);
+ }
+
+ @Override
+ public void setListener(Listener listener) {
+ setListener(listener);
+ }
+
+ @Override
+ public boolean getPlayPauseEanbled() {
+ return mPlayPauseReplayView.isEnabled();
+ }
+
+ @Override
+ public boolean getTimeBarEanbled() {
+ return mTimeBar.getScrubbing();
+ }
+
+ @Override
+ public void setCanReplay(boolean canReplay) {
+ setCanReplay(canReplay);
+ }
+
+ @Override
+ public View getView() {
+ return mContollerButtons;
+ }
+
+ @Override
+ public void show() {
+ show();
+ }
+
+ @Override
+ public void showPlaying() {
+ showPlaying();
+ }
+
+ @Override
+ public void showPaused() {
+ showPaused();
+ }
+
+ @Override
+ public void showEnded() {
+ showEnded();
+ }
+
+ @Override
+ public void showLoading() {
+ showLoading();
+ }
+
+ @Override
+ public void showErrorMessage(String message) {
+ showErrorMessage(message);
+ }
+
+ public void setTimes(int currentTime, int totalTime, int trimStartTime, int trimEndTime) {
+ setTimes(currentTime, totalTime, 0, 0);
+ }
+
+ public void setPlayPauseReplayResume() {
+ }
+
+ public void setViewEnabled(boolean isEnabled) {
+ // TODO Auto-generated method stub
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt setViewEnabled is " + isEnabled);
+ }
+ mRewind.setEnabled(isEnabled);
+ mForward.setEnabled(isEnabled);
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/MoviePlayer.java b/src/com/android/gallery3d/app/MoviePlayer.java
index f6bd36725..2ef7c2e85 100644..100755
--- a/src/com/android/gallery3d/app/MoviePlayer.java
+++ b/src/com/android/gallery3d/app/MoviePlayer.java
@@ -23,10 +23,15 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.DialogInterface.OnShowListener;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.graphics.Color;
import android.media.AudioManager;
import android.media.MediaPlayer;
+import android.media.Metadata;
import android.media.audiofx.AudioEffect;
import android.media.audiofx.Virtualizer;
import android.net.Uri;
@@ -35,26 +40,47 @@ import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.MotionEvent;
+import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.VideoView;
+import android.widget.Toast;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.BlobCache;
import com.android.gallery3d.util.CacheManager;
import com.android.gallery3d.util.GalleryUtils;
+import org.codeaurora.gallery3d.ext.IContrllerOverlayExt;
+import org.codeaurora.gallery3d.ext.IMoviePlayer;
+import org.codeaurora.gallery3d.ext.IMovieItem;
+import org.codeaurora.gallery3d.ext.MovieUtils;
+import org.codeaurora.gallery3d.video.BookmarkEnhance;
+import org.codeaurora.gallery3d.video.ExtensionHelper;
+import org.codeaurora.gallery3d.video.IControllerRewindAndForward;
+import org.codeaurora.gallery3d.video.IControllerRewindAndForward.IRewindAndForwardListener;
+import org.codeaurora.gallery3d.video.ScreenModeManager;
+import org.codeaurora.gallery3d.video.ScreenModeManager.ScreenModeListener;
+import org.codeaurora.gallery3d.video.CodeauroraVideoView;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
+import java.util.HashMap;
+import java.util.Map;
public class MoviePlayer implements
MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener,
- ControllerOverlay.Listener {
+ ControllerOverlay.Listener,
+ MediaPlayer.OnInfoListener,
+ MediaPlayer.OnPreparedListener,
+ MediaPlayer.OnSeekCompleteListener,
+ MediaPlayer.OnVideoSizeChangedListener,
+ MediaPlayer.OnBufferingUpdateListener {
@SuppressWarnings("unused")
private static final String TAG = "MoviePlayer";
+ private static final boolean LOG = false;
private static final String KEY_VIDEO_POSITION = "video-position";
private static final String KEY_RESUMEABLE_TIME = "resumeable-timeout";
@@ -68,18 +94,32 @@ public class MoviePlayer implements
private static final String CMDNAME = "command";
private static final String CMDPAUSE = "pause";
+ private static final String KEY_VIDEO_CAN_SEEK = "video_can_seek";
+ private static final String KEY_VIDEO_CAN_PAUSE = "video_can_pause";
+ private static final String KEY_VIDEO_LAST_DURATION = "video_last_duration";
+ private static final String KEY_VIDEO_LAST_DISCONNECT_TIME = "last_disconnect_time";
+ private static final String KEY_VIDEO_STREAMING_TYPE = "video_streaming_type";
+ private static final String KEY_VIDEO_STATE = "video_state";
+
private static final String VIRTUALIZE_EXTRA = "virtualize";
private static final long BLACK_TIMEOUT = 500;
+ private static final int DELAY_REMOVE_MS = 10000;
+ public static final int SERVER_TIMEOUT = 8801;
// If we resume the acitivty with in RESUMEABLE_TIMEOUT, we will keep playing.
// Otherwise, we pause the player.
private static final long RESUMEABLE_TIMEOUT = 3 * 60 * 1000; // 3 mins
+ public static final int STREAMING_LOCAL = 0;
+ public static final int STREAMING_HTTP = 1;
+ public static final int STREAMING_RTSP = 2;
+ public static final int STREAMING_SDP = 3;
+ private int mStreamingType = STREAMING_LOCAL;
+
private Context mContext;
- private final VideoView mVideoView;
+ private final CodeauroraVideoView mVideoView;
private final View mRootView;
private final Bookmarker mBookmarker;
- private final Uri mUri;
private final Handler mHandler = new Handler();
private final AudioBecomingNoisyReceiver mAudioBecomingNoisyReceiver;
private final MovieControllerOverlay mController;
@@ -87,6 +127,11 @@ public class MoviePlayer implements
private long mResumeableTime = Long.MAX_VALUE;
private int mVideoPosition = 0;
private boolean mHasPaused = false;
+ private boolean mVideoHasPaused = false;
+ private boolean mCanResumed = false;
+ private boolean mFirstBePlayed = false;
+ private boolean mKeyguardLocked = false;
+ private boolean mIsOnlyAudio = false;
private int mLastSystemUiVis = 0;
// If the time bar is being dragged.
@@ -97,6 +142,36 @@ public class MoviePlayer implements
private Virtualizer mVirtualizer;
+ private MovieActivity mActivityContext;//for dialog and toast context
+ private MoviePlayerExtension mPlayerExt = new MoviePlayerExtension();
+ private RetryExtension mRetryExt = new RetryExtension();
+ private ServerTimeoutExtension mServerTimeoutExt = new ServerTimeoutExtension();
+ private ScreenModeExt mScreenModeExt = new ScreenModeExt();
+ private IContrllerOverlayExt mOverlayExt;
+ private IControllerRewindAndForward mControllerRewindAndForwardExt;
+ private IRewindAndForwardListener mRewindAndForwardListener = new ControllerRewindAndForwardExt();
+ private boolean mCanReplay;
+ private boolean mVideoCanSeek = false;
+ private boolean mVideoCanPause = false;
+ private boolean mWaitMetaData;
+ private boolean mIsShowResumingDialog;
+ private TState mTState = TState.PLAYING;
+ private IMovieItem mMovieItem;
+ private int mVideoLastDuration;//for duration displayed in init state
+
+ private enum TState {
+ PLAYING,
+ PAUSED,
+ STOPED,
+ COMPELTED,
+ RETRY_ERROR
+ }
+
+ interface Restorable {
+ void onRestoreInstanceState(Bundle icicle);
+ void onSaveInstanceState(Bundle outState);
+ }
+
private final Runnable mPlayingChecker = new Runnable() {
@Override
public void run() {
@@ -116,22 +191,57 @@ public class MoviePlayer implements
}
};
+ private Runnable mDelayVideoRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (LOG) {
+ Log.v(TAG, "mDelayVideoRunnable.run()");
+ }
+ mVideoView.setVisibility(View.VISIBLE);
+ }
+ };
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
+ mKeyguardLocked = true;
+ } else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
+ if ((mCanResumed) && (!mVideoHasPaused)) {
+ playVideo();
+ }
+ mKeyguardLocked = false;
+ mCanResumed = false;
+ } else if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {
+ if (LOG) {
+ Log.v(TAG, "Intent.ACTION_SHUTDOWN received");
+ }
+ mActivityContext.finish();
+ }
+ }
+ };
+
public MoviePlayer(View rootView, final MovieActivity movieActivity,
- Uri videoUri, Bundle savedInstance, boolean canReplay) {
+ IMovieItem info, Bundle savedInstance, boolean canReplay) {
mContext = movieActivity.getApplicationContext();
mRootView = rootView;
- mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
+ mVideoView = (CodeauroraVideoView) rootView.findViewById(R.id.surface_view);
mBookmarker = new Bookmarker(movieActivity);
- mUri = videoUri;
- mController = new MovieControllerOverlay(mContext);
+ mController = new MovieControllerOverlay(movieActivity);
((ViewGroup)rootView).addView(mController.getView());
mController.setListener(this);
mController.setCanReplay(canReplay);
+ init(movieActivity, info, canReplay);
+
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
- mVideoView.setVideoURI(mUri);
+
+ if (mVirtualizer != null) {
+ mVirtualizer.release();
+ mVirtualizer = null;
+ }
Intent ai = movieActivity.getIntent();
boolean virtualize = ai.getBooleanExtra(VIRTUALIZE_EXTRA, false);
@@ -186,20 +296,39 @@ public class MoviePlayer implements
i.putExtra(CMDNAME, CMDPAUSE);
movieActivity.sendBroadcast(i);
+ // Listen for broadcasts related to user-presence
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_SCREEN_OFF);
+ filter.addAction(Intent.ACTION_USER_PRESENT);
+ filter.addAction(Intent.ACTION_SHUTDOWN);
+ mContext.registerReceiver(mReceiver, filter);
+
if (savedInstance != null) { // this is a resumed activity
mVideoPosition = savedInstance.getInt(KEY_VIDEO_POSITION, 0);
mResumeableTime = savedInstance.getLong(KEY_RESUMEABLE_TIME, Long.MAX_VALUE);
- mVideoView.start();
- mVideoView.suspend();
+ onRestoreInstanceState(savedInstance);
mHasPaused = true;
+ doStartVideo(true, mVideoPosition, mVideoLastDuration,false);
+ mVideoView.start();
+ mActivityContext.initEffects(mVideoView.getAudioSessionId());
} else {
- final Integer bookmark = mBookmarker.getBookmark(mUri);
- if (bookmark != null) {
- showResumeDialog(movieActivity, bookmark);
+ mTState = TState.PLAYING;
+ mFirstBePlayed = true;
+ String mUri = mMovieItem.getUri().toString();
+ boolean isLive = mUri.startsWith("rtsp://") && (mUri.contains(".sdp")
+ || mUri.contains(".smil"));
+ if (!isLive) {
+ final BookmarkerInfo bookmark = mBookmarker.getBookmark(mMovieItem.getUri());
+ if (bookmark != null) {
+ showResumeDialog(movieActivity, bookmark);
+ } else {
+ doStartVideo(false, 0, 0);
+ }
} else {
- startVideo();
+ doStartVideo(false, 0, 0);
}
}
+ mScreenModeExt.setScreenMode();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@@ -213,11 +342,17 @@ public class MoviePlayer implements
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
+ boolean finish = (mActivityContext == null ? true : mActivityContext.isFinishing());
int diff = mLastSystemUiVis ^ visibility;
mLastSystemUiVis = visibility;
if ((diff & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0
&& (visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
mController.show();
+ mRootView.setBackgroundColor(Color.BLACK);
+ }
+
+ if (LOG) {
+ Log.v(TAG, "onSystemUiVisibilityChange(" + visibility + ") finishing()=" + finish);
}
}
});
@@ -242,14 +377,15 @@ public class MoviePlayer implements
public void onSaveInstanceState(Bundle outState) {
outState.putInt(KEY_VIDEO_POSITION, mVideoPosition);
outState.putLong(KEY_RESUMEABLE_TIME, mResumeableTime);
+ onSaveInstanceStateMore(outState);
}
- private void showResumeDialog(Context context, final int bookmark) {
+ private void showResumeDialog(Context context, final BookmarkerInfo bookmark) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.resume_playing_title);
builder.setMessage(String.format(
context.getString(R.string.resume_playing_message),
- GalleryUtils.formatDuration(context, bookmark / 1000)));
+ GalleryUtils.formatDuration(context, bookmark.mBookmark / 1000)));
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
@@ -260,42 +396,157 @@ public class MoviePlayer implements
R.string.resume_playing_resume, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mVideoView.seekTo(bookmark);
- startVideo();
+ // here try to seek for bookmark
+ mVideoCanSeek = true;
+ doStartVideo(true, bookmark.mBookmark, bookmark.mDuration);
}
});
builder.setNegativeButton(
R.string.resume_playing_restart, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- startVideo();
+ doStartVideo(true, 0, bookmark.mDuration);
+ }
+ });
+ AlertDialog dialog = builder.create();
+ dialog.setOnShowListener(new OnShowListener() {
+ @Override
+ public void onShow(DialogInterface arg0) {
+ mIsShowResumingDialog = true;
}
});
- builder.show();
+ dialog.setOnDismissListener(new OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface arg0) {
+ mIsShowResumingDialog = false;
+ }
+ });
+ dialog.show();
+ }
+
+ public void setDefaultScreenMode() {
+ addBackground();
+ mController.setDefaultScreenMode();
+ removeBackground();
+ }
+
+ public boolean onPause() {
+ if (LOG) {
+ Log.v(TAG, "onPause() isLiveStreaming()=" + isLiveStreaming());
+ }
+ boolean pause = false;
+ if (isLiveStreaming()) {
+ pause = false;
+ } else {
+ doOnPause();
+ pause = true;
+ }
+ if (LOG) {
+ Log.v(TAG, "onPause() , return " + pause);
+ }
+ return pause;
}
- public void onPause() {
+ // we should stop video anyway after this function called.
+ public void onStop() {
+ if (LOG) {
+ Log.v(TAG, "onStop() mHasPaused=" + mHasPaused);
+ }
+ if (!mHasPaused) {
+ doOnPause();
+ }
+ }
+
+ private void doOnPause() {
+ long start = System.currentTimeMillis();
+ addBackground();
mHasPaused = true;
mHandler.removeCallbacksAndMessages(null);
- mVideoPosition = mVideoView.getCurrentPosition();
- mBookmarker.setBookmark(mUri, mVideoPosition, mVideoView.getDuration());
+ int position = mVideoView.getCurrentPosition();
+ mVideoPosition = position >= 0 ? position : mVideoPosition;
+ Log.v(TAG, "mVideoPosition is " + mVideoPosition);
+ int duration = mVideoView.getDuration();
+ mVideoLastDuration = duration > 0 ? duration : mVideoLastDuration;
+ mBookmarker.setBookmark(mMovieItem.getUri(), mVideoPosition, mVideoLastDuration);
+ long end1 = System.currentTimeMillis();
mVideoView.suspend();
mResumeableTime = System.currentTimeMillis() + RESUMEABLE_TIMEOUT;
+ mVideoView.setResumed(false);// avoid start after surface created
+ long end2 = System.currentTimeMillis();
+ // TODO comments by sunlei
+ mOverlayExt.clearBuffering();
+ mServerTimeoutExt.recordDisconnectTime();
+ if (LOG) {
+ Log.v(TAG, "doOnPause() save video info consume:" + (end1 - start));
+ Log.v(TAG, "doOnPause() suspend video consume:" + (end2 - end1));
+ Log.v(TAG, "doOnPause() mVideoPosition=" + mVideoPosition + ", mResumeableTime="
+ + mResumeableTime
+ + ", mVideoLastDuration=" + mVideoLastDuration + ", mIsShowResumingDialog="
+ + mIsShowResumingDialog);
+ }
}
public void onResume() {
+ mDragging = false;// clear drag info
if (mHasPaused) {
- mVideoView.seekTo(mVideoPosition);
- mVideoView.resume();
+ //M: same as launch case to delay transparent.
+ mVideoView.removeCallbacks(mDelayVideoRunnable);
+ mVideoView.postDelayed(mDelayVideoRunnable, BLACK_TIMEOUT);
- // If we have slept for too long, pause the play
- if (System.currentTimeMillis() > mResumeableTime) {
- pauseVideo();
+ if (mServerTimeoutExt.handleOnResume() || mIsShowResumingDialog) {
+ mHasPaused = false;
+ return;
+ }
+ switch (mTState) {
+ case RETRY_ERROR:
+ mRetryExt.showRetry();
+ break;
+ case STOPED:
+ mPlayerExt.stopVideo();
+ break;
+ case COMPELTED:
+ mController.showEnded();
+ if (mVideoCanSeek || mVideoView.canSeekForward()) {
+ mVideoView.seekTo(mVideoPosition);
+ }
+ mVideoView.setDuration(mVideoLastDuration);
+ break;
+ case PAUSED:
+ // if video was paused, so it should be started.
+ doStartVideo(true, mVideoPosition, mVideoLastDuration, false);
+ pauseVideo();
+ break;
+ default:
+ mVideoView.seekTo(mVideoPosition);
+ mVideoView.resume();
+ pauseVideoMoreThanThreeMinutes();
+ break;
}
+ mHasPaused = false;
+ }
+
+ if (System.currentTimeMillis() > mResumeableTime) {
+ mHandler.removeCallbacks(mPlayingChecker);
+ mHandler.postDelayed(mPlayingChecker, 250);
}
+
mHandler.post(mProgressChecker);
}
+ private void pauseVideoMoreThanThreeMinutes() {
+ // If we have slept for too long, pause the play
+ // If is live streaming, do not pause it too
+ long now = System.currentTimeMillis();
+ if (now > mResumeableTime && !isLiveStreaming()) {
+ if (mVideoCanPause || mVideoView.canPause()) {
+ pauseVideo();
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "pauseVideoMoreThanThreeMinutes() now=" + now);
+ }
+ }
+
public void onDestroy() {
if (mVirtualizer != null) {
mVirtualizer.release();
@@ -303,27 +554,36 @@ public class MoviePlayer implements
}
mVideoView.stopPlayback();
mAudioBecomingNoisyReceiver.unregister();
+ mContext.unregisterReceiver(mReceiver);
+ mServerTimeoutExt.clearTimeoutDialog();
}
// This updates the time bar display (if necessary). It is called every
// second by mProgressChecker and also from places where the time bar needs
// to be updated immediately.
private int setProgress() {
- if (mDragging || !mShowing) {
+ if (mDragging || (!mShowing && !mIsOnlyAudio)) {
return 0;
}
int position = mVideoView.getCurrentPosition();
int duration = mVideoView.getDuration();
mController.setTimes(position, duration, 0, 0);
+ if (mControllerRewindAndForwardExt != null
+ && mControllerRewindAndForwardExt.getPlayPauseEanbled()) {
+ updateRewindAndForwardUI();
+ }
return position;
}
- private void startVideo() {
+ private void doStartVideo(final boolean enableFasten, final int position, final int duration,
+ boolean start) {
// For streams that we expect to be slow to start up, show a
// progress spinner until playback starts.
- String scheme = mUri.getScheme();
- if ("http".equalsIgnoreCase(scheme) || "rtsp".equalsIgnoreCase(scheme)) {
+ String scheme = mMovieItem.getUri().getScheme();
+ if ("http".equalsIgnoreCase(scheme) || "rtsp".equalsIgnoreCase(scheme)
+ || "https".equalsIgnoreCase(scheme)) {
mController.showLoading();
+ mOverlayExt.setPlayingInfo(isLiveStreaming());
mHandler.removeCallbacks(mPlayingChecker);
mHandler.postDelayed(mPlayingChecker, 250);
} else {
@@ -331,35 +591,94 @@ public class MoviePlayer implements
mController.hide();
}
- mVideoView.start();
+ if (onIsRTSP()) {
+ Map<String, String> header = new HashMap<String, String>(1);
+ header.put("CODEAURORA-ASYNC-RTSP-PAUSE-PLAY", "true");
+ mVideoView.setVideoURI(mMovieItem.getUri(), header, !mWaitMetaData);
+ } else {
+ mVideoView.setVideoURI(mMovieItem.getUri(), null, !mWaitMetaData);
+ }
+ if (start) {
+ mVideoView.start();
+ mVideoView.setVisibility(View.VISIBLE);
+ mActivityContext.initEffects(mVideoView.getAudioSessionId());
+ }
+ //we may start video from stopVideo,
+ //this case, we should reset canReplay flag according canReplay and loop
+ boolean loop = mPlayerExt.getLoop();
+ boolean canReplay = loop ? loop : mCanReplay;
+ mController.setCanReplay(canReplay);
+ if (position > 0 && (mVideoCanSeek || mVideoView.canSeek())) {
+ mVideoView.seekTo(position);
+ }
+ if (enableFasten) {
+ mVideoView.setDuration(duration);
+ }
setProgress();
}
+ private void doStartVideo(boolean enableFasten, int position, int duration) {
+ doStartVideo(enableFasten, position, duration, true);
+ }
+
private void playVideo() {
+ if (LOG) {
+ Log.v(TAG, "playVideo()");
+ }
+ mTState = TState.PLAYING;
mVideoView.start();
mController.showPlaying();
setProgress();
}
private void pauseVideo() {
+ if (LOG) {
+ Log.v(TAG, "pauseVideo()");
+ }
+ mTState = TState.PAUSED;
mVideoView.pause();
+ setProgress();
mController.showPaused();
}
// Below are notifications from VideoView
@Override
public boolean onError(MediaPlayer player, int arg1, int arg2) {
+ mMovieItem.setError();
+ if (mServerTimeoutExt.onError(player, arg1, arg2)) {
+ return true;
+ }
+ if (mRetryExt.onError(player, arg1, arg2)) {
+ return true;
+ }
mHandler.removeCallbacksAndMessages(null);
// VideoView will show an error dialog if we return false, so no need
// to show more message.
+ //M:resume controller
+ mController.setViewEnabled(true);
mController.showErrorMessage("");
return false;
}
@Override
public void onCompletion(MediaPlayer mp) {
- mController.showEnded();
- onCompletion();
+ if (LOG) {
+ Log.v(TAG, "onCompletion() mCanReplay=" + mCanReplay);
+ }
+ if (mMovieItem.getError()) {
+ Log.w(TAG, "error occured, exit the video player!");
+ mActivityContext.finish();
+ return;
+ }
+ if (mPlayerExt.getLoop()) {
+ onReplay();
+ } else { //original logic
+ mTState = TState.COMPELTED;
+ if (mCanReplay) {
+ mController.showEnded();
+ }
+ onCompletion();
+ }
}
public void onCompletion() {
@@ -369,9 +688,23 @@ public class MoviePlayer implements
@Override
public void onPlayPause() {
if (mVideoView.isPlaying()) {
- pauseVideo();
+ if (mVideoView.canPause()) {
+ pauseVideo();
+ //set view disabled(play/pause asynchronous processing)
+ mController.setViewEnabled(true);
+ if (mControllerRewindAndForwardExt != null) {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(), false, false);
+ }
+ }
} else {
playVideo();
+ //set view disabled(play/pause asynchronous processing)
+ mController.setViewEnabled(true);
+ if (mControllerRewindAndForwardExt != null) {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(), false, false);
+ }
}
}
@@ -382,18 +715,27 @@ public class MoviePlayer implements
@Override
public void onSeekMove(int time) {
- mVideoView.seekTo(time);
+ if (mVideoView.canSeek()) {
+ mVideoView.seekTo(time);
+ }
}
@Override
public void onSeekEnd(int time, int start, int end) {
mDragging = false;
- mVideoView.seekTo(time);
+ if (mVideoView.canSeek()) {
+ mVideoView.seekTo(time);
+ }
+ }
+
+ @Override
+ public void onSeekComplete(MediaPlayer mp) {
setProgress();
}
@Override
public void onShown() {
+ addBackground();
mShowing = true;
setProgress();
showSystemUi(true);
@@ -403,11 +745,82 @@ public class MoviePlayer implements
public void onHidden() {
mShowing = false;
showSystemUi(false);
+ removeBackground();
+ }
+
+ @Override
+ public boolean onInfo(MediaPlayer mp, int what, int extra) {
+ if (LOG) {
+ Log.v(TAG, "onInfo() what:" + what + " extra:" + extra);
+ }
+ if (what == MediaPlayer.MEDIA_INFO_NOT_SEEKABLE && mOverlayExt != null) {
+ boolean flag = (extra == 1);
+ mOverlayExt.setCanPause(flag);
+ mOverlayExt.setCanScrubbing(flag);
+ } else if (what == MediaPlayer.MEDIA_INFO_METADATA_UPDATE && mServerTimeoutExt != null) {
+ Log.e(TAG, "setServerTimeout " + extra);
+ mServerTimeoutExt.setTimeout(extra * 1000);
+ }
+ if (mRetryExt.onInfo(mp, what, extra)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onBufferingUpdate(MediaPlayer mp, int percent) {
+ boolean fullBuffer = isFullBuffer();
+ mOverlayExt.showBuffering(fullBuffer, percent);
+ }
+
+ @Override
+ public void onPrepared(MediaPlayer mp) {
+ if (LOG) {
+ Log.v(TAG, "onPrepared(" + mp + ")");
+ }
+ if (!isLocalFile()) {
+ mOverlayExt.setPlayingInfo(isLiveStreaming());
+ }
+ getVideoInfo(mp);
+ boolean canPause = mVideoView.canPause();
+ boolean canSeek = mVideoView.canSeek();
+ mOverlayExt.setCanPause(canPause);
+ mOverlayExt.setCanScrubbing(canSeek);
+ mController.setPlayPauseReplayResume();
+ if (!canPause && !mVideoView.isTargetPlaying()) {
+ mVideoView.start();
+ }
+ updateRewindAndForwardUI();
+ if (LOG) {
+ Log.v(TAG, "onPrepared() canPause=" + canPause + ", canSeek=" + canSeek);
+ }
+ }
+
+ public boolean onIsRTSP() {
+ if (MovieUtils.isRtspStreaming(mMovieItem.getUri(), mMovieItem
+ .getMimeType())) {
+ if (LOG) {
+ Log.v(TAG, "onIsRTSP() is RTSP");
+ }
+ return true;
+ }
+ if (LOG) {
+ Log.v(TAG, "onIsRTSP() is not RTSP");
+ }
+ return false;
}
@Override
public void onReplay() {
- startVideo();
+ if (LOG) {
+ Log.v(TAG, "onReplay()");
+ }
+ mTState = TState.PLAYING;
+ mFirstBePlayed = true;
+ if (mRetryExt.handleOnReplay()) {
+ return;
+ }
+ doStartVideo(false, 0, 0);
}
// Below are key events passed from MovieActivity.
@@ -421,14 +834,14 @@ public class MoviePlayer implements
switch (keyCode) {
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- if (mVideoView.isPlaying()) {
+ if (mVideoView.isPlaying() && mVideoView.canPause()) {
pauseVideo();
} else {
playVideo();
}
return true;
case KEYCODE_MEDIA_PAUSE:
- if (mVideoView.isPlaying()) {
+ if (mVideoView.isPlaying() && mVideoView.canPause()) {
pauseVideo();
}
return true;
@@ -450,6 +863,21 @@ public class MoviePlayer implements
return isMediaKey(keyCode);
}
+ public void updateRewindAndForwardUI() {
+ if (LOG) {
+ Log.v(TAG, "updateRewindAndForwardUI");
+ Log.v(TAG, "updateRewindAndForwardUI== getCurrentPosition = " + mVideoView.getCurrentPosition());
+ Log.v(TAG, "updateRewindAndForwardUI==getDuration =" + mVideoView.getDuration());
+ }
+ if (mControllerRewindAndForwardExt != null) {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(), mVideoView.canSeekBackward()
+ && mControllerRewindAndForwardExt.getTimeBarEanbled(), mVideoView
+ .canSeekForward()
+ && mControllerRewindAndForwardExt.getTimeBarEanbled());
+ }
+ }
+
private static boolean isMediaKey(int keyCode) {
return keyCode == KeyEvent.KEYCODE_HEADSETHOOK
|| keyCode == KeyEvent.KEYCODE_MEDIA_PREVIOUS
@@ -459,6 +887,30 @@ public class MoviePlayer implements
|| keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE;
}
+ private void init(MovieActivity movieActivity, IMovieItem info, boolean canReplay) {
+ mActivityContext = movieActivity;
+ mCanReplay = canReplay;
+ mMovieItem = info;
+ judgeStreamingType(info.getUri(), info.getMimeType());
+
+ mVideoView.setOnInfoListener(this);
+ mVideoView.setOnPreparedListener(this);
+ mVideoView.setOnBufferingUpdateListener(this);
+ mVideoView.setOnVideoSizeChangedListener(this);
+ mRootView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ mController.show();
+ return true;
+ }
+ });
+ mOverlayExt = mController.getOverlayExt();
+ mControllerRewindAndForwardExt = mController.getControllerRewindAndForwardExt();
+ if (mControllerRewindAndForwardExt != null) {
+ mControllerRewindAndForwardExt.setIListener(mRewindAndForwardListener);
+ }
+ }
+
// We want to pause when the headset is unplugged.
private class AudioBecomingNoisyReceiver extends BroadcastReceiver {
@@ -473,7 +925,691 @@ public class MoviePlayer implements
@Override
public void onReceive(Context context, Intent intent) {
- if (mVideoView.isPlaying()) pauseVideo();
+ if (mVideoView.isPlaying() && mVideoView.canPause()) pauseVideo();
+ }
+ }
+
+ public int getAudioSessionId() {
+ return mVideoView.getAudioSessionId();
+ }
+
+ public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener) {
+ mVideoView.setOnPreparedListener(listener);
+ }
+
+ public boolean isFullBuffer() {
+ if (mStreamingType == STREAMING_RTSP || mStreamingType == STREAMING_SDP) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isLocalFile() {
+ if (mStreamingType == STREAMING_LOCAL) {
+ return true;
+ }
+ return false;
+ }
+
+ private void getVideoInfo(MediaPlayer mp) {
+ if (!MovieUtils.isLocalFile(mMovieItem.getUri(), mMovieItem.getMimeType())) {
+ Metadata data = mp.getMetadata(MediaPlayer.METADATA_ALL,
+ MediaPlayer.BYPASS_METADATA_FILTER);
+ if (data != null) {
+ // TODO comments by sunlei
+ mServerTimeoutExt.setVideoInfo(data);
+ } else {
+ Log.w(TAG, "Metadata is null!");
+ }
+ }
+ }
+
+ private void judgeStreamingType(Uri uri, String mimeType) {
+ if (LOG) {
+ Log.v(TAG, "judgeStreamingType(" + uri + ")");
+ }
+ if (uri == null) {
+ return;
+ }
+ String scheme = uri.getScheme();
+ mWaitMetaData = true;
+ if (MovieUtils.isSdpStreaming(uri, mimeType)) {
+ mStreamingType = STREAMING_SDP;
+ mWaitMetaData = false;
+ } else if (MovieUtils.isRtspStreaming(uri, mimeType)) {
+ mStreamingType = STREAMING_RTSP;
+ mWaitMetaData = false;
+ } else if (MovieUtils.isHttpStreaming(uri, mimeType)) {
+ mStreamingType = STREAMING_HTTP;
+ mWaitMetaData = false;
+ } else {
+ mStreamingType = STREAMING_LOCAL;
+ mWaitMetaData = false;
+ }
+ if (LOG) {
+ Log.v(TAG, "mStreamingType=" + mStreamingType
+ + " mCanGetMetaData=" + mWaitMetaData);
+ }
+ }
+
+ public boolean isLiveStreaming() {
+ boolean isLive = false;
+ if (mStreamingType == STREAMING_SDP) {
+ isLive = true;
+ }
+ if (LOG) {
+ Log.v(TAG, "isLiveStreaming() return " + isLive);
+ }
+ return isLive;
+ }
+
+ public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
+ // reget the audio type
+ if (width != 0 && height != 0) {
+ mIsOnlyAudio = false;
+ } else {
+ mIsOnlyAudio = true;
+ }
+ mOverlayExt.setBottomPanel(mIsOnlyAudio, true);
+ if (LOG) {
+ Log.v(TAG, "onVideoSizeChanged(" + width + ", " + height + ") mIsOnlyAudio="
+ + mIsOnlyAudio);
+ }
+ }
+
+ public IMoviePlayer getMoviePlayerExt() {
+ return mPlayerExt;
+ }
+
+ public SurfaceView getVideoSurface() {
+ return mVideoView;
+ }
+
+ // Wait for any animation, ten seconds should be enough
+ private final Runnable mRemoveBackground = new Runnable() {
+ @Override
+ public void run() {
+ if (LOG) {
+ Log.v(TAG, "mRemoveBackground.run()");
+ }
+ mRootView.setBackground(null);
+ }
+ };
+
+ private void removeBackground() {
+ if (LOG) {
+ Log.v(TAG, "removeBackground()");
+ }
+ mHandler.removeCallbacks(mRemoveBackground);
+ mHandler.postDelayed(mRemoveBackground, DELAY_REMOVE_MS);
+ }
+
+ // add background for removing ghost image.
+ private void addBackground() {
+ if (LOG) {
+ Log.v(TAG, "addBackground()");
+ }
+ mHandler.removeCallbacks(mRemoveBackground);
+ mRootView.setBackgroundColor(Color.BLACK);
+ }
+
+ private void clearVideoInfo() {
+ mVideoPosition = 0;
+ mVideoLastDuration = 0;
+ mIsOnlyAudio = false;
+
+ if (mServerTimeoutExt != null) {
+ mServerTimeoutExt.clearServerInfo();
+ }
+ }
+
+ private void onSaveInstanceStateMore(Bundle outState) {
+ outState.putInt(KEY_VIDEO_LAST_DURATION, mVideoLastDuration);
+ outState.putBoolean(KEY_VIDEO_CAN_SEEK, mVideoView.canSeekForward());
+ outState.putBoolean(KEY_VIDEO_CAN_PAUSE, mVideoView.canPause());
+ outState.putInt(KEY_VIDEO_STREAMING_TYPE, mStreamingType);
+ outState.putString(KEY_VIDEO_STATE, String.valueOf(mTState));
+ mServerTimeoutExt.onSaveInstanceState(outState);
+ mScreenModeExt.onSaveInstanceState(outState);
+ mRetryExt.onSaveInstanceState(outState);
+ mPlayerExt.onSaveInstanceState(outState);
+ }
+
+ private void onRestoreInstanceState(Bundle icicle) {
+ mVideoLastDuration = icicle.getInt(KEY_VIDEO_LAST_DURATION);
+ mVideoCanSeek = icicle.getBoolean(KEY_VIDEO_CAN_SEEK);
+ mVideoCanPause = icicle.getBoolean(KEY_VIDEO_CAN_PAUSE);
+ mStreamingType = icicle.getInt(KEY_VIDEO_STREAMING_TYPE);
+ mTState = TState.valueOf(icicle.getString(KEY_VIDEO_STATE));
+ mServerTimeoutExt.onRestoreInstanceState(icicle);
+ mScreenModeExt.onRestoreInstanceState(icicle);
+ mRetryExt.onRestoreInstanceState(icicle);
+ mPlayerExt.onRestoreInstanceState(icicle);
+ }
+
+ private class MoviePlayerExtension implements IMoviePlayer, Restorable {
+
+ private static final String KEY_VIDEO_IS_LOOP = "video_is_loop";
+
+ private BookmarkEnhance mBookmark;//for bookmark
+ private boolean mIsLoop;
+ private boolean mLastPlaying;
+ private boolean mLastCanPaused;
+
+ @Override
+ public boolean getLoop() {
+ return mIsLoop;
+ }
+
+ @Override
+ public void setLoop(boolean loop) {
+ if (isLocalFile()) {
+ mIsLoop = loop;
+ mController.setCanReplay(loop);
+ }
+ }
+
+ @Override
+ public void startNextVideo(IMovieItem item) {
+ IMovieItem next = item;
+ if (next != null && next != mMovieItem) {
+ int position = mVideoView.getCurrentPosition();
+ int duration = mVideoView.getDuration();
+ mBookmarker.setBookmark(mMovieItem.getUri(), position, duration);
+ mVideoView.stopPlayback();
+ mVideoView.setVisibility(View.INVISIBLE);
+ clearVideoInfo();
+ mActivityContext.releaseEffects();
+ mMovieItem = next;
+ mActivityContext.refreshMovieInfo(mMovieItem);
+ doStartVideo(false, 0, 0);
+ mVideoView.setVisibility(View.VISIBLE);
+ } else {
+ Log.e(TAG, "Cannot play the next video! " + item);
+ }
+ mActivityContext.closeOptionsMenu();
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle icicle) {
+ mIsLoop = icicle.getBoolean(KEY_VIDEO_IS_LOOP, false);
+ if (mIsLoop) {
+ mController.setCanReplay(true);
+ } // else will get can replay from intent.
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putBoolean(KEY_VIDEO_IS_LOOP, mIsLoop);
+ }
+
+ @Override
+ public void stopVideo() {
+ if (LOG) {
+ Log.v(TAG, "stopVideo()");
+ }
+ mTState = TState.STOPED;
+ mVideoView.clearSeek();
+ mVideoView.clearDuration();
+ mVideoView.stopPlayback();
+ mVideoView.setResumed(false);
+ mVideoView.setVisibility(View.INVISIBLE);
+ clearVideoInfo();
+ mActivityContext.releaseEffects();
+ mFirstBePlayed = false;
+ mController.setCanReplay(true);
+ mController.showEnded();
+ mController.setViewEnabled(true);
+ setProgress();
+ }
+
+ @Override
+ public boolean canStop() {
+ boolean stopped = false;
+ if (mController != null) {
+ stopped = mOverlayExt.isPlayingEnd();
+ }
+ if (LOG) {
+ Log.v(TAG, "canStop() stopped=" + stopped);
+ }
+ return !stopped;
+ }
+
+ @Override
+ public void addBookmark() {
+ if (mBookmark == null) {
+ mBookmark = new BookmarkEnhance(mActivityContext);
+ }
+ String uri = String.valueOf(mMovieItem.getUri());
+ if (mBookmark.exists(uri)) {
+ Toast.makeText(mActivityContext, R.string.bookmark_exist, Toast.LENGTH_SHORT)
+ .show();
+ } else {
+ mBookmark.insert(mMovieItem.getTitle(), uri,
+ mMovieItem.getMimeType(), 0);
+ Toast.makeText(mActivityContext, R.string.bookmark_add_success, Toast.LENGTH_SHORT)
+ .show();
+ }
+ }
+ };
+
+ private class RetryExtension implements Restorable, MediaPlayer.OnErrorListener,
+ MediaPlayer.OnInfoListener {
+ private static final String KEY_VIDEO_RETRY_COUNT = "video_retry_count";
+ private int mRetryDuration;
+ private int mRetryPosition;
+ private int mRetryCount;
+
+ public void retry() {
+ doStartVideo(true, mRetryPosition, mRetryDuration);
+ if (LOG) {
+ Log.v(TAG, "retry() mRetryCount=" + mRetryCount + ", mRetryPosition="
+ + mRetryPosition);
+ }
+ }
+
+ public void clearRetry() {
+ if (LOG) {
+ Log.v(TAG, "clearRetry() mRetryCount=" + mRetryCount);
+ }
+ mRetryCount = 0;
+ }
+
+ public boolean reachRetryCount() {
+ if (LOG) {
+ Log.v(TAG, "reachRetryCount() mRetryCount=" + mRetryCount);
+ }
+ if (mRetryCount > 3) {
+ return true;
+ }
+ return false;
+ }
+
+ public int getRetryCount() {
+ if (LOG) {
+ Log.v(TAG, "getRetryCount() return " + mRetryCount);
+ }
+ return mRetryCount;
+ }
+
+ public boolean isRetrying() {
+ boolean retry = false;
+ if (mRetryCount > 0) {
+ retry = true;
+ }
+ if (LOG) {
+ Log.v(TAG, "isRetrying() mRetryCount=" + mRetryCount);
+ }
+ return retry;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle icicle) {
+ mRetryCount = icicle.getInt(KEY_VIDEO_RETRY_COUNT);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putInt(KEY_VIDEO_RETRY_COUNT, mRetryCount);
+ }
+
+ @Override
+ public boolean onError(MediaPlayer mp, int what, int extra) {
+ return false;
+ }
+
+ @Override
+ public boolean onInfo(MediaPlayer mp, int what, int extra) {
+ return false;
+ }
+
+ public boolean handleOnReplay() {
+ if (isRetrying()) { // from connecting error
+ clearRetry();
+ int errorPosition = mVideoView.getCurrentPosition();
+ int errorDuration = mVideoView.getDuration();
+ doStartVideo(errorPosition > 0, errorPosition, errorDuration);
+ if (LOG) {
+ Log.v(TAG, "onReplay() errorPosition=" + errorPosition + ", errorDuration="
+ + errorDuration);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void showRetry() {
+ if (mVideoCanSeek || mVideoView.canSeekForward()) {
+ mVideoView.seekTo(mVideoPosition);
+ }
+ mVideoView.setDuration(mVideoLastDuration);
+ mRetryPosition = mVideoPosition;
+ mRetryDuration = mVideoLastDuration;
+ }
+ }
+ private class ServerTimeoutExtension implements Restorable, MediaPlayer.OnErrorListener {
+ // for cmcc server timeout case
+ // please remember to clear this value when changed video.
+ private int mServerTimeout = -1;
+ private long mLastDisconnectTime;
+ private boolean mIsShowDialog = false;
+ private AlertDialog mServerTimeoutDialog;
+ private int RESUME_DIALOG_TIMEOUT = 3 * 60 * 1000; // 3 mins
+
+ // check whether disconnect from server timeout or not.
+ // if timeout, return false. otherwise, return true.
+ private boolean passDisconnectCheck() {
+ if (!isFullBuffer()) {
+ // record the time disconnect from server
+ long now = System.currentTimeMillis();
+ if (LOG) {
+ Log.v(TAG, "passDisconnectCheck() now=" + now + ", mLastDisconnectTime="
+ + mLastDisconnectTime
+ + ", mServerTimeout=" + mServerTimeout);
+ }
+ if (mServerTimeout > 0 && (now - mLastDisconnectTime) > mServerTimeout) {
+ // disconnect time more than server timeout, notify user
+ notifyServerTimeout();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void recordDisconnectTime() {
+ if (!isFullBuffer()) {
+ // record the time disconnect from server
+ mLastDisconnectTime = System.currentTimeMillis();
+ }
+ if (LOG) {
+ Log.v(TAG, "recordDisconnectTime() mLastDisconnectTime=" + mLastDisconnectTime);
+ }
+ }
+
+ private void clearServerInfo() {
+ mServerTimeout = -1;
+ }
+
+ private void notifyServerTimeout() {
+ if (mServerTimeoutDialog == null) {
+ // for updating last position and duration.
+ if (mVideoCanSeek || mVideoView.canSeekForward()) {
+ mVideoView.seekTo(mVideoPosition);
+ }
+ mVideoView.setDuration(mVideoLastDuration);
+ AlertDialog.Builder builder = new AlertDialog.Builder(mActivityContext);
+ mServerTimeoutDialog = builder.setTitle(R.string.server_timeout_title)
+ .setMessage(R.string.server_timeout_message)
+ .setNegativeButton(android.R.string.cancel, new OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int which) {
+ if (LOG) {
+ Log.v(TAG, "NegativeButton.onClick() mIsShowDialog="
+ + mIsShowDialog);
+ }
+ mController.showEnded();
+ onCompletion();
+ }
+
+ })
+ .setPositiveButton(R.string.resume_playing_resume, new OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int which) {
+ if (LOG) {
+ Log.v(TAG, "PositiveButton.onClick() mIsShowDialog="
+ + mIsShowDialog);
+ }
+ doStartVideo(true, mVideoPosition, mVideoLastDuration);
+ }
+
+ })
+ .setOnCancelListener(new OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ mController.showEnded();
+ onCompletion();
+ }
+ })
+ .create();
+ mServerTimeoutDialog.setOnDismissListener(new OnDismissListener() {
+
+ public void onDismiss(DialogInterface dialog) {
+ if (LOG) {
+ Log.v(TAG, "mServerTimeoutDialog.onDismiss()");
+ }
+ mVideoView.setDialogShowState(false);
+ mIsShowDialog = false;
+ }
+
+ });
+ mServerTimeoutDialog.setOnShowListener(new OnShowListener() {
+
+ public void onShow(DialogInterface dialog) {
+ if (LOG) {
+ Log.v(TAG, "mServerTimeoutDialog.onShow()");
+ }
+ mVideoView.setDialogShowState(true);
+ mIsShowDialog = true;
+ }
+
+ });
+ }
+ mServerTimeoutDialog.show();
+ }
+
+ private void clearTimeoutDialog() {
+ if (mServerTimeoutDialog != null && mServerTimeoutDialog.isShowing()) {
+ mServerTimeoutDialog.dismiss();
+ }
+ mServerTimeoutDialog = null;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle icicle) {
+ mLastDisconnectTime = icicle.getLong(KEY_VIDEO_LAST_DISCONNECT_TIME);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putLong(KEY_VIDEO_LAST_DISCONNECT_TIME, mLastDisconnectTime);
+ }
+
+ public boolean handleOnResume() {
+ if (mIsShowDialog && !isLiveStreaming()) {
+ // wait for user's operation
+ return true;
+ }
+ if (!passDisconnectCheck()) {
+ return true;
+ }
+ return false;
+ }
+
+ public void setVideoInfo(Metadata data) {
+ mServerTimeout = RESUME_DIALOG_TIMEOUT;
+ if (data.has(SERVER_TIMEOUT)) {
+ mServerTimeout = data.getInt(SERVER_TIMEOUT);
+ if (mServerTimeout == 0) {
+ mServerTimeout = RESUME_DIALOG_TIMEOUT;
+ }
+ if (LOG) {
+ Log.v(TAG, "get server timeout from metadata. mServerTimeout="
+ + mServerTimeout);
+ }
+ }
+ }
+
+ @Override
+ public boolean onError(MediaPlayer mp, int what, int extra) {
+ // if we are showing a dialog, cancel the error dialog
+ if (mIsShowDialog) {
+ return true;
+ }
+ return false;
+ }
+
+ public void setTimeout(int timeout) {
+ mServerTimeout = timeout;
+ }
+ }
+
+ private class ScreenModeExt implements Restorable, ScreenModeListener {
+ private static final String KEY_VIDEO_SCREEN_MODE = "video_screen_mode";
+ private int mScreenMode = ScreenModeManager.SCREENMODE_BIGSCREEN;
+ private ScreenModeManager mScreenModeManager = new ScreenModeManager();
+
+ public void setScreenMode() {
+ mVideoView.setScreenModeManager(mScreenModeManager);
+ mController.setScreenModeManager(mScreenModeManager);
+ mScreenModeManager.addListener(this);
+ //notify all listener to change screen mode
+ mScreenModeManager.setScreenMode(mScreenMode);
+ if (LOG) {
+ Log.v(TAG, "setScreenMode() mScreenMode=" + mScreenMode);
+ }
+ }
+
+ @Override
+ public void onScreenModeChanged(int newMode) {
+ mScreenMode = newMode;// changed from controller
+ if (LOG) {
+ Log.v(TAG, "OnScreenModeClicked(" + newMode + ")");
+ }
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle icicle) {
+ mScreenMode = icicle.getInt(KEY_VIDEO_SCREEN_MODE,
+ ScreenModeManager.SCREENMODE_BIGSCREEN);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putInt(KEY_VIDEO_SCREEN_MODE, mScreenMode);
+ }
+ }
+
+ private class ControllerRewindAndForwardExt implements IRewindAndForwardListener {
+ @Override
+ public void onPlayPause() {
+ onPlayPause();
+ }
+
+ @Override
+ public void onSeekStart() {
+ onSeekStart();
+ }
+
+ @Override
+ public void onSeekMove(int time) {
+ onSeekMove(time);
+ }
+
+ @Override
+ public void onSeekEnd(int time, int trimStartTime, int trimEndTime) {
+ onSeekEnd(time, trimStartTime, trimEndTime);
+ }
+
+ @Override
+ public void onShown() {
+ onShown();
+ }
+
+ @Override
+ public void onHidden() {
+ onHidden();
+ }
+
+ @Override
+ public void onReplay() {
+ onReplay();
+ }
+
+ @Override
+ public boolean onIsRTSP() {
+ return false;
+ }
+
+ @Override
+ public void onStopVideo() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onStopVideo()");
+ }
+ if (mPlayerExt.canStop()) {
+ mPlayerExt.stopVideo();
+ mControllerRewindAndForwardExt.showControllerButtonsView(false,
+ false, false);
+ }
+ }
+
+ @Override
+ public void onRewind() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onRewind()");
+ }
+ if (mVideoView != null && mVideoView.canSeekBackward()) {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(),
+ false, false);
+ int stepValue = getStepOptionValue();
+ int targetDuration = mVideoView.getCurrentPosition()
+ - stepValue < 0 ? 0 : mVideoView.getCurrentPosition()
+ - stepValue;
+ if (LOG) {
+ Log.v(TAG, "onRewind targetDuration " + targetDuration);
+ }
+ mVideoView.seekTo(targetDuration);
+ } else {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(),
+ false, false);
+ }
+ }
+
+ @Override
+ public void onForward() {
+ if (LOG) {
+ Log.v(TAG, "ControllerRewindAndForwardExt onForward()");
+ }
+ if (mVideoView != null && mVideoView.canSeekForward()) {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(),
+ false, false);
+ int stepValue = getStepOptionValue();
+ int targetDuration = mVideoView.getCurrentPosition()
+ + stepValue > mVideoView.getDuration() ? mVideoView
+ .getDuration() : mVideoView.getCurrentPosition()
+ + stepValue;
+ if (LOG) {
+ Log.v(TAG, "onForward targetDuration " + targetDuration);
+ }
+ mVideoView.seekTo(targetDuration);
+ } else {
+ mControllerRewindAndForwardExt.showControllerButtonsView(mPlayerExt
+ .canStop(),
+ false, false);
+ }
+ }
+ }
+
+ public int getStepOptionValue() {
+ final String slectedStepOption = "selected_step_option";
+ final String videoPlayerData = "video_player_data";
+ final int stepBase = 3000;
+ final int stepOptionThreeSeconds = 0;
+ SharedPreferences mPrefs = mContext.getSharedPreferences(
+ videoPlayerData, 0);
+ return (mPrefs.getInt(slectedStepOption, stepOptionThreeSeconds) + 1) * stepBase;
+ }
+
+ public void restartHidingController() {
+ if (mController != null) {
+ mController.maybeStartHiding();
+ }
+ }
+
+ public void cancelHidingController() {
+ if (mController != null) {
+ mController.cancelHiding();
}
}
}
@@ -497,6 +1633,10 @@ class Bookmarker {
public void setBookmark(Uri uri, int bookmark, int duration) {
try {
+ // do not record or override bookmark if duration is not valid.
+ if (duration <= 0) {
+ return;
+ }
BlobCache cache = CacheManager.getCache(mContext,
BOOKMARK_CACHE_FILE, BOOKMARK_CACHE_MAX_ENTRIES,
BOOKMARK_CACHE_MAX_BYTES, BOOKMARK_CACHE_VERSION);
@@ -505,7 +1645,7 @@ class Bookmarker {
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF(uri.toString());
dos.writeInt(bookmark);
- dos.writeInt(duration);
+ dos.writeInt(Math.abs(duration));
dos.flush();
cache.insert(uri.hashCode(), bos.toByteArray());
} catch (Throwable t) {
@@ -513,7 +1653,7 @@ class Bookmarker {
}
}
- public Integer getBookmark(Uri uri) {
+ public BookmarkerInfo getBookmark(Uri uri) {
try {
BlobCache cache = CacheManager.getCache(mContext,
BOOKMARK_CACHE_FILE, BOOKMARK_CACHE_MAX_ENTRIES,
@@ -537,10 +1677,31 @@ class Bookmarker {
|| (bookmark > (duration - HALF_MINUTE))) {
return null;
}
- return Integer.valueOf(bookmark);
+ return new BookmarkerInfo(bookmark, duration);
} catch (Throwable t) {
Log.w(TAG, "getBookmark failed", t);
}
return null;
}
}
+
+class BookmarkerInfo {
+ public final int mBookmark;
+ public final int mDuration;
+
+ public BookmarkerInfo(int bookmark, int duration) {
+ this.mBookmark = bookmark;
+ this.mDuration = duration;
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder()
+ .append("BookmarkInfo(bookmark=")
+ .append(mBookmark)
+ .append(", duration=")
+ .append(mDuration)
+ .append(")")
+ .toString();
+ }
+}
diff --git a/src/com/android/gallery3d/app/MuteVideo.java b/src/com/android/gallery3d/app/MuteVideo.java
index d3f3aa594..dd05397d2 100644..100755
--- a/src/com/android/gallery3d/app/MuteVideo.java
+++ b/src/com/android/gallery3d/app/MuteVideo.java
@@ -16,6 +16,8 @@
package com.android.gallery3d.app;
+import java.util.ArrayList;
+
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
@@ -40,6 +42,13 @@ public class MuteVideo {
private SaveVideoFileInfo mDstFileInfo = null;
private Activity mActivity = null;
private final Handler mHandler = new Handler();
+ private String mMimeType;
+ ArrayList<String> mUnsupportedMuteFileTypes = new ArrayList<String>();
+ private final String FILE_TYPE_DIVX = "video/divx";
+ private final String FILE_TYPE_AVI = "video/avi";
+ private final String FILE_TYPE_WMV = "video/x-ms-wmv";
+ private final String FILE_TYPE_ASF = "video/x-ms-asf";
+ private final String FILE_TYPE_WEBM = "video/webm";
final String TIME_STAMP_NAME = "'MUTE'_yyyyMMdd_HHmmss";
@@ -47,6 +56,13 @@ public class MuteVideo {
mUri = uri;
mFilePath = filePath;
mActivity = activity;
+ if (mUnsupportedMuteFileTypes != null) {
+ mUnsupportedMuteFileTypes.add(FILE_TYPE_DIVX);
+ mUnsupportedMuteFileTypes.add(FILE_TYPE_AVI);
+ mUnsupportedMuteFileTypes.add(FILE_TYPE_WMV);
+ mUnsupportedMuteFileTypes.add(FILE_TYPE_ASF);
+ mUnsupportedMuteFileTypes.add(FILE_TYPE_WEBM);
+ }
}
public void muteInBackground() {
@@ -54,6 +70,15 @@ public class MuteVideo {
mActivity.getContentResolver(), mUri,
mActivity.getString(R.string.folder_download));
+ mMimeType = mActivity.getContentResolver().getType(mUri);
+ if(!isValidFileForMute(mMimeType)) {
+ Toast.makeText(mActivity.getApplicationContext(),
+ mActivity.getString(R.string.mute_nosupport),
+ Toast.LENGTH_SHORT)
+ .show();
+ return;
+ }
+
showProgressDialog();
new Thread(new Runnable() {
@Override
@@ -62,9 +87,19 @@ public class MuteVideo {
VideoUtils.startMute(mFilePath, mDstFileInfo);
SaveVideoFileUtils.insertContent(
mDstFileInfo, mActivity.getContentResolver(), mUri);
- } catch (IOException e) {
- Toast.makeText(mActivity, mActivity.getString(R.string.video_mute_err),
- Toast.LENGTH_SHORT).show();
+ } catch (Exception e) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(mActivity, mActivity.getString(R.string.video_mute_err),
+ Toast.LENGTH_SHORT).show();
+ if (mMuteProgress != null) {
+ mMuteProgress.dismiss();
+ mMuteProgress = null;
+ }
+ }
+ });
+ return;
}
// After muting is done, trigger the UI changed.
mHandler.post(new Runnable() {
@@ -101,4 +136,16 @@ public class MuteVideo {
mMuteProgress.setCanceledOnTouchOutside(false);
mMuteProgress.show();
}
+ private boolean isValidFileForMute(String mimeType) {
+ if (mimeType != null) {
+ for (String fileType : mUnsupportedMuteFileTypes) {
+ if (mimeType.equals(fileType)) {
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/PhotoDataAdapter.java b/src/com/android/gallery3d/app/PhotoDataAdapter.java
index fd3a7cf73..4322d9b7a 100644..100755
--- a/src/com/android/gallery3d/app/PhotoDataAdapter.java
+++ b/src/com/android/gallery3d/app/PhotoDataAdapter.java
@@ -20,15 +20,19 @@ import android.graphics.Bitmap;
import android.graphics.BitmapRegionDecoder;
import android.os.Handler;
import android.os.Message;
+import android.text.TextUtils;
+import android.view.View;
import com.android.gallery3d.common.BitmapUtils;
import com.android.gallery3d.common.Utils;
+import com.android.gallery3d.data.CameraShortcutImage;
import com.android.gallery3d.data.ContentListener;
import com.android.gallery3d.data.LocalMediaItem;
import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.data.MediaObject;
import com.android.gallery3d.data.MediaSet;
import com.android.gallery3d.data.Path;
+import com.android.gallery3d.data.SnailItem;
import com.android.gallery3d.glrenderer.TiledTexture;
import com.android.gallery3d.ui.PhotoView;
import com.android.gallery3d.ui.ScreenNail;
@@ -49,6 +53,7 @@ import java.util.HashSet;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
+import java.util.Locale;
public class PhotoDataAdapter implements PhotoPage.Model {
@SuppressWarnings("unused")
@@ -67,6 +72,7 @@ public class PhotoDataAdapter implements PhotoPage.Model {
private static final int BIT_SCREEN_NAIL = 1;
private static final int BIT_FULL_IMAGE = 2;
+ private static final long NOTIFY_DIRTY_WAIT_TIME = 10;
// sImageFetchSeq is the fetching sequence for images.
// We want to fetch the current screennail first (offset = 0), the next
// screennail (offset = +1), then the previous screennail (offset = -1) etc.
@@ -155,6 +161,9 @@ public class PhotoDataAdapter implements PhotoPage.Model {
private int mFocusHintDirection = FOCUS_HINT_NEXT;
private Path mFocusHintPath = null;
+ // If Bundle is from widget, it's true, otherwise it's false.
+ private boolean mIsFromWidget = false;
+
public interface DataListener extends LoadingListener {
public void onPhotoChanged(int index, Path item);
}
@@ -292,6 +301,13 @@ public class PhotoDataAdapter implements PhotoPage.Model {
mDataListener = listener;
}
+ /**
+ * Set this to true if it is from widget.
+ */
+ public void setFromWidget(boolean isFromWidget) {
+ mIsFromWidget = isFromWidget;
+ }
+
private void updateScreenNail(Path path, Future<ScreenNail> future) {
ImageEntry entry = mImageCache.get(path);
ScreenNail screenNail = future.get();
@@ -512,6 +528,13 @@ public class PhotoDataAdapter implements PhotoPage.Model {
}
@Override
+ public boolean isGif(int offset) {
+ MediaItem item = getItem(mCurrentIndex + offset);
+ return (item != null) &&
+ MediaItem.MIME_TYPE_GIF.equalsIgnoreCase(item.getMimeType());
+ }
+
+ @Override
public boolean isDeletable(int offset) {
MediaItem item = getItem(mCurrentIndex + offset);
return (item == null)
@@ -653,6 +676,31 @@ public class PhotoDataAdapter implements PhotoPage.Model {
}
}
+ /**
+ * Update the image window and data window for RTL.
+ */
+ private void updateSlidingWindowForRTL() {
+ // 1. Update the image window
+ int nStart = Utils.clamp(mCurrentIndex - IMAGE_CACHE_SIZE / 2,
+ 0, Math.max(0, mSize - IMAGE_CACHE_SIZE));
+ int nEnd = Math.min(mSize, nStart + IMAGE_CACHE_SIZE);
+
+ if (mActiveStart == nStart && mActiveEnd == nEnd) {
+ return; // don't need to refresh
+ }
+
+ mActiveStart = nStart;
+ mActiveEnd = nEnd;
+
+ // 2. Update the data window
+ nStart = Utils.clamp(mCurrentIndex - DATA_CACHE_SIZE / 2,
+ 0, Math.max(0, mSize - DATA_CACHE_SIZE));
+ nEnd = Math.min(mSize, nStart + DATA_CACHE_SIZE);
+
+ mContentStart = nStart;
+ mContentEnd = nEnd;
+ }
+
private void updateImageRequests() {
if (!mIsActive) return;
@@ -747,7 +795,7 @@ public class PhotoDataAdapter implements PhotoPage.Model {
// Must be an item in camera roll.
if (!(mediaItem instanceof LocalMediaItem)) return false;
LocalMediaItem item = (LocalMediaItem) mediaItem;
- if (item.getBucketId() != MediaSetUtils.CAMERA_BUCKET_ID) return false;
+ if (item.getBucketId() != MediaSetUtils.getCameraBucketId()) return false;
// Must have no size, but must have width and height information
if (item.getSize() != 0) return false;
if (item.getWidth() == 0) return false;
@@ -1033,13 +1081,75 @@ public class PhotoDataAdapter implements PhotoPage.Model {
UpdateInfo info = executeAndWait(new GetUpdateInfo());
updateLoading(true);
long version = mSource.reload();
+
+ // Used for delete photo, RTL need to re-decide the slide range.
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && mSource.getCurrectSize() == 1 && mCurrentIndex > 0) {
+ mCurrentIndex = mCurrentIndex - 1;
+ mSize = mSource.getMediaItemCount();
+ updateSlidingWindowForRTL();
+ info = executeAndWait(new GetUpdateInfo());
+ }
+
if (info.version != version) {
info.reloadContent = true;
info.size = mSource.getMediaItemCount();
}
if (!info.reloadContent) continue;
- info.items = mSource.getMediaItem(
- info.contentStart, info.contentEnd);
+
+ // Check it is from camera or not
+ boolean isCameraFlag = false;
+ if (mCameraIndex == mCurrentIndex) {
+ info.items = mSource.getMediaItem(mCameraIndex, 1);
+ if (info.items.get(0) instanceof CameraShortcutImage
+ || info.items.get(0) instanceof SnailItem) {
+ isCameraFlag = true;
+ }
+ }
+
+ // If RTL, need to descending photos
+ if (!isCameraFlag
+ && info.contentStart < info.contentEnd
+ && (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault()))) {
+
+ // Calculate picture index/range etc..
+ int nIndex = isCameraFlag ? mCurrentIndex : info.size - mCurrentIndex - 1;
+ int nStart = Utils.clamp(nIndex - DATA_CACHE_SIZE / 2, 0,
+ Math.max(0, info.size - DATA_CACHE_SIZE));
+ info.items = mSource.getMediaItem(nStart, DATA_CACHE_SIZE);
+
+ // Initialize temporary picture list
+ ArrayList<MediaItem> mediaItemList = new ArrayList<MediaItem>();
+
+ // Fetch source, check the first item is camera or not
+ ArrayList<MediaItem> itemstmpList = mSource.getMediaItem(0, 1);
+ MediaItem itemstmp = itemstmpList.size() > 0 ? itemstmpList.get(0) : null;
+ boolean isCameraItem = (itemstmp != null)
+ && (itemstmp instanceof CameraShortcutImage
+ || itemstmp instanceof SnailItem);
+ if (isCameraItem) {
+ // If it's camera mode, need to put camera to first position
+ mediaItemList.add(itemstmp);
+ }
+
+ // Descending
+ for (int i = info.items.size() - 1; i >= 0; i--) {
+ if (isCameraItem && 0 == i) {
+ continue;
+ }
+ mediaItemList.add(info.items.get(i));
+ }
+ info.items = (ArrayList<MediaItem>) mediaItemList.clone();
+
+ // Clear temporary list and free memory immediately
+ mediaItemList.clear();
+ mediaItemList = null;
+ } else {
+ info.items = mSource.getMediaItem(
+ info.contentStart, info.contentEnd);
+ } // If RTL, need to descending photos end
int index = MediaSet.INDEX_NOT_FOUND;
@@ -1055,7 +1165,15 @@ public class PhotoDataAdapter implements PhotoPage.Model {
if (item != null && item.getPath() == info.target) {
index = info.indexHint;
} else {
- index = findIndexOfTarget(info);
+ // If RTL and it's not from widget, the index don't need to be amended
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && !mIsFromWidget) {
+ index = info.indexHint;
+ } else {
+ index = findIndexOfTarget(info);
+ mIsFromWidget = false;
+ }
}
}
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 915fdab5a..dd27f2689 100644..100755
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Rect;
+import android.media.MediaFile;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateBeamUrisCallback;
@@ -33,6 +34,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
+import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -72,6 +74,10 @@ import com.android.gallery3d.ui.SelectionManager;
import com.android.gallery3d.ui.SynchronizedHandler;
import com.android.gallery3d.util.GalleryUtils;
import com.android.gallery3d.util.UsageStatistics;
+import com.android.gallery3d.util.ViewGifImage;
+
+import java.util.ArrayList;
+import java.util.Locale;
public abstract class PhotoPage extends ActivityState implements
PhotoView.Listener, AppBridge.Server, ShareActionProvider.OnShareTargetSelectedListener,
@@ -102,6 +108,9 @@ public abstract class PhotoPage extends ActivityState implements
private static final int REQUEST_PLAY_VIDEO = 5;
private static final int REQUEST_TRIM = 6;
+ // Data cache size, equal to AlbumDataLoader.DATA_CACHE_SIZE
+ private static final int DATA_CACHE_SIZE = 256;
+
public static final String KEY_MEDIA_SET_PATH = "media-set-path";
public static final String KEY_MEDIA_ITEM_PATH = "media-item-path";
public static final String KEY_INDEX_HINT = "index-hint";
@@ -114,6 +123,10 @@ public abstract class PhotoPage extends ActivityState implements
public static final String KEY_IN_CAMERA_ROLL = "in_camera_roll";
public static final String KEY_READONLY = "read-only";
+
+ // Bundle key, used for checking whether it is from widget
+ public static final String KEY_IS_FROM_WIDGET = "is_from_widget";
+
public static final String KEY_ALBUMPAGE_TRANSITION = "albumpage-transition";
public static final int MSG_ALBUMPAGE_NONE = 0;
public static final int MSG_ALBUMPAGE_STARTED = 1;
@@ -159,6 +172,8 @@ public abstract class PhotoPage extends ActivityState implements
private SnailAlbum mScreenNailSet;
private OrientationManager mOrientationManager;
private boolean mTreatBackAsUp;
+ // Used for checking whether it is from widget
+ private boolean mIsFromWidget;
private boolean mStartInFilmstrip;
private boolean mHasCameraScreennailOrPlaceholder = false;
private boolean mRecenterCameraOnResume = true;
@@ -389,6 +404,7 @@ public abstract class PhotoPage extends ActivityState implements
Path.fromString(data.getString(KEY_MEDIA_ITEM_PATH)) :
null;
mTreatBackAsUp = data.getBoolean(KEY_TREAT_BACK_AS_UP, false);
+ mIsFromWidget = data.getBoolean(KEY_IS_FROM_WIDGET, false);
mStartInFilmstrip = data.getBoolean(KEY_START_IN_FILMSTRIP, false);
boolean inCameraRoll = data.getBoolean(KEY_IN_CAMERA_ROLL, false);
mCurrentIndex = data.getInt(KEY_INDEX_HINT, 0);
@@ -465,6 +481,30 @@ public abstract class PhotoPage extends ActivityState implements
return;
}
}
+
+ // If it is from widget, need to re-calcuate index and range
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && mIsFromWidget) {
+ int nMediaItemCount = mMediaSet.getMediaItemCount();
+ ArrayList<MediaItem> mediaItemList = mMediaSet.getMediaItem(0, nMediaItemCount);
+ int nItemIndex;
+ for (nItemIndex = 0; nItemIndex < nMediaItemCount; nItemIndex++) {
+ if (mediaItemList.get(nItemIndex).getPath().toString()
+ .equals(itemPath.toString())) {
+ int nIndex;
+ if (nItemIndex > DATA_CACHE_SIZE / 2
+ && nItemIndex < (mMediaSet.getMediaItemCount() -
+ DATA_CACHE_SIZE / 2)) {
+ nIndex = mMediaSet.getMediaItemCount() - nItemIndex - 2;
+ } else {
+ nIndex = mMediaSet.getMediaItemCount() - nItemIndex - 1;
+ }
+ itemPath = mMediaSet.getMediaItem(nIndex, 1).get(0).getPath();
+ break;
+ }
+ }
+ }
PhotoDataAdapter pda = new PhotoDataAdapter(
mActivity, mPhotoView, mMediaSet, itemPath, mCurrentIndex,
mAppBridge == null ? -1 : 0,
@@ -473,6 +513,12 @@ public abstract class PhotoPage extends ActivityState implements
mModel = pda;
mPhotoView.setModel(mModel);
+ // If RTL and from widget, set the flag into PhotoDataAdapter.
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && mIsFromWidget) {
+ pda.setFromWidget(mIsFromWidget);
+ }
pda.setDataListener(new PhotoDataAdapter.DataListener() {
@Override
@@ -773,7 +819,7 @@ public abstract class PhotoPage extends ActivityState implements
int supportedOperations = mCurrentPhoto.getSupportedOperations();
if (mReadOnlyView) {
- supportedOperations ^= MediaObject.SUPPORT_EDIT;
+ supportedOperations &= ~MediaObject.SUPPORT_EDIT;
}
if (mSecureAlbum != null) {
supportedOperations &= MediaObject.SUPPORT_DELETE;
@@ -1022,6 +1068,12 @@ public abstract class PhotoPage extends ActivityState implements
return true;
}
int currentIndex = mModel.getCurrentIndex();
+
+ // If RTL, the current index need be revised.
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ currentIndex = mMediaSet.getMediaItemCount() - currentIndex - 1;
+ }
Path path = current.getPath();
DataManager manager = mActivity.getDataManager();
@@ -1057,8 +1109,15 @@ public abstract class PhotoPage extends ActivityState implements
Intent intent = new Intent(mActivity, TrimVideo.class);
intent.setData(manager.getContentUri(path));
// We need the file path to wrap this into a RandomAccessFile.
- intent.putExtra(KEY_MEDIA_ITEM_PATH, current.getFilePath());
- mActivity.startActivityForResult(intent, REQUEST_TRIM);
+ String str = android.media.MediaFile.getMimeTypeForFile(current.getFilePath());
+ if("video/mp4".equals(str) || "video/mpeg4".equals(str)
+ || "video/3gpp".equals(str) || "video/3gpp2".equals(str)) {
+ intent.putExtra(KEY_MEDIA_ITEM_PATH, current.getFilePath());
+ mActivity.startActivityForResult(intent, REQUEST_TRIM);
+ } else {
+ Toast.makeText(mActivity,mActivity.getString(R.string.can_not_trim),
+ Toast.LENGTH_SHORT).show();
+ }
return true;
}
case R.id.action_mute: {
@@ -1136,6 +1195,10 @@ public abstract class PhotoPage extends ActivityState implements
// item is not ready or it is camera preview, ignore
return;
}
+ if (item.getMimeType().equals(MediaItem.MIME_TYPE_GIF)) {
+ viewAnimateGif((Activity) mActivity, item.getContentUri());
+ return;
+ }
int supported = item.getSupportedOperations();
boolean playVideo = ((supported & MediaItem.SUPPORT_PLAY) != 0);
@@ -1200,7 +1263,14 @@ public abstract class PhotoPage extends ActivityState implements
onCommitDeleteImage(); // commit the previous deletion
mDeletePath = path;
mDeleteIsFocus = (offset == 0);
- mMediaSet.addDeletion(path, mCurrentIndex + offset);
+
+ // If RTL, the index need be revised.
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ mMediaSet.addDeletion(path, mMediaSet.getMediaItemCount() - mCurrentIndex - 1);
+ } else {
+ mMediaSet.addDeletion(path, mCurrentIndex + offset);
+ }
}
@Override
@@ -1284,6 +1354,12 @@ public abstract class PhotoPage extends ActivityState implements
if (data == null) break;
String path = data.getStringExtra(SlideshowPage.KEY_ITEM_PATH);
int index = data.getIntExtra(SlideshowPage.KEY_PHOTO_INDEX, 0);
+
+ // If RTL, the index need be revised.
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ index = mMediaSet.getMediaItemCount() - index - 1;
+ }
if (path != null) {
mModel.setCurrentPhoto(Path.fromString(path), index);
}
@@ -1384,6 +1460,15 @@ public abstract class PhotoPage extends ActivityState implements
}
@Override
+ public void onConfigurationChanged(Configuration config) {
+ super.onConfigurationChanged(config);
+ if(mIsActive) return;
+ mActivity.GLRootResume(true);
+ mModel.resume();
+ mActivity.GLRootResume(false);
+ }
+
+ @Override
protected void onResume() {
super.onResume();
@@ -1530,4 +1615,8 @@ public abstract class PhotoPage extends ActivityState implements
}
}
+ private static void viewAnimateGif(Activity activity, Uri uri) {
+ Intent intent = new Intent(ViewGifImage.VIEW_GIF_ACTION, uri);
+ activity.startActivity(intent);
+ }
}
diff --git a/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java b/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
index 00f2fe78f..8134756f8 100644..100755
--- a/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
+++ b/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
@@ -89,7 +89,16 @@ public class SinglePhotoDataAdapter extends TileImageViewAdapter
@Override
public void onFutureDone(Future<BitmapRegionDecoder> future) {
BitmapRegionDecoder decoder = future.get();
- if (decoder == null) return;
+ // cannot get large bitmap, then try to get thumb bitmap
+ if (decoder == null) {
+ if (mTask != null && !mTask.isCancelled()) {
+ Log.w(TAG, "fail to get region decoder, try to request thumb image");
+ mHasFullImage = false;
+ pause();
+ resume();
+ }
+ return;
+ }
int width = decoder.getWidth();
int height = decoder.getHeight();
BitmapFactory.Options options = new BitmapFactory.Options();
@@ -136,7 +145,6 @@ public class SinglePhotoDataAdapter extends TileImageViewAdapter
Bitmap backup = future.get();
if (backup == null) {
mLoadingState = LOADING_FAIL;
- return;
} else {
mLoadingState = LOADING_COMPLETE;
}
@@ -227,6 +235,11 @@ public class SinglePhotoDataAdapter extends TileImageViewAdapter
}
@Override
+ public boolean isGif(int offset) {
+ return MediaItem.MIME_TYPE_GIF.equalsIgnoreCase(mItem.getMimeType());
+ }
+
+ @Override
public boolean isDeletable(int offset) {
return (mItem.getSupportedOperations() & MediaItem.SUPPORT_DELETE) != 0;
}
diff --git a/src/com/android/gallery3d/app/StorageChangeReceiver.java b/src/com/android/gallery3d/app/StorageChangeReceiver.java
new file mode 100644
index 000000000..f42179c84
--- /dev/null
+++ b/src/com/android/gallery3d/app/StorageChangeReceiver.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod 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.gallery3d.app;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+public class StorageChangeReceiver extends BroadcastReceiver {
+ public static final String KEY_STORAGE = "pref_camera_storage_key";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String storagePath = intent.getExtras().getString(KEY_STORAGE, null);
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+ if ((storagePath != null) && !storagePath.equals(prefs.getString(KEY_STORAGE, null))) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(KEY_STORAGE, storagePath);
+ editor.apply();
+ }
+ }
+}
diff --git a/src/com/android/gallery3d/app/TimeBar.java b/src/com/android/gallery3d/app/TimeBar.java
index 246346a56..2870c489c 100644..100755
--- a/src/com/android/gallery3d/app/TimeBar.java
+++ b/src/com/android/gallery3d/app/TimeBar.java
@@ -22,13 +22,17 @@ import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
+import android.text.TextUtils;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import com.android.gallery3d.R;
import com.android.gallery3d.common.Utils;
+import java.util.Locale;
+
/**
* The time bar view, which includes the current and total time, the progress
* bar, and the scrubber.
@@ -51,6 +55,10 @@ public class TimeBar extends View {
private static final int TEXT_SIZE_IN_DP = 14;
+ private static final String TAG = "Gallery3D/TimeBar";
+ private static final boolean LOG = false;
+ public static final int UNKNOWN = -1;
+
protected final Listener mListener;
// the bars we use for displaying the progress
@@ -71,6 +79,7 @@ public class TimeBar extends View {
protected boolean mScrubbing;
protected boolean mShowTimes;
protected boolean mShowScrubber;
+ private boolean mEnableScrubbing;
protected int mTotalTime;
protected int mCurrentTime;
@@ -78,6 +87,11 @@ public class TimeBar extends View {
protected final Rect mTimeBounds;
protected int mVPaddingInPx;
+ private int mLastShowTime = UNKNOWN;
+
+ private ITimeBarSecondaryProgressExt mSecondaryProgressExt = new TimeBarSecondaryProgressExtImpl();
+ private ITimeBarInfoExt mInfoExt = new TimeBarInfoExtImpl();
+ private ITimeBarLayoutExt mLayoutExt = new TimeBarLayoutExtImpl();
public TimeBar(Context context, Listener listener) {
super(context);
@@ -108,21 +122,53 @@ public class TimeBar extends View {
mScrubberPadding = (int) (metrics.density * SCRUBBER_PADDING_IN_DP);
mVPaddingInPx = (int) (metrics.density * V_PADDING_IN_DP);
+ mLayoutExt.init(mScrubberPadding, mVPaddingInPx);
+ mInfoExt.init(textSizeInPx);
+ mSecondaryProgressExt.init();
}
private void update() {
mPlayedBar.set(mProgressBar);
if (mTotalTime > 0) {
- mPlayedBar.right =
- mPlayedBar.left + (int) ((mProgressBar.width() * (long) mCurrentTime) / mTotalTime);
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // The progress bar should be reversed in RTL.
+ mPlayedBar.left = mPlayedBar.right
+ - (int) ((mProgressBar.width() * (long) mCurrentTime) / mTotalTime);
+ } else {
+ mPlayedBar.right = mPlayedBar.left
+ + (int) ((mProgressBar.width() * (long) mCurrentTime) / mTotalTime);
+ }
+ /*
+ * M: if duration is not accurate, here just adjust playedBar we
+ * also show the accurate position text to final user.
+ */
+ if (mPlayedBar.right > mProgressBar.right) {
+ mPlayedBar.right = mProgressBar.right;
+ }
} else {
- mPlayedBar.right = mProgressBar.left;
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // The progress bar should be reversed in RTL.
+ mPlayedBar.left = mProgressBar.right;
+ } else {
+ mPlayedBar.right = mProgressBar.left;
+ }
}
if (!mScrubbing) {
- mScrubberLeft = mPlayedBar.right - mScrubber.getWidth() / 2;
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils.getLayoutDirectionFromLocale(
+ Locale.getDefault())) {
+ // The progress bar should be reversed in RTL.
+ mScrubberLeft = mPlayedBar.left - mScrubber.getWidth() / 2;
+ } else {
+ mScrubberLeft = mPlayedBar.right - mScrubber.getWidth() / 2;
+ }
}
+ // update text bounds when layout changed or time changed
+ updateBounds();
+ mInfoExt.updateVisibleText(this, mProgressBar, mTimeBounds);
invalidate();
}
@@ -130,14 +176,16 @@ public class TimeBar extends View {
* @return the preferred height of this view, including invisible padding
*/
public int getPreferredHeight() {
- return mTimeBounds.height() + mVPaddingInPx + mScrubberPadding;
+ int preferredHeight = mTimeBounds.height() + mVPaddingInPx + mScrubberPadding;
+ return mLayoutExt.getPreferredHeight(preferredHeight, mTimeBounds);
}
/**
* @return the height of the time bar, excluding invisible padding
*/
public int getBarHeight() {
- return mTimeBounds.height() + mVPaddingInPx;
+ int barHeight = mTimeBounds.height() + mVPaddingInPx;
+ return mLayoutExt.getBarHeight(barHeight, mTimeBounds);
}
public void setTime(int currentTime, int totalTime,
@@ -146,7 +194,10 @@ public class TimeBar extends View {
return;
}
mCurrentTime = currentTime;
- mTotalTime = totalTime;
+ mTotalTime = Math.abs(totalTime);
+ if (totalTime <= 0) { /// M: disable scrubbing before mediaplayer ready.
+ setScrubbing(false);
+ }
update();
}
@@ -165,9 +216,17 @@ public class TimeBar extends View {
}
private int getScrubberTime() {
- return (int) ((long) (mScrubberLeft + mScrubber.getWidth() / 2 - mProgressBar.left)
- * mTotalTime / mProgressBar.width());
- }
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // The progress bar's scrubber time should be reversed in RTL.
+ return (int) ((long) (mProgressBar.width() - (mScrubberLeft
+ + mScrubber.getWidth() / 2 - mProgressBar.left))
+ * mTotalTime / mProgressBar.width());
+ } else {
+ return (int) ((long) (mScrubberLeft + mScrubber.getWidth() / 2 - mProgressBar.left)
+ * mTotalTime / mProgressBar.width());
+ }
+ }
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
@@ -180,7 +239,8 @@ public class TimeBar extends View {
if (mShowTimes) {
margin += mTimeBounds.width();
}
- int progressY = (h + mScrubberPadding) / 2;
+ margin = mLayoutExt.getProgressMargin(margin);
+ int progressY = (h + mScrubberPadding) / 2 + mLayoutExt.getProgressOffset(mTimeBounds);
mScrubberTop = progressY - mScrubber.getHeight() / 2 + 1;
mProgressBar.set(
getPaddingLeft() + margin, progressY,
@@ -191,8 +251,10 @@ public class TimeBar extends View {
@Override
protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
// draw progress bars
canvas.drawRect(mProgressBar, mProgressPaint);
+ mSecondaryProgressExt.draw(canvas, mProgressBar);
canvas.drawRect(mPlayedBar, mPlayedPaint);
// draw scrubber and timers
@@ -200,22 +262,44 @@ public class TimeBar extends View {
canvas.drawBitmap(mScrubber, mScrubberLeft, mScrubberTop, null);
}
if (mShowTimes) {
- canvas.drawText(
- stringForTime(mCurrentTime),
- mTimeBounds.width() / 2 + getPaddingLeft(),
- mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
- mTimeTextPaint);
- canvas.drawText(
- stringForTime(mTotalTime),
- getWidth() - getPaddingRight() - mTimeBounds.width() / 2,
- mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
- mTimeTextPaint);
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // The progress bar's time should be reversed in RTL.
+ canvas.drawText(
+ stringForTime(mCurrentTime),
+ getWidth() - getPaddingRight() - mTimeBounds.width() / 2,
+ mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
+ mTimeTextPaint);
+ canvas.drawText(
+ stringForTime(mTotalTime),
+ mTimeBounds.width() / 2 + getPaddingLeft(),
+ mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
+ mTimeTextPaint);
+ } else {
+ canvas.drawText(
+ stringForTime(mCurrentTime),
+ mTimeBounds.width() / 2 + getPaddingLeft(),
+ mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
+ mTimeTextPaint);
+ canvas.drawText(
+ stringForTime(mTotalTime),
+ getWidth() - getPaddingRight() - mTimeBounds.width() / 2,
+ mTimeBounds.height() + mVPaddingInPx / 2 + mScrubberPadding + 1,
+ mTimeTextPaint);
+ }
}
+ mInfoExt.draw(canvas, mLayoutExt.getInfoBounds(this, mTimeBounds));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (mShowScrubber) {
+ if (LOG) {
+ Log.v(TAG, "onTouchEvent() showScrubber=" + mShowScrubber
+ + ", enableScrubbing=" + mEnableScrubbing + ", totalTime="
+ + mTotalTime + ", scrubbing=" + mScrubbing + ", event="
+ + event);
+ }
+ if (mShowScrubber && mEnableScrubbing) {
int x = (int) event.getX();
int y = (int) event.getY();
@@ -233,15 +317,19 @@ public class TimeBar extends View {
clampScrubber();
mCurrentTime = getScrubberTime();
mListener.onScrubbingMove(mCurrentTime);
+ update();
invalidate();
return true;
}
case MotionEvent.ACTION_CANCEL:
- case MotionEvent.ACTION_UP: {
- mListener.onScrubbingEnd(getScrubberTime(), 0, 0);
- mScrubbing = false;
- return true;
- }
+ case MotionEvent.ACTION_UP:
+ if (mScrubbing) {
+ mListener.onScrubbingEnd(getScrubberTime(), 0, 0);
+ mScrubbing = false;
+ update();
+ return true;
+ }
+ break;
}
}
return false;
@@ -263,4 +351,235 @@ public class TimeBar extends View {
mShowScrubber = canSeek;
}
+ private void updateBounds() {
+ int showTime = mTotalTime > mCurrentTime ? mTotalTime : mCurrentTime;
+ if (mLastShowTime == showTime) {
+ // do not need to recompute the bounds.
+ return;
+ }
+ String durationText = stringForTime(showTime);
+ int length = durationText.length();
+ mTimeTextPaint.getTextBounds(durationText, 0, length, mTimeBounds);
+ mLastShowTime = showTime;
+ if (LOG) {
+ Log.v(TAG, "updateBounds() durationText=" + durationText + ", timeBounds="
+ + mTimeBounds);
+ }
+ }
+
+ public void setScrubbing(boolean enable) {
+ if (LOG) {
+ Log.v(TAG, "setScrubbing(" + enable + ") scrubbing=" + mScrubbing);
+ }
+ mEnableScrubbing = enable;
+ if (mScrubbing) { // if it is scrubbing, change it to false
+ mListener.onScrubbingEnd(getScrubberTime(), 0, 0);
+ mScrubbing = false;
+ }
+ }
+
+ public boolean getScrubbing() {
+ if (LOG) {
+ Log.v(TAG, "mEnableScrubbing=" + mEnableScrubbing);
+ }
+ return mEnableScrubbing;
+ }
+
+ public void setInfo(String info) {
+ if (LOG) {
+ Log.v(TAG, "setInfo(" + info + ")");
+ }
+ mInfoExt.setInfo(info);
+ mInfoExt.updateVisibleText(this, mProgressBar, mTimeBounds);
+ invalidate();
+ }
+
+ public void setSecondaryProgress(int percent) {
+ if (LOG) {
+ Log.v(TAG, "setSecondaryProgress(" + percent + ")");
+ }
+ mSecondaryProgressExt.setSecondaryProgress(mProgressBar, percent);
+ invalidate();
+ }
+}
+
+interface ITimeBarInfoExt {
+ void init(float textSizeInPx);
+
+ void setInfo(String info);
+
+ void draw(Canvas canvas, Rect infoBounds);
+
+ void updateVisibleText(View parent, Rect progressBar, Rect timeBounds);
+}
+
+interface ITimeBarSecondaryProgressExt {
+ void init();
+
+ void setSecondaryProgress(Rect progressBar, int percent);
+
+ void draw(Canvas canvas, Rect progressBounds);
+}
+
+interface ITimeBarLayoutExt {
+ void init(int scrubberPadding, int vPaddingInPx);
+
+ int getPreferredHeight(int originalPreferredHeight, Rect timeBounds);
+
+ int getBarHeight(int originalBarHeight, Rect timeBounds);
+
+ int getProgressMargin(int originalMargin);
+
+ int getProgressOffset(Rect timeBounds);
+
+ int getTimeOffset();
+
+ Rect getInfoBounds(View parent, Rect timeBounds);
+}
+
+class TimeBarInfoExtImpl implements ITimeBarInfoExt {
+ private static final String TAG = "TimeBarInfoExtensionImpl";
+ private static final boolean LOG = false;
+ private static final String ELLIPSE = "...";
+
+ private Paint mInfoPaint;
+ private Rect mInfoBounds;
+ private String mInfoText;
+ private String mVisibleText;
+ private int mEllipseLength;
+
+ @Override
+ public void init(float textSizeInPx) {
+ mInfoPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mInfoPaint.setColor(0xFFCECECE);
+ mInfoPaint.setTextSize(textSizeInPx);
+ mInfoPaint.setTextAlign(Paint.Align.CENTER);
+
+ mEllipseLength = (int) Math.ceil(mInfoPaint.measureText(ELLIPSE));
+ }
+
+ @Override
+ public void draw(Canvas canvas, Rect infoBounds) {
+ if (mInfoText != null && mVisibleText != null) {
+ canvas.drawText(mVisibleText, infoBounds.centerX(), infoBounds.centerY(), mInfoPaint);
+ }
+ }
+
+ @Override
+ public void setInfo(String info) {
+ mInfoText = info;
+ }
+
+ public void updateVisibleText(View parent, Rect progressBar, Rect timeBounds) {
+ if (mInfoText == null) {
+ mVisibleText = null;
+ return;
+ }
+ float tw = mInfoPaint.measureText(mInfoText);
+ float space = progressBar.width() - timeBounds.width() * 2 - parent.getPaddingLeft()
+ - parent.getPaddingRight();
+ if (tw > 0 && space > 0 && tw > space) {
+ // we need to cut the info text for visible
+ float originalNum = mInfoText.length();
+ int realNum = (int) ((space - mEllipseLength) * originalNum / tw);
+ if (LOG) {
+ Log.v(TAG, "updateVisibleText() infoText=" + mInfoText + " text width=" + tw
+ + ", space=" + space + ", originalNum=" + originalNum + ", realNum="
+ + realNum
+ + ", getPaddingLeft()=" + parent.getPaddingLeft() + ", getPaddingRight()="
+ + parent.getPaddingRight()
+ + ", progressBar=" + progressBar + ", timeBounds=" + timeBounds);
+ }
+ mVisibleText = mInfoText.substring(0, realNum) + ELLIPSE;
+ } else {
+ mVisibleText = mInfoText;
+ }
+ if (LOG) {
+ Log.v(TAG, "updateVisibleText() infoText=" + mInfoText + ", visibleText="
+ + mVisibleText
+ + ", text width=" + tw + ", space=" + space);
+ }
+ }
+}
+
+class TimeBarSecondaryProgressExtImpl implements ITimeBarSecondaryProgressExt {
+ private static final String TAG = "TimeBarSecondaryProgressExtensionImpl";
+ private static final boolean LOG = false;
+
+ private int mBufferPercent;
+ private Rect mSecondaryBar;
+ private Paint mSecondaryPaint;
+
+ @Override
+ public void init() {
+ mSecondaryBar = new Rect();
+ mSecondaryPaint = new Paint();
+ mSecondaryPaint.setColor(0xFF5CA0C5);
+ }
+
+ @Override
+ public void draw(Canvas canvas, Rect progressBounds) {
+ if (mBufferPercent >= 0) {
+ mSecondaryBar.set(progressBounds);
+ mSecondaryBar.right = mSecondaryBar.left
+ + (int) (mBufferPercent * progressBounds.width() / 100);
+ canvas.drawRect(mSecondaryBar, mSecondaryPaint);
+ }
+ if (LOG) {
+ Log.v(TAG, "draw() bufferPercent=" + mBufferPercent + ", secondaryBar="
+ + mSecondaryBar);
+ }
+ }
+
+ @Override
+ public void setSecondaryProgress(Rect progressBar, int percent) {
+ mBufferPercent = percent;
+ }
+}
+
+class TimeBarLayoutExtImpl implements ITimeBarLayoutExt {
+ private static final String TAG = "TimeBarLayoutExtensionImpl";
+ private static final boolean LOG = false;
+
+ private int mTextPadding;
+ private int mVPaddingInPx;
+
+ @Override
+ public void init(int scrubberPadding, int vPaddingInPx) {
+ mTextPadding = scrubberPadding / 2;
+ mVPaddingInPx = vPaddingInPx;
+ }
+
+ @Override
+ public int getPreferredHeight(int originalPreferredHeight, Rect timeBounds) {
+ return originalPreferredHeight + timeBounds.height() + mTextPadding;
+ }
+
+ @Override
+ public int getBarHeight(int originalBarHeight, Rect timeBounds) {
+ return originalBarHeight + timeBounds.height() + mTextPadding;
+ }
+
+ @Override
+ public int getProgressMargin(int originalMargin) {
+ return 0;
+ }
+
+ @Override
+ public int getProgressOffset(Rect timeBounds) {
+ return (timeBounds.height() + mTextPadding) / 2;
+ }
+
+ @Override
+ public int getTimeOffset() {
+ return mTextPadding - mVPaddingInPx / 2;
+ }
+
+ @Override
+ public Rect getInfoBounds(View parent, Rect timeBounds) {
+ Rect bounds = new Rect(parent.getPaddingLeft(), 0,
+ parent.getWidth() - parent.getPaddingRight(),
+ (timeBounds.height() + mTextPadding * 3 + 1) * 2);
+ return bounds;
+ }
}
diff --git a/src/com/android/gallery3d/app/TrimControllerOverlay.java b/src/com/android/gallery3d/app/TrimControllerOverlay.java
index cae016626..9d2e7aee1 100644
--- a/src/com/android/gallery3d/app/TrimControllerOverlay.java
+++ b/src/com/android/gallery3d/app/TrimControllerOverlay.java
@@ -108,4 +108,14 @@ public class TrimControllerOverlay extends CommonControllerOverlay {
}
return true;
}
+
+ @Override
+ public void setViewEnabled(boolean isEnabled) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void setPlayPauseReplayResume() {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/src/com/android/gallery3d/app/TrimVideo.java b/src/com/android/gallery3d/app/TrimVideo.java
index b0ed8e635..a52c25606 100644
--- a/src/com/android/gallery3d/app/TrimVideo.java
+++ b/src/com/android/gallery3d/app/TrimVideo.java
@@ -57,6 +57,7 @@ public class TrimVideo extends Activity implements
private int mTrimStartTime = 0;
private int mTrimEndTime = 0;
+ private boolean mCheckTrimStartTime;
private int mVideoPosition = 0;
public static final String KEY_TRIM_START = "trim_start";
public static final String KEY_TRIM_END = "trim_end";
@@ -177,10 +178,11 @@ public class TrimVideo extends Activity implements
mVideoPosition = mVideoView.getCurrentPosition();
// If the video position is smaller than the starting point of trimming,
// correct it.
- if (mVideoPosition < mTrimStartTime) {
+ if (mCheckTrimStartTime && (mVideoPosition < mTrimStartTime)) {
mVideoView.seekTo(mTrimStartTime);
mVideoPosition = mTrimStartTime;
}
+ mCheckTrimStartTime = false;
// If the position is bigger than the end point of trimming, show the
// replay button and pause.
if (mVideoPosition >= mTrimEndTime && mTrimEndTime > 0) {
@@ -204,6 +206,7 @@ public class TrimVideo extends Activity implements
private void playVideo() {
mVideoView.start();
+ mCheckTrimStartTime = true;
mController.showPlaying();
setProgress();
}
@@ -237,6 +240,7 @@ public class TrimVideo extends Activity implements
new Thread(new Runnable() {
@Override
public void run() {
+ boolean hasError = false;
try {
VideoUtils.startTrim(mSrcFile, mDstFileInfo.mFile,
mTrimStartTime, mTrimEndTime);
@@ -244,7 +248,28 @@ public class TrimVideo extends Activity implements
SaveVideoFileUtils.insertContent(mDstFileInfo,
getContentResolver(), mUri);
} catch (IOException e) {
+ hasError = true;
e.printStackTrace();
+ } catch (IllegalStateException e) {
+ hasError = true;
+ e.printStackTrace();
+ }
+ //If the exception happens,just notify the UI and avoid the crash.
+ if (hasError){
+ mHandler.post(new Runnable(){
+ @Override
+ public void run(){
+ Toast.makeText(getApplicationContext(),
+ getString(R.string.fail_trim),
+ Toast.LENGTH_SHORT)
+ .show();
+ if (mProgress != null) {
+ mProgress.dismiss();
+ mProgress = null;
+ }
+ }
+ });
+ return;
}
// After trimming is done, trigger the UI changed.
mHandler.post(new Runnable() {
@@ -320,6 +345,12 @@ public class TrimVideo extends Activity implements
}
@Override
+ public boolean onIsRTSP() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
public void onReplay() {
mVideoView.seekTo(mTrimStartTime);
playVideo();
diff --git a/src/com/android/gallery3d/app/VideoUtils.java b/src/com/android/gallery3d/app/VideoUtils.java
index 359cf76f5..4f551a67d 100644..100755
--- a/src/com/android/gallery3d/app/VideoUtils.java
+++ b/src/com/android/gallery3d/app/VideoUtils.java
@@ -156,11 +156,16 @@ public class VideoUtils {
if (selectCurrentTrack) {
extractor.selectTrack(i);
- int dstIndex = muxer.addTrack(format);
- indexMap.put(i, dstIndex);
- if (format.containsKey(MediaFormat.KEY_MAX_INPUT_SIZE)) {
- int newSize = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);
- bufferSize = newSize > bufferSize ? newSize : bufferSize;
+ try {
+ int dstIndex = muxer.addTrack(format);
+ indexMap.put(i, dstIndex);
+ if (format.containsKey(MediaFormat.KEY_MAX_INPUT_SIZE)) {
+ int newSize = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);
+ bufferSize = newSize > bufferSize ? newSize : bufferSize;
+ }
+ } catch (IllegalArgumentException e) {
+ Log.e(LOGTAG, "Unsupported format '" + mime + "'");
+ throw new IOException("Muxer does not support " + mime);
}
}
}
@@ -221,6 +226,11 @@ public class VideoUtils {
} catch (IllegalStateException e) {
// Swallow the exception due to malformed source.
Log.w(LOGTAG, "The source video file is malformed");
+ File f = new File(dstPath);
+ if (f.exists()) {
+ f.delete();
+ }
+ throw e;
} finally {
muxer.release();
}
diff --git a/src/com/android/gallery3d/app/Wallpaper.java b/src/com/android/gallery3d/app/Wallpaper.java
index 2022f5a4a..5c19d9016 100644
--- a/src/com/android/gallery3d/app/Wallpaper.java
+++ b/src/com/android/gallery3d/app/Wallpaper.java
@@ -44,6 +44,11 @@ public class Wallpaper extends Activity {
private static final String IMAGE_TYPE = "image/*";
private static final String KEY_STATE = "activity-state";
private static final String KEY_PICKED_ITEM = "picked-item";
+ private static final String KEY_ASPECT_X = "aspectX";
+ private static final String KEY_ASPECT_Y = "aspectY";
+ private static final String KEY_SPOTLIGHT_X = "spotlightX";
+ private static final String KEY_SPOTLIGHT_Y = "spotlightY";
+ private static final String KEY_FROM_SCREENCOLOR = "fromScreenColor";
private static final int STATE_INIT = 0;
private static final int STATE_PHOTO_PICKED = 1;
@@ -100,7 +105,14 @@ public class Wallpaper extends Activity {
}
case STATE_PHOTO_PICKED: {
Intent cropAndSetWallpaperIntent;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ boolean fromScreenColor = false;
+
+ // Do this for screencolor select and crop image to preview.
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ fromScreenColor = extras.getBoolean(KEY_FROM_SCREENCOLOR, false);
+ }
+ if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) && (!fromScreenColor)) {
WallpaperManager wpm = WallpaperManager.getInstance(getApplicationContext());
try {
cropAndSetWallpaperIntent = wpm.getCropAndSetWallpaperIntent(mPickedItem);
@@ -114,11 +126,23 @@ public class Wallpaper extends Activity {
}
}
- int width = getWallpaperDesiredMinimumWidth();
- int height = getWallpaperDesiredMinimumHeight();
- Point size = getDefaultDisplaySize(new Point());
- float spotlightX = (float) size.x / width;
- float spotlightY = (float) size.y / height;
+ int width,height;
+ float spotlightX,spotlightY;
+
+ if (fromScreenColor) {
+ width = extras.getInt(KEY_ASPECT_X, 0);
+ height = extras.getInt(KEY_ASPECT_Y, 0);
+ spotlightX = extras.getFloat(KEY_SPOTLIGHT_X, 0);
+ spotlightY = extras.getFloat(KEY_SPOTLIGHT_Y, 0);
+ } else {
+ width = getWallpaperDesiredMinimumWidth();
+ height = getWallpaperDesiredMinimumHeight();
+ Point size = getDefaultDisplaySize(new Point());
+ spotlightX = (float) size.x / width;
+ spotlightY = (float) size.y / height;
+ }
+
+ //Don't set wallpaper from screencolor.
cropAndSetWallpaperIntent = new Intent(CropActivity.CROP_ACTION)
.setClass(this, CropActivity.class)
.setDataAndType(mPickedItem, IMAGE_TYPE)
@@ -131,7 +155,7 @@ public class Wallpaper extends Activity {
.putExtra(CropExtras.KEY_SPOTLIGHT_Y, spotlightY)
.putExtra(CropExtras.KEY_SCALE, true)
.putExtra(CropExtras.KEY_SCALE_UP_IF_NEEDED, true)
- .putExtra(CropExtras.KEY_SET_AS_WALLPAPER, true);
+ .putExtra(CropExtras.KEY_SET_AS_WALLPAPER, !fromScreenColor);
startActivity(cropAndSetWallpaperIntent);
finish();
}
diff --git a/src/com/android/gallery3d/data/DecodeUtils.java b/src/com/android/gallery3d/data/DecodeUtils.java
index 2853baffb..7e10191b7 100644
--- a/src/com/android/gallery3d/data/DecodeUtils.java
+++ b/src/com/android/gallery3d/data/DecodeUtils.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.data;
import android.annotation.TargetApi;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
@@ -32,6 +33,7 @@ import com.android.gallery3d.ui.Log;
import com.android.gallery3d.util.ThreadPool.CancelListener;
import com.android.gallery3d.util.ThreadPool.JobContext;
+import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.InputStream;
@@ -308,4 +310,46 @@ public class DecodeUtils {
decodeBounds(jc, fileDescriptor, options);
return GalleryBitmapPool.getInstance().get(options.outWidth, options.outHeight);
}
+
+ public static Bitmap decodeBitmap(Resources res, int resId, int reqWidth, int reqHeight) {
+ // First decode with inJustDecodeBounds=true to check dimensions
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeResource(res, resId, options);
+
+ // Calculate inSampleSize (use 1024 as maximum size, the minimum supported
+ // by all the gles20 devices)
+ options.inSampleSize = calculateBitmapRatio(
+ options,
+ Math.min(reqWidth, 1024),
+ Math.min(reqHeight, 1024));
+
+ // Decode the bitmap with inSampleSize set
+ options.inJustDecodeBounds = false;
+ options.inPreferQualityOverSpeed = false;
+ options.inPurgeable = true;
+ options.inInputShareable = true;
+ options.inDither = true;
+ return BitmapFactory.decodeResource(res, resId, options);
+ }
+
+ private static int calculateBitmapRatio(Options options, int reqWidth, int reqHeight) {
+ // Raw height and width of image
+ final int height = options.outHeight;
+ final int width = options.outWidth;
+ int inSampleSize = 1;
+
+ if (height > reqHeight || width > reqWidth) {
+ // Calculate ratios of height and width to requested height and width
+ final int heightRatio = Math.round((float) height / (float) reqHeight);
+ final int widthRatio = Math.round((float) width / (float) reqWidth);
+
+ // Choose the smallest ratio as inSampleSize value, this will guarantee
+ // a final image with both dimensions larger than or equal to the
+ // requested height and width.
+ inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
+ }
+
+ return inSampleSize;
+ }
}
diff --git a/src/com/android/gallery3d/data/FaceClustering.java b/src/com/android/gallery3d/data/FaceClustering.java
index 819915edb..a0d567902 100644..100755
--- a/src/com/android/gallery3d/data/FaceClustering.java
+++ b/src/com/android/gallery3d/data/FaceClustering.java
@@ -83,7 +83,7 @@ public class FaceClustering extends Clustering {
}
public FaceClustering(Context context) {
- mUntaggedString = context.getResources().getString(R.string.untagged);
+ mUntaggedString = context.getResources().getString(R.string.no_faces);
mContext = context;
}
diff --git a/src/com/android/gallery3d/data/FilterDeleteSet.java b/src/com/android/gallery3d/data/FilterDeleteSet.java
index c76412ff8..f7329739d 100644
--- a/src/com/android/gallery3d/data/FilterDeleteSet.java
+++ b/src/com/android/gallery3d/data/FilterDeleteSet.java
@@ -223,6 +223,11 @@ public class FilterDeleteSet extends MediaSet implements ContentListener {
return mDataVersion;
}
+ @Override
+ public int getCurrectSize() {
+ return mCurrent.size();
+ }
+
private void sendRequest(int type, Path path, int indexHint) {
Request r = new Request(type, path, indexHint);
synchronized (mRequests) {
diff --git a/src/com/android/gallery3d/data/LocalAlbum.java b/src/com/android/gallery3d/data/LocalAlbum.java
index 7b7015af6..0757d8883 100644
--- a/src/com/android/gallery3d/data/LocalAlbum.java
+++ b/src/com/android/gallery3d/data/LocalAlbum.java
@@ -95,7 +95,7 @@ public class LocalAlbum extends MediaSet {
@Override
public boolean isCameraRoll() {
- return mBucketId == MediaSetUtils.CAMERA_BUCKET_ID;
+ return mBucketId == MediaSetUtils.getCameraBucketId();
}
@Override
@@ -279,7 +279,7 @@ public class LocalAlbum extends MediaSet {
public static String getLocalizedName(Resources res, int bucketId,
String name) {
- if (bucketId == MediaSetUtils.CAMERA_BUCKET_ID) {
+ if (bucketId == MediaSetUtils.getCameraBucketId()) {
return res.getString(R.string.folder_camera);
} else if (bucketId == MediaSetUtils.DOWNLOAD_BUCKET_ID) {
return res.getString(R.string.folder_download);
@@ -297,7 +297,7 @@ public class LocalAlbum extends MediaSet {
// Relative path is the absolute path minus external storage path
public static String getRelativePath(int bucketId) {
String relativePath = "/";
- if (bucketId == MediaSetUtils.CAMERA_BUCKET_ID) {
+ if (bucketId == MediaSetUtils.getCameraBucketId()) {
relativePath += BucketNames.CAMERA;
} else if (bucketId == MediaSetUtils.DOWNLOAD_BUCKET_ID) {
relativePath += BucketNames.DOWNLOAD;
diff --git a/src/com/android/gallery3d/data/LocalAlbumSet.java b/src/com/android/gallery3d/data/LocalAlbumSet.java
index b2b4b8c5d..877eaff5c 100644
--- a/src/com/android/gallery3d/data/LocalAlbumSet.java
+++ b/src/com/android/gallery3d/data/LocalAlbumSet.java
@@ -113,7 +113,7 @@ public class LocalAlbumSet extends MediaSet
int offset = 0;
// Move camera and download bucket to the front, while keeping the
// order of others.
- int index = findBucket(entries, MediaSetUtils.CAMERA_BUCKET_ID);
+ int index = findBucket(entries, MediaSetUtils.getCameraBucketId());
if (index != -1) {
circularShiftRight(entries, offset++, index);
}
diff --git a/src/com/android/gallery3d/data/MediaDetails.java b/src/com/android/gallery3d/data/MediaDetails.java
index cac524b88..225266029 100644
--- a/src/com/android/gallery3d/data/MediaDetails.java
+++ b/src/com/android/gallery3d/data/MediaDetails.java
@@ -17,15 +17,11 @@
package com.android.gallery3d.data;
import com.android.gallery3d.R;
-import com.android.gallery3d.common.Utils;
import com.android.gallery3d.exif.ExifInterface;
import com.android.gallery3d.exif.ExifTag;
-import com.android.gallery3d.exif.Rational;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
@@ -50,15 +46,16 @@ public class MediaDetails implements Iterable<Entry<Integer, Object>> {
public static final int INDEX_SIZE = 10;
// for EXIF
- public static final int INDEX_MAKE = 100;
- public static final int INDEX_MODEL = 101;
- public static final int INDEX_FLASH = 102;
- public static final int INDEX_FOCAL_LENGTH = 103;
- public static final int INDEX_WHITE_BALANCE = 104;
- public static final int INDEX_APERTURE = 105;
- public static final int INDEX_SHUTTER_SPEED = 106;
- public static final int INDEX_EXPOSURE_TIME = 107;
- public static final int INDEX_ISO = 108;
+ public static final int INDEX_DATETIME_ORIGINAL = 100;
+ public static final int INDEX_MAKE = 101;
+ public static final int INDEX_MODEL = 102;
+ public static final int INDEX_FLASH = 103;
+ public static final int INDEX_FOCAL_LENGTH = 104;
+ public static final int INDEX_WHITE_BALANCE = 105;
+ public static final int INDEX_APERTURE = 106;
+ public static final int INDEX_SHUTTER_SPEED = 107;
+ public static final int INDEX_EXPOSURE_TIME = 108;
+ public static final int INDEX_ISO = 109;
// Put this last because it may be long.
public static final int INDEX_PATH = 200;
@@ -148,6 +145,12 @@ public class MediaDetails implements Iterable<Entry<Integer, Object>> {
MediaDetails.INDEX_WIDTH);
setExifData(details, exif.getTag(ExifInterface.TAG_IMAGE_LENGTH),
MediaDetails.INDEX_HEIGHT);
+ ExifTag recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME_ORIGINAL);
+ if (recordTag == null)
+ recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME_DIGITIZED);
+ if (recordTag == null)
+ recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME);
+ setExifData(details, recordTag, MediaDetails.INDEX_DATETIME_ORIGINAL);
setExifData(details, exif.getTag(ExifInterface.TAG_MAKE),
MediaDetails.INDEX_MAKE);
setExifData(details, exif.getTag(ExifInterface.TAG_MODEL),
diff --git a/src/com/android/gallery3d/data/MediaItem.java b/src/com/android/gallery3d/data/MediaItem.java
index 59ea86551..92ac88dc6 100644
--- a/src/com/android/gallery3d/data/MediaItem.java
+++ b/src/com/android/gallery3d/data/MediaItem.java
@@ -37,6 +37,7 @@ public abstract class MediaItem extends MediaObject {
public static final int IMAGE_ERROR = -1;
public static final String MIME_TYPE_JPEG = "image/jpeg";
+ public static final String MIME_TYPE_GIF = "image/gif";
private static final int BYTESBUFFE_POOL_SIZE = 4;
private static final int BYTESBUFFER_SIZE = 200 * 1024;
diff --git a/src/com/android/gallery3d/data/MediaSet.java b/src/com/android/gallery3d/data/MediaSet.java
index 683aa6b32..4c009c735 100644
--- a/src/com/android/gallery3d/data/MediaSet.java
+++ b/src/com/android/gallery3d/data/MediaSet.java
@@ -87,6 +87,11 @@ public abstract class MediaSet extends MediaObject {
return 0;
}
+ public int getCurrectSize() {
+ // Dummy method, need to be override in implementation classes
+ return 0;
+ }
+
public MediaSet getSubMediaSet(int index) {
throw new IndexOutOfBoundsException();
}
diff --git a/src/com/android/gallery3d/data/SecureAlbum.java b/src/com/android/gallery3d/data/SecureAlbum.java
index 204f848f8..bb505a50f 100644
--- a/src/com/android/gallery3d/data/SecureAlbum.java
+++ b/src/com/android/gallery3d/data/SecureAlbum.java
@@ -151,7 +151,7 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
private boolean isCameraBucketEmpty(Uri baseUri) {
Uri uri = baseUri.buildUpon()
.appendQueryParameter("limit", "1").build();
- String[] selection = {String.valueOf(MediaSetUtils.CAMERA_BUCKET_ID)};
+ String[] selection = {String.valueOf(MediaSetUtils.getCameraBucketId())};
Cursor cursor = mContext.getContentResolver().query(uri, PROJECTION,
"bucket_id = ?", selection, null);
if (cursor == null) return true;
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index e627a612b..fe383cef7 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -84,6 +84,7 @@ import com.android.gallery3d.filtershow.editors.EditorColorBorder;
import com.android.gallery3d.filtershow.editors.EditorCrop;
import com.android.gallery3d.filtershow.editors.EditorDraw;
import com.android.gallery3d.filtershow.editors.EditorGrad;
+import com.android.gallery3d.filtershow.editors.EditorMakeup;
import com.android.gallery3d.filtershow.editors.EditorManager;
import com.android.gallery3d.filtershow.editors.EditorMirror;
import com.android.gallery3d.filtershow.editors.EditorPanel;
@@ -100,6 +101,7 @@ import com.android.gallery3d.filtershow.filters.FilterStraightenRepresentation;
import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
import com.android.gallery3d.filtershow.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilter;
+import com.android.gallery3d.filtershow.filters.SimpleMakeupImageFilter;
import com.android.gallery3d.filtershow.history.HistoryItem;
import com.android.gallery3d.filtershow.history.HistoryManager;
import com.android.gallery3d.filtershow.imageshow.ImageShow;
@@ -120,6 +122,7 @@ import com.android.gallery3d.filtershow.ui.ExportDialog;
import com.android.gallery3d.filtershow.ui.FramedTextButton;
import com.android.gallery3d.util.GalleryUtils;
import com.android.photos.data.GalleryBitmapPool;
+import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine;
import java.io.File;
import java.io.FileDescriptor;
@@ -178,6 +181,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private CategoryAdapter mCategoryGeometryAdapter = null;
private CategoryAdapter mCategoryFiltersAdapter = null;
private CategoryAdapter mCategoryVersionsAdapter = null;
+ private CategoryAdapter mCategoryMakeupAdapter = null;
private int mCurrentPanel = MainPanel.LOOKS;
private Vector<FilterUserPresetRepresentation> mVersions =
new Vector<FilterUserPresetRepresentation>();
@@ -195,6 +199,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private DialogInterface mCurrentDialog = null;
private PopupMenu mCurrentMenu = null;
private boolean mLoadingVisible = true;
+ private boolean mLoadingComplete = false;
public ProcessingService getProcessingService() {
return mBoundService;
@@ -283,6 +288,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
doBindService();
getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY));
setContentView(R.layout.filtershow_splashscreen);
+ mLoadingComplete = false;
}
public boolean isShowingImageStatePanel() {
@@ -351,8 +357,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(R.layout.filtershow_actionbar);
- actionBar.setBackgroundDrawable(new ColorDrawable(
- getResources().getColor(R.color.background_screen)));
mSaveButton = actionBar.getCustomView();
mSaveButton.setOnClickListener(new OnClickListener() {
@@ -380,6 +384,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
fillTools();
fillEffects();
fillVersions();
+ fillMakeup();
}
public void setupStatePanel() {
@@ -468,6 +473,25 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
}
}
+ private void fillMakeup() {
+ if(!SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
+ return;
+ }
+
+ FiltersManager filtersManager = FiltersManager.getManager();
+ ArrayList<FilterRepresentation> makeups = filtersManager.getMakeup();
+ if (mCategoryMakeupAdapter != null) {
+ mCategoryMakeupAdapter.clear();
+ }
+ mCategoryMakeupAdapter = new CategoryAdapter(this);
+ for (FilterRepresentation makeup : makeups) {
+ if (makeup.getTextId() != 0) {
+ makeup.setName(getString(makeup.getTextId()));
+ }
+ mCategoryMakeupAdapter.add(new Action(this, makeup));
+ }
+ }
+
private void fillTools() {
FiltersManager filtersManager = FiltersManager.getManager();
ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getTools();
@@ -483,7 +507,8 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
}
}
if (!found) {
- FilterRepresentation representation = new FilterDrawRepresentation();
+ FilterRepresentation representation =
+ new FilterDrawRepresentation(getString(R.string.imageDraw));
Action action = new Action(this, representation);
action.setIsDoubleAction(true);
mCategoryGeometryAdapter.add(action);
@@ -528,6 +553,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
mEditorPlaceHolder.addEditor(new EditorMirror());
mEditorPlaceHolder.addEditor(new EditorRotate());
mEditorPlaceHolder.addEditor(new EditorStraighten());
+ mEditorPlaceHolder.addEditor(new EditorMakeup());
}
private void setDefaultValues() {
@@ -558,24 +584,15 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private void fillBorders() {
FiltersManager filtersManager = FiltersManager.getManager();
ArrayList<FilterRepresentation> borders = filtersManager.getBorders();
+ mCategoryBordersAdapter = new CategoryAdapter(this);
for (int i = 0; i < borders.size(); i++) {
FilterRepresentation filter = borders.get(i);
- filter.setName(getString(R.string.borders));
+ filter.setName(getString(R.string.borders) + "" + i);
if (i == 0) {
filter.setName(getString(R.string.none));
}
- }
-
- if (mCategoryBordersAdapter != null) {
- mCategoryBordersAdapter.clear();
- }
- mCategoryBordersAdapter = new CategoryAdapter(this);
- for (FilterRepresentation representation : borders) {
- if (representation.getTextId() != 0) {
- representation.setName(getString(representation.getTextId()));
- }
- mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW));
+ mCategoryBordersAdapter.add(new Action(this, filter, Action.FULL_VIEW));
}
}
@@ -591,6 +608,10 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
return mCategoryBordersAdapter;
}
+ public CategoryAdapter getCategoryMakeupAdapter() {
+ return mCategoryMakeupAdapter;
+ }
+
public CategoryAdapter getCategoryGeometryAdapter() {
return mCategoryGeometryAdapter;
}
@@ -744,16 +765,16 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
MasterImage master = MasterImage.getImage();
Rect originalBounds = master.getOriginalBounds();
if (master.supportsHighRes()) {
- int highresPreviewSize = master.getOriginalBitmapLarge().getWidth() * 2;
- if (highresPreviewSize > originalBounds.width()) {
- highresPreviewSize = originalBounds.width();
- }
+ int highresPreviewSize = Math.min(MasterImage.MAX_BITMAP_DIM, getScreenImageSize());
+ Log.d(LOGTAG, "FilterShowActivity.LoadHighresBitmapTask.doInBackground(): after, highresPreviewSize is " + highresPreviewSize);
Rect bounds = new Rect();
Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(),
master.getActivity(), highresPreviewSize,
master.getOrientation(), bounds);
master.setOriginalBounds(bounds);
master.setOriginalBitmapHighres(originalHires);
+ Log.d(LOGTAG, "FilterShowActivity.LoadHighresBitmapTask.doInBackground(): originalHires.WH is (" + originalHires.getWidth()
+ + ", " + originalHires.getHeight() +"), bounds is " + bounds.toString());
mBoundService.setOriginalBitmapHighres(originalHires);
master.warnListeners();
}
@@ -766,6 +787,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (highresBitmap != null) {
float highResPreviewScale = (float) highresBitmap.getWidth()
/ (float) MasterImage.getImage().getOriginalBounds().width();
+ Log.d(LOGTAG, "FilterShowActivity.LoadHighresBitmapTask.onPostExecute(): highResPreviewScale is " + highResPreviewScale);
mBoundService.setHighresPreviewScaleFactor(highResPreviewScale);
}
MasterImage.getImage().warnListeners();
@@ -793,6 +815,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
public LoadBitmapTask() {
mBitmapSize = getScreenImageSize();
+ Log.d(LOGTAG, "FilterShowActivity.LoadBtimapTask(): mBitmapSize is " + mBitmapSize);
}
@Override
@@ -849,6 +872,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
float previewScale = (float) largeBitmap.getWidth()
/ (float) MasterImage.getImage().getOriginalBounds().width();
+ Log.d(LOGTAG, "FilterShowActivity.LoadBitmapTask.onPostExecute(): previewScale is " + previewScale);
mBoundService.setPreviewScaleFactor(previewScale);
if (!mShowingTinyPlanet) {
mCategoryFiltersAdapter.removeTinyPlanet();
@@ -857,10 +881,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
mCategoryBordersAdapter.imageLoaded();
mCategoryGeometryAdapter.imageLoaded();
mCategoryFiltersAdapter.imageLoaded();
+ if(mCategoryMakeupAdapter != null) {
+ mCategoryMakeupAdapter.imageLoaded();
+ }
mLoadBitmapTask = null;
MasterImage.getImage().warnListeners();
loadActions();
+ mLoadingComplete = false;
if (mOriginalPreset != null) {
MasterImage.getImage().setLoadedPreset(mOriginalPreset);
@@ -1030,6 +1058,9 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (mShareActionProvider != null) {
mShareActionProvider.setOnShareTargetSelectedListener(this);
}
+ if(SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
+ MakeupEngine.getMakeupObj().setContext(getBaseContext());
+ }
}
@Override
@@ -1162,6 +1193,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
}
public void enableSave(boolean enable) {
+ mLoadingComplete = true;
if (mSaveButton != null) {
mSaveButton.setEnabled(enable);
}
@@ -1329,6 +1361,10 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG);
if (currentPanel instanceof MainPanel) {
if (!mImageShow.hasModifications()) {
+ if (!mLoadingComplete) {
+ Log.v(LOGTAG,"Background processing is ON, rejecting back key event");
+ return;
+ }
done();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
index 52c296c78..30d535d77 100644
--- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
+++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
@@ -108,7 +108,7 @@ public final class ImageLoader {
new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
null, null, null);
if (cursor != null && cursor.moveToNext()) {
- int ori = cursor.getInt(0);
+ int ori = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION);
switch (ori) {
case 90:
return ORI_ROTATE_90;
@@ -147,6 +147,8 @@ public final class ImageLoader {
return parseExif(exif);
} catch (IOException e) {
Log.w(LOGTAG, "Failed to read EXIF orientation", e);
+ } catch (NullPointerException e) {
+ Log.w(LOGTAG, "Invalid EXIF data", e);
} finally {
try {
if (is != null) {
@@ -576,6 +578,8 @@ public final class ImageLoader {
return taglist;
} catch (IOException e) {
Log.w(LOGTAG, "Failed to read EXIF tags", e);
+ } catch (NullPointerException e) {
+ Log.e(LOGTAG, "Failed to read EXIF tags", e);
}
}
return null;
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
index 09f02dd37..50f0e9436 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
@@ -79,6 +79,9 @@ public class CategoryAdapter extends ArrayAdapter<Action> {
mSelectedPosition = 0;
mAddButtonText = getContext().getString(R.string.filtershow_add_button_looks);
}
+// if (category == MainPanel.MAKEUP) {
+// mSelectedPosition = 0;
+// }
if (category == MainPanel.BORDERS) {
mSelectedPosition = 0;
}
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
index fb51bf5ad..66b352ffb 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryPanel.java
@@ -29,7 +29,7 @@ import android.widget.ListView;
import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
-
+import android.util.Log;
public class CategoryPanel extends Fragment implements View.OnClickListener {
public static final String FRAGMENT_TAG = "CategoryPanel";
@@ -89,6 +89,13 @@ public class CategoryPanel extends Fragment implements View.OnClickListener {
}
break;
}
+ case MainPanel.MAKEUP: {
+ mAdapter = activity.getCategoryMakeupAdapter();
+ if (mAdapter != null) {
+ mAdapter.initializeSelection(MainPanel.MAKEUP);
+ }
+ break;
+ }
}
updateAddButtonVisibility();
}
@@ -148,7 +155,7 @@ public class CategoryPanel extends Fragment implements View.OnClickListener {
return;
}
FilterShowActivity activity = (FilterShowActivity) getActivity();
- if (activity.isShowingImageStatePanel() && mAdapter.showAddButton()) {
+ if (activity.isShowingImageStatePanel() && mAdapter != null && mAdapter.showAddButton()) {
mAddButton.setVisibility(View.VISIBLE);
if (mAdapter != null) {
mAddButton.setText(mAdapter.getAddButtonText());
diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java
index 082bf143a..1dbe42083 100644
--- a/src/com/android/gallery3d/filtershow/category/MainPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java
@@ -24,9 +24,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.LinearLayout;
-
+import android.util.Log;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.filters.SimpleMakeupImageFilter;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
import com.android.gallery3d.filtershow.state.StatePanel;
@@ -39,6 +40,7 @@ public class MainPanel extends Fragment {
private ImageButton bordersButton;
private ImageButton geometryButton;
private ImageButton filtersButton;
+ private ImageButton makeupButton;
public static final String FRAGMENT_TAG = "MainPanel";
public static final int LOOKS = 0;
@@ -46,6 +48,7 @@ public class MainPanel extends Fragment {
public static final int GEOMETRY = 2;
public static final int FILTERS = 3;
public static final int VERSIONS = 4;
+ public static final int MAKEUP = 5;
private int mCurrentSelected = -1;
private int mPreviousToggleVersions = -1;
@@ -72,6 +75,12 @@ public class MainPanel extends Fragment {
filtersButton.setSelected(value);
break;
}
+ case MAKEUP: {
+ if(makeupButton != null) {
+ makeupButton.setSelected(value);
+ }
+ break;
+ }
}
}
@@ -97,6 +106,19 @@ public class MainPanel extends Fragment {
bordersButton = (ImageButton) mMainView.findViewById(R.id.borderButton);
geometryButton = (ImageButton) mMainView.findViewById(R.id.geometryButton);
filtersButton = (ImageButton) mMainView.findViewById(R.id.colorsButton);
+ if(SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
+ makeupButton = (ImageButton) mMainView.findViewById(R.id.makeupButton);
+ makeupButton.setVisibility(View.VISIBLE);
+ }
+
+ if(makeupButton != null) {
+ makeupButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showPanel(MAKEUP);
+ }
+ });
+ }
looksButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -173,6 +195,19 @@ public class MainPanel extends Fragment {
selection(mCurrentSelected, true);
}
+ public void loadCategoryMakeupPanel() {
+ if (makeupButton == null || mCurrentSelected == MAKEUP) {
+ return;
+ }
+ boolean fromRight = isRightAnimation(MAKEUP);
+ selection(mCurrentSelected, false);
+ CategoryPanel categoryPanel = new CategoryPanel();
+ categoryPanel.setAdapter(MAKEUP);
+ setCategoryFragment(categoryPanel, fromRight);
+ mCurrentSelected = MAKEUP;
+ selection(mCurrentSelected, true);
+ }
+
public void loadCategoryGeometryPanel() {
if (mCurrentSelected == GEOMETRY) {
return;
@@ -239,6 +274,10 @@ public class MainPanel extends Fragment {
loadCategoryVersionsPanel();
break;
}
+ case MAKEUP: {
+ loadCategoryMakeupPanel();
+ break;
+ }
}
}
diff --git a/src/com/android/gallery3d/filtershow/controller/ColorChooser.java b/src/com/android/gallery3d/filtershow/controller/ColorChooser.java
index f9f29bccc..82ce80bbf 100644
--- a/src/com/android/gallery3d/filtershow/controller/ColorChooser.java
+++ b/src/com/android/gallery3d/filtershow/controller/ColorChooser.java
@@ -68,9 +68,16 @@ public class ColorChooser implements Control {
Color.colorToHSV(palette[i], hsvo);
hsvo[OPACITY_OFFSET] = (0xFF & (palette[i] >> 24)) / (float) 255;
button.setTag(hsvo);
+
+ String colorString = "(" + Integer.toHexString(palette[i]) + ")";
+ boolean colorSelect = false;
+ if (parameter.getValueString().equals(colorString)) {
+ mSelectedButton = i;
+ colorSelect = true;
+ }
GradientDrawable sd = ((GradientDrawable) button.getBackground());
sd.setColor(palette[i]);
- sd.setStroke(3, (mSelectedButton == i) ? mSelected : mTransparent);
+ sd.setStroke(3, colorSelect? mSelected : mTransparent);
final int buttonNo = i;
button.setOnClickListener(new View.OnClickListener() {
diff --git a/src/com/android/gallery3d/filtershow/controller/StyleChooser.java b/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
index f5afec921..dc31401e0 100644
--- a/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
+++ b/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
@@ -41,7 +41,7 @@ public class StyleChooser implements Control {
int n = mParameter.getNumberOfStyles();
mIconButton.clear();
Resources res = context.getResources();
- int dim = res.getDimensionPixelSize(R.dimen.draw_style_icon_dim);
+ int dim = mTopView.getMeasuredWidth() / n;
LayoutParams lp = new LayoutParams(dim, dim);
for (int i = 0; i < n; i++) {
final ImageButton button = new ImageButton(context);
diff --git a/src/com/android/gallery3d/filtershow/crop/CropActivity.java b/src/com/android/gallery3d/filtershow/crop/CropActivity.java
index 3a7829681..94c859333 100644
--- a/src/com/android/gallery3d/filtershow/crop/CropActivity.java
+++ b/src/com/android/gallery3d/filtershow/crop/CropActivity.java
@@ -83,7 +83,7 @@ public class CropActivity extends Activity {
* sure the intent stays below 1MB.We should consider just returning a byte
* array instead of a Bitmap instance to avoid overhead.
*/
- public static final int MAX_BMAP_IN_INTENT = 750000;
+ public static final int MAX_BMAP_IN_INTENT = 520000;
// Flags
private static final int DO_SET_WALLPAPER = 1;
@@ -400,16 +400,8 @@ public class CropActivity extends Activity {
mOutputX = outputX;
mOutputY = outputY;
- if ((flags & DO_EXTRA_OUTPUT) != 0) {
- if (mOutUri == null) {
- Log.w(LOGTAG, "cannot write file, no output URI given");
- } else {
- try {
- mOutStream = getContentResolver().openOutputStream(mOutUri);
- } catch (FileNotFoundException e) {
- Log.w(LOGTAG, "cannot write file: " + mOutUri.toString(), e);
- }
- }
+ if ((flags & DO_EXTRA_OUTPUT) != 0 && mOutUri == null) {
+ Log.w(LOGTAG, "cannot write file, no output URI given");
}
if ((flags & (DO_EXTRA_OUTPUT | DO_SET_WALLPAPER)) != 0) {
@@ -542,7 +534,14 @@ public class CropActivity extends Activity {
// Get output compression format
CompressFormat cf =
convertExtensionToCompressFormat(getFileExtension(mOutputFormat));
-
+ Utils.closeSilently(mInStream);
+ if (mOutUri != null) {
+ try {
+ mOutStream = getContentResolver().openOutputStream(mOutUri);
+ } catch (FileNotFoundException e) {
+ Log.w(LOGTAG, "cannot write file: " + mOutUri.toString(), e);
+ }
+ }
// If we only need to output to a URI, compress straight to file
if (mFlags == DO_EXTRA_OUTPUT) {
if (mOutStream == null
@@ -604,7 +603,7 @@ public class CropActivity extends Activity {
@Override
protected void onPostExecute(Boolean result) {
Utils.closeSilently(mOutStream);
- Utils.closeSilently(mInStream);
+ // Utils.closeSilently(mInStream);
doneBitmapIO(result.booleanValue(), mResultIntent);
}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java
new file mode 100644
index 000000000..331d31b57
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java
@@ -0,0 +1,44 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.editors;
+
+import android.view.View;
+import android.widget.SeekBar;
+
+import com.android.gallery3d.R;
+
+public class EditorMakeup extends BasicEditor {
+ public static int ID = R.id.editorMakeup;
+ private final String LOGTAG = "EditorMakeup";
+
+ public EditorMakeup() {
+ super(ID, R.layout.filtershow_default_editor, R.id.basicEditor);
+ }
+
+ @Override
+ public void setUtilityPanelUI(View actionButton, View editControl) {
+ super.setUtilityPanelUI(actionButton, editControl);
+ mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
+ if (mSeekBar != null) {
+ mSeekBar.setVisibility(View.INVISIBLE);
+ }
+ }
+
+
+
+}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorPanel.java b/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
index a60b6722c..0581835f4 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
@@ -20,6 +20,7 @@ import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -50,6 +51,7 @@ public class EditorPanel extends Fragment {
super.onAttach(activity);
FilterShowActivity filterShowActivity = (FilterShowActivity) activity;
mEditor = filterShowActivity.getEditor(mEditorID);
+ Log.d(LOGTAG, "EditorPanle.onAttach(): mEditorID is " + mEditorID + ", mEditor is " + mEditor);
}
public void cancelCurrentFilter() {
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index 8350ff356..e93175a92 100644
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -36,6 +36,7 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
protected ArrayList<FilterRepresentation> mBorders = new ArrayList<FilterRepresentation>();
protected ArrayList<FilterRepresentation> mTools = new ArrayList<FilterRepresentation>();
protected ArrayList<FilterRepresentation> mEffects = new ArrayList<FilterRepresentation>();
+ protected ArrayList<FilterRepresentation> mMakeup = new ArrayList<FilterRepresentation>();
private static int mImageBorderSize = 4; // in percent
protected void init() {
@@ -140,6 +141,12 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
filters.add(ImageFilterFx.class);
filters.add(ImageFilterBorder.class);
filters.add(ImageFilterColorBorder.class);
+ if(SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
+ filters.add(ImageFilterMakeupWhiten.class);
+ filters.add(ImageFilterMakeupSoften.class);
+ filters.add(ImageFilterMakeupTrimface.class);
+ filters.add(ImageFilterMakeupBigeye.class);
+ }
}
public ArrayList<FilterRepresentation> getLooks() {
@@ -158,8 +165,11 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
return mEffects;
}
- public void addBorders(Context context) {
+ public ArrayList<FilterRepresentation> getMakeup() {
+ return mMakeup;
+ }
+ public void addBorders(Context context) {
// Do not localize
String[] serializationNames = {
"FRAME_4X5",
@@ -305,6 +315,15 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
mEffects.add(getRepresentation(ImageFilterKMeans.class));
}
+ public void addMakeups(Context context) {
+ if(SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
+ mMakeup.add(getRepresentation(ImageFilterMakeupWhiten.class));
+ mMakeup.add(getRepresentation(ImageFilterMakeupSoften.class));
+ mMakeup.add(getRepresentation(ImageFilterMakeupTrimface.class));
+ mMakeup.add(getRepresentation(ImageFilterMakeupBigeye.class));
+ }
+ }
+
public void addTools(Context context) {
int[] textId = {
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterCropRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterCropRepresentation.java
index ba697d87f..98afc3a08 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterCropRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterCropRepresentation.java
@@ -65,6 +65,9 @@ public class FilterCropRepresentation extends FilterRepresentation {
return false;
}
FilterCropRepresentation crop = (FilterCropRepresentation) rep;
+ if (crop.isNil()) {
+ return true;
+ }
if (mCrop.bottom != crop.mCrop.bottom
|| mCrop.left != crop.mCrop.left
|| mCrop.right != crop.mCrop.right
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java
index 48d3d9077..5c5e561ca 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterDrawRepresentation.java
@@ -157,15 +157,20 @@ public class FilterDrawRepresentation extends FilterRepresentation {
private Vector<StrokeData> mDrawing = new Vector<StrokeData>();
private StrokeData mCurrent; // used in the currently drawing style
- public FilterDrawRepresentation() {
- super("Draw");
+ public FilterDrawRepresentation(String name) {
+ super(name);
setFilterClass(ImageFilterDraw.class);
- setSerializationName("DRAW");
+ setSerializationName(name);
setFilterType(FilterRepresentation.TYPE_VIGNETTE);
setTextId(R.string.imageDraw);
setEditorId(EditorDraw.ID);
setOverlayId(R.drawable.filtershow_drawing);
setOverlayOnly(true);
+ setDefaultColor();
+ }
+
+ private void setDefaultColor() {
+ mParamColor.setValue(DEFAULT_MENU_COLOR1);
}
@Override
@@ -185,7 +190,7 @@ public class FilterDrawRepresentation extends FilterRepresentation {
@Override
public FilterRepresentation copy() {
- FilterDrawRepresentation representation = new FilterDrawRepresentation();
+ FilterDrawRepresentation representation = new FilterDrawRepresentation(getName());
copyAllParameters(representation);
return representation;
}
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
index 0fb157d7b..36675b71b 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java
@@ -47,6 +47,7 @@ public class FilterRepresentation {
public static final byte TYPE_NORMAL = 5;
public static final byte TYPE_TINYPLANET = 6;
public static final byte TYPE_GEOMETRY = 7;
+ public static final byte TYPE_MAKEUP = 8;
protected static final String NAME_TAG = "Name";
public FilterRepresentation(String name) {
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
index 437137416..1fcd3008c 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
@@ -19,7 +19,7 @@ package com.android.gallery3d.filtershow.filters;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
-import android.support.v8.renderscript.Allocation;
+import android.renderscript.Allocation;
import android.widget.Toast;
import com.android.gallery3d.filtershow.imageshow.GeometryMathUtils;
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
index a7286f0fa..5f3502272 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
@@ -18,13 +18,15 @@ package com.android.gallery3d.filtershow.filters;
import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import com.android.gallery3d.data.DecodeUtils;
+
import java.util.HashMap;
+import java.lang.ref.WeakReference;
public class ImageFilterBorder extends ImageFilter {
private static final float NINEPATCH_ICON_SCALING = 10;
@@ -32,7 +34,7 @@ public class ImageFilterBorder extends ImageFilter {
private FilterImageBorderRepresentation mParameters = null;
private Resources mResources = null;
- private HashMap<Integer, Drawable> mDrawables = new HashMap<Integer, Drawable>();
+ private HashMap<Integer, WeakReference<Drawable>> mDrawables = new HashMap<Integer, WeakReference<Drawable>>();
public ImageFilterBorder() {
mName = "Border";
@@ -57,7 +59,7 @@ public class ImageFilterBorder extends ImageFilter {
Rect bounds = new Rect(0, 0, (int) (w * scale1), (int) (h * scale1));
Canvas canvas = new Canvas(bitmap);
canvas.scale(scale2, scale2);
- Drawable drawable = getDrawable(getParameters().getDrawableResource());
+ Drawable drawable = getDrawable(getParameters().getDrawableResource(), w, h);
drawable.setBounds(bounds);
drawable.draw(canvas);
return bitmap;
@@ -80,11 +82,12 @@ public class ImageFilterBorder extends ImageFilter {
}
}
- public Drawable getDrawable(int rsc) {
- Drawable drawable = mDrawables.get(rsc);
+ public Drawable getDrawable(int rsc, int reqWidth, int reqHeight) {
+ Drawable drawable = (mDrawables.get(rsc) != null) ? mDrawables.get(rsc).get() : null;
if (drawable == null && mResources != null && rsc != 0) {
- drawable = new BitmapDrawable(mResources, BitmapFactory.decodeResource(mResources, rsc));
- mDrawables.put(rsc, drawable);
+ drawable = new BitmapDrawable(mResources, DecodeUtils.decodeBitmap(
+ mResources, rsc, reqWidth, reqHeight));
+ mDrawables.put(rsc, new WeakReference<Drawable>(drawable));
}
return drawable;
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java
index 5d3856ebc..6c48a6a9f 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java
@@ -18,11 +18,11 @@ package com.android.gallery3d.filtershow.filters;
import android.graphics.Bitmap;
import android.graphics.Matrix;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.Element;
-import android.support.v8.renderscript.RenderScript;
-import android.support.v8.renderscript.Script.LaunchOptions;
-import android.support.v8.renderscript.Type;
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.RenderScript;
+import android.renderscript.Script;
+import android.renderscript.Type;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
@@ -132,7 +132,7 @@ public class ImageFilterChanSat extends ImageFilterRS {
int width = in.getType().getX();
int height = in.getType().getY();
- LaunchOptions options = new LaunchOptions();
+ Script.LaunchOptions options = new Script.LaunchOptions();
int ty;
options.setX(0, width);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDraw.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDraw.java
index 8fd5b029e..da7de9379 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDraw.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDraw.java
@@ -29,6 +29,7 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import com.android.gallery3d.R;
+import com.android.gallery3d.app.GalleryAppImpl;
import com.android.gallery3d.app.Log;
import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation.StrokeData;
@@ -47,7 +48,8 @@ public class ImageFilterDraw extends ImageFilter {
int mCachedStrokes = -1;
int mCurrentStyle = 0;
- FilterDrawRepresentation mParameters = new FilterDrawRepresentation();
+ FilterDrawRepresentation mParameters = new FilterDrawRepresentation(
+ GalleryAppImpl.getContext().getString(R.string.imageDraw));
public ImageFilterDraw() {
mName = "Image Draw";
@@ -69,7 +71,8 @@ public class ImageFilterDraw extends ImageFilter {
@Override
public FilterRepresentation getDefaultRepresentation() {
- return new FilterDrawRepresentation();
+ return new FilterDrawRepresentation(
+ GalleryAppImpl.getContext().getString(R.string.imageDraw));
}
@Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java
index 0a615afd4..7f10af990 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java
@@ -26,11 +26,12 @@ import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Matrix;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.Element;
-import android.support.v8.renderscript.RenderScript;
-import android.support.v8.renderscript.Script.LaunchOptions;
-import android.support.v8.renderscript.Type;
+
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.RenderScript;
+import android.renderscript.Script;
+import android.renderscript.Type;
import android.util.Log;
import com.android.gallery3d.R;
@@ -161,7 +162,7 @@ public class ImageFilterGrad extends ImageFilterRS {
int width = in.getType().getX();
int height = in.getType().getY();
- LaunchOptions options = new LaunchOptions();
+ Script.LaunchOptions options = new Script.LaunchOptions();
int ty;
options.setX(0, width);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java
new file mode 100644
index 000000000..64067881e
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.filters;
+
+import android.graphics.Bitmap;
+
+import com.android.gallery3d.R;
+
+import com.thundersoft.hz.selfportrait.detect.FaceInfo;
+import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine;
+
+public class ImageFilterMakeupBigeye extends SimpleMakeupImageFilter {
+ private static final String SERIALIZATION_NAME = "BIGEYE";
+
+ public ImageFilterMakeupBigeye() {
+ mName = "Bigeye";
+ }
+
+ public FilterRepresentation getDefaultRepresentation() {
+ FilterBasicRepresentation representation =
+ (FilterBasicRepresentation) super.getDefaultRepresentation();
+ representation.setName("Bigeye");
+ representation.setSerializationName(SERIALIZATION_NAME);
+ representation.setFilterClass(ImageFilterMakeupBigeye.class);
+ representation.setTextId(R.string.text_makeup_bigeye);
+ representation.setOverlayOnly(true);
+ representation.setOverlayId(R.drawable.ic_ts_makeup_bigeye);
+ representation.setMinimum(0);
+ representation.setMaximum(100);
+ representation.setSupportsPartialRendering(true);
+ return representation;
+ }
+
+ protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height,
+ int value) {
+ MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2,
+ faceInfo.mouth, value, 0);
+ }
+}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java
new file mode 100644
index 000000000..8587158c3
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java
@@ -0,0 +1,52 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.filters;
+
+import android.graphics.Bitmap;
+
+import com.android.gallery3d.R;
+
+import com.thundersoft.hz.selfportrait.detect.FaceInfo;
+import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine;
+
+public class ImageFilterMakeupSoften extends SimpleMakeupImageFilter {
+ private static final String SERIALIZATION_NAME = "SOFTEN";
+
+ public ImageFilterMakeupSoften() {
+ mName = "Soften";
+ }
+
+ public FilterRepresentation getDefaultRepresentation() {
+ FilterBasicRepresentation representation =
+ (FilterBasicRepresentation) super.getDefaultRepresentation();
+ representation.setName("Soften");
+ representation.setSerializationName(SERIALIZATION_NAME);
+ representation.setFilterClass(ImageFilterMakeupSoften.class);
+ representation.setTextId(R.string.text_makeup_Soften);
+ representation.setOverlayOnly(true);
+ representation.setOverlayId(R.drawable.ic_ts_makeup_soften);
+ representation.setMinimum(0);
+ representation.setMaximum(100);
+ representation.setSupportsPartialRendering(true);
+ return representation;
+ }
+
+ protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) {
+ MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, value, 0);
+ }
+}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java
new file mode 100644
index 000000000..4b0499036
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java
@@ -0,0 +1,55 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.filters;
+
+import android.graphics.Bitmap;
+
+import com.android.gallery3d.R;
+
+import com.thundersoft.hz.selfportrait.detect.FaceInfo;
+import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine;
+
+public class ImageFilterMakeupTrimface extends SimpleMakeupImageFilter {
+ private static final String SERIALIZATION_NAME = "TRIMFACE";
+
+ public ImageFilterMakeupTrimface() {
+ mName = "Trimface";
+ }
+
+ public FilterRepresentation getDefaultRepresentation() {
+ FilterBasicRepresentation representation =
+ (FilterBasicRepresentation) super.getDefaultRepresentation();
+ representation.setName("Trimface");
+ representation.setSerializationName(SERIALIZATION_NAME);
+ representation.setFilterClass(ImageFilterMakeupTrimface.class);
+ representation.setTextId(R.string.text_makeup_trimface);
+ representation.setOverlayOnly(true);
+ representation.setOverlayId(R.drawable.ic_ts_makeup_trimface);
+ representation.setMinimum(0);
+ representation.setMaximum(100);
+ representation.setSupportsPartialRendering(true);
+ return representation;
+ }
+
+ protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height,
+ int value) {
+ MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2,
+ faceInfo.mouth, 0, value);
+ }
+
+}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java
new file mode 100644
index 000000000..e60be84d7
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.filters;
+
+import android.graphics.Bitmap;
+
+import com.android.gallery3d.R;
+
+import com.thundersoft.hz.selfportrait.detect.FaceInfo;
+import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine;
+
+public class ImageFilterMakeupWhiten extends SimpleMakeupImageFilter {
+ private static final String SERIALIZATION_NAME = "WHITEN";
+
+ public ImageFilterMakeupWhiten() {
+ mName = "Whiten";
+ }
+
+ public FilterRepresentation getDefaultRepresentation() {
+ FilterBasicRepresentation representation =
+ (FilterBasicRepresentation) super.getDefaultRepresentation();
+ representation.setName("Whiten");
+ representation.setSerializationName(SERIALIZATION_NAME);
+ representation.setFilterClass(ImageFilterMakeupWhiten.class);
+ representation.setTextId(R.string.text_makeup_whiten);
+ representation.setOverlayOnly(true);
+ representation.setOverlayId(R.drawable.ic_ts_makeup_whiten);
+ representation.setMinimum(0);
+ representation.setMaximum(100);
+ representation.setSupportsPartialRendering(true);
+ return representation;
+ }
+
+ protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) {
+ MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, 0, value);
+ }
+
+}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
index e94e2a63a..b7c4d80e0 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
@@ -18,7 +18,10 @@ package com.android.gallery3d.filtershow.filters;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.support.v8.renderscript.*;
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.RenderScript;
+import android.renderscript.Type;
import android.util.Log;
import android.content.res.Resources;
import com.android.gallery3d.R;
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
index e0b4cf687..279bd1857 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
@@ -24,11 +24,8 @@ import android.graphics.Rect;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.Element;
-import android.support.v8.renderscript.RenderScript;
-import android.support.v8.renderscript.Script.LaunchOptions;
-import android.support.v8.renderscript.Type;
+
+import android.renderscript.RenderScript;
import android.util.Log;
public class ImageFilterVignette extends ImageFilterRS {
diff --git a/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java
new file mode 100644
index 000000000..584074c02
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java
@@ -0,0 +1,82 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.gallery3d.filtershow.filters;
+
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import com.thundersoft.hz.selfportrait.detect.FaceDetect;
+import com.thundersoft.hz.selfportrait.detect.FaceInfo;
+
+public abstract class SimpleMakeupImageFilter extends SimpleImageFilter {
+ private static final String LOGTAG = "SimpleMakeupImageFilter";
+ protected static final int MAKEUP_INTENSITY = 50;
+
+ public static final boolean HAS_TS_MAKEUP = android.os.SystemProperties.getBoolean("persist.ts.postmakeup", false);
+
+ public SimpleMakeupImageFilter() {
+ }
+
+ public FilterRepresentation getDefaultRepresentation() {
+ FilterRepresentation representation = new FilterBasicRepresentation("Default", 0,
+ MAKEUP_INTENSITY, 100);
+ representation.setShowParameterValue(true);
+ return representation;
+ }
+
+ protected FaceInfo detectFaceInfo(Bitmap bitmap) {
+ FaceDetect faceDetect = new FaceDetect();
+ faceDetect.initialize();
+ FaceInfo[] faceInfos = faceDetect.dectectFeatures(bitmap);
+ faceDetect.uninitialize();
+
+ Log.v(LOGTAG, "SimpleMakeupImageFilter.detectFaceInfo(): detect faceNum is "
+ + (faceInfos != null ? faceInfos.length : "NULL"));
+ if (faceInfos == null || faceInfos.length <= 0) {
+ return null;
+ }
+
+ return faceInfos[0];
+ }
+
+ @Override
+ public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
+ if (getParameters() == null) {
+ return bitmap;
+ }
+ int w = bitmap.getWidth();
+ int h = bitmap.getHeight();
+ if(w % 2 != 0 || h % 2 != 0) {
+ return bitmap;
+ }
+ int value = getParameters().getValue();
+ applyHelper(bitmap, w, h, value);
+ return bitmap;
+ }
+
+ private void applyHelper(Bitmap bitmap, int w, int h, int value) {
+ FaceInfo faceInfo = detectFaceInfo(bitmap);
+ if(faceInfo != null) {
+ doMakeupEffect(bitmap, faceInfo, w, h, value);
+ }
+ }
+
+ abstract void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height,
+ int value);
+
+}
diff --git a/src/com/android/gallery3d/filtershow/history/HistoryManager.java b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
index 569b299cc..9d5065a28 100644
--- a/src/com/android/gallery3d/filtershow/history/HistoryManager.java
+++ b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
@@ -68,7 +68,7 @@ public class HistoryManager {
}
public boolean canUndo() {
- if (mCurrentPresetPosition == getCount() - 1) {
+ if (mCurrentPresetPosition >= getCount() - 1) {
return false;
}
return true;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 2022ffd7e..d7c2eb4f8 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -288,7 +288,7 @@ public class ImageShow extends View implements OnGestureListener,
drawImageAndAnimate(canvas, highresPreview);
}
- drawHighresImage(canvas, fullHighres);
+// drawHighresImage(canvas, fullHighres);
drawCompareImage(canvas, getGeometryOnlyImage());
canvas.restore();
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index f6b97f11f..5e27f4213 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -25,6 +25,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
+import android.util.Log;
import com.android.gallery3d.exif.ExifTag;
import com.android.gallery3d.filtershow.FilterShowActivity;
@@ -211,6 +212,9 @@ public class MasterImage implements RenderingRequestCaller {
int sh = (int) (sw * (float) mOriginalBitmapLarge.getHeight() / mOriginalBitmapLarge
.getWidth());
mOriginalBitmapSmall = Bitmap.createScaledBitmap(mOriginalBitmapLarge, sw, sh, true);
+ Log.d(LOGTAG, "MasterImage.loadBitmap(): OriginalBitmapLarge.WH is (" + mOriginalBitmapLarge.getWidth() + ", "
+ + mOriginalBitmapLarge.getHeight() + "), OriginalBitmapSmall.WH is (" + sw + ", " + sh + "), originalBounds is "
+ + originalBounds.toString());
mZoomOrientation = mOrientation;
warnListeners();
return true;
@@ -271,6 +275,9 @@ public class MasterImage implements RenderingRequestCaller {
public void onHistoryItemClick(int position) {
HistoryItem historyItem = mHistory.getItem(position);
// We need a copy from the history
+ if (historyItem == null) {
+ return;
+ }
ImagePreset newPreset = new ImagePreset(historyItem.getImagePreset());
// don't need to add it to the history
setPreset(newPreset, historyItem.getFilterRepresentation(), false);
diff --git a/src/com/android/gallery3d/filtershow/pipeline/Buffer.java b/src/com/android/gallery3d/filtershow/pipeline/Buffer.java
index c378eb994..a487a5d8d 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/Buffer.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/Buffer.java
@@ -18,8 +18,8 @@ package com.android.gallery3d.filtershow.pipeline;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.RenderScript;
+import android.renderscript.Allocation;
+import android.renderscript.RenderScript;
import android.util.Log;
import com.android.gallery3d.filtershow.cache.BitmapCache;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
diff --git a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
index 8ae9a7c7b..06ce9e9df 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
@@ -24,8 +24,9 @@ import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.RenderScript;
+
+import android.renderscript.Allocation;
+import android.renderscript.RenderScript;
import android.util.Log;
import com.android.gallery3d.filtershow.cache.BitmapCache;
@@ -175,6 +176,9 @@ public class CachingPipeline implements PipelineInterface {
}
public void setOriginal(Bitmap bitmap) {
+ if (mOriginalBitmap != null) {
+ mOriginalBitmap.recycle();
+ }
mOriginalBitmap = bitmap;
Log.v(LOGTAG,"setOriginal, size " + bitmap.getWidth() + " x " + bitmap.getHeight());
ImagePreset preset = MasterImage.getImage().getPreset();
diff --git a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
index ebf83b720..0b84f5203 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
@@ -18,7 +18,7 @@ package com.android.gallery3d.filtershow.pipeline;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.support.v8.renderscript.Allocation;
+import android.renderscript.Allocation;
import com.android.gallery3d.app.Log;
import com.android.gallery3d.filtershow.cache.BitmapCache;
diff --git a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
index 4765a5990..1460ad434 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
@@ -18,7 +18,7 @@ package com.android.gallery3d.filtershow.pipeline;
import android.graphics.Bitmap;
import android.graphics.Rect;
-import android.support.v8.renderscript.Allocation;
+import android.renderscript.Allocation;
import android.util.JsonReader;
import android.util.JsonWriter;
import android.util.Log;
@@ -67,9 +67,11 @@ public class ImagePreset {
}
public ImagePreset(ImagePreset source) {
- for (int i = 0; i < source.mFilters.size(); i++) {
- FilterRepresentation sourceRepresentation = source.mFilters.elementAt(i);
- mFilters.add(sourceRepresentation.copy());
+ if (source != null && source.mFilters != null) {
+ for (int i = 0; i < source.mFilters.size(); i++) {
+ FilterRepresentation sourceRepresentation = source.mFilters.elementAt(i);
+ mFilters.add(sourceRepresentation.copy());
+ }
}
}
@@ -237,7 +239,7 @@ public class ImagePreset {
FilterRepresentation a = preset.mFilters.elementAt(i);
FilterRepresentation b = mFilters.elementAt(i);
- if (!a.same(b)) {
+ if (!a.equals(b)) {
return false;
}
}
diff --git a/src/com/android/gallery3d/filtershow/pipeline/PipelineInterface.java b/src/com/android/gallery3d/filtershow/pipeline/PipelineInterface.java
index d53768c95..ad59e0c44 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/PipelineInterface.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/PipelineInterface.java
@@ -18,8 +18,8 @@ package com.android.gallery3d.filtershow.pipeline;
import android.content.res.Resources;
import android.graphics.Bitmap;
-import android.support.v8.renderscript.Allocation;
-import android.support.v8.renderscript.RenderScript;
+import android.renderscript.Allocation;
+import android.renderscript.RenderScript;
public interface PipelineInterface {
public String getName();
diff --git a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
index e5736d43c..e334e8798 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
@@ -304,12 +304,14 @@ public class ProcessingService extends Service {
filtersManager.addBorders(this);
filtersManager.addTools(this);
filtersManager.addEffects();
+ filtersManager.addMakeups(this);
FiltersManager highresFiltersManager = FiltersManager.getHighresManager();
highresFiltersManager.addLooks(this);
highresFiltersManager.addBorders(this);
highresFiltersManager.addTools(this);
highresFiltersManager.addEffects();
+// highresFiltersManager.addMakeups(this);
}
private void tearDownPipeline() {
diff --git a/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java b/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java
index 61ee8eb71..a55abca3d 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java
@@ -57,8 +57,11 @@ public class UpdatePreviewTask extends ProcessingTask {
SharedBuffer buffer = MasterImage.getImage().getPreviewBuffer();
SharedPreset preset = MasterImage.getImage().getPreviewPreset();
ImagePreset renderingPreset = preset.dequeuePreset();
- if (renderingPreset != null) {
+ if ( (buffer != null) && (renderingPreset != null)) {
mPreviewPipeline.compute(buffer, renderingPreset, 0);
+ if ( buffer.getProducer() == null) {
+ return null;
+ }
// set the preset we used in the buffer for later inspection UI-side
buffer.getProducer().setPreset(renderingPreset);
buffer.getProducer().sync();
diff --git a/src/com/android/gallery3d/filtershow/state/StatePanel.java b/src/com/android/gallery3d/filtershow/state/StatePanel.java
index 95c2df991..192400315 100644
--- a/src/com/android/gallery3d/filtershow/state/StatePanel.java
+++ b/src/com/android/gallery3d/filtershow/state/StatePanel.java
@@ -48,7 +48,9 @@ public class StatePanel extends Fragment {
View panel = mMainView.findViewById(R.id.listStates);
track = (StatePanelTrack) panel;
- track.setAdapter(MasterImage.getImage().getState());
+ StateAdapter imageStateAdapter = MasterImage.getImage().getState();
+ if (imageStateAdapter == null) return null;
+ track.setAdapter(imageStateAdapter);
mToggleVersionsPanel = (ImageButton) mMainView.findViewById(R.id.toggleVersionsPanel);
if (FilterShowHelper.shouldUseVersions()) {
if (mToggleVersionsPanel.getVisibility() == View.GONE
diff --git a/src/com/android/gallery3d/filtershow/tools/SaveImage.java b/src/com/android/gallery3d/filtershow/tools/SaveImage.java
index 17d698f15..e07dd2ce8 100644
--- a/src/com/android/gallery3d/filtershow/tools/SaveImage.java
+++ b/src/com/android/gallery3d/filtershow/tools/SaveImage.java
@@ -247,7 +247,7 @@ public class SaveImage {
if (mimeType == null) {
mimeType = ImageLoader.getMimeType(mSelectedImageUri);
}
- if (mimeType.equals(ImageLoader.JPEG_MIME_TYPE)) {
+ if (ImageLoader.JPEG_MIME_TYPE.equals(mimeType)) {
InputStream inStream = null;
try {
inStream = mContext.getContentResolver().openInputStream(source);
@@ -256,6 +256,8 @@ public class SaveImage {
Log.w(LOGTAG, "Cannot find file: " + source, e);
} catch (IOException e) {
Log.w(LOGTAG, "Cannot read exif for: " + source, e);
+ } catch (NullPointerException e) {
+ Log.w(LOGTAG, "Invalid exif data for: " + source, e);
} finally {
Utils.closeSilently(inStream);
}
@@ -346,9 +348,9 @@ public class SaveImage {
// newSourceUri is then pointing to the new location.
// If no file is moved, newSourceUri will be the same as mSourceUri.
Uri newSourceUri = mSourceUri;
- if (!flatten) {
- newSourceUri = moveSrcToAuxIfNeeded(mSourceUri, mDestinationFile);
- }
+ /*
+ * if (!flatten) { newSourceUri = moveSrcToAuxIfNeeded(mSourceUri, mDestinationFile); }
+ */
Uri savedUri = mSelectedImageUri;
if (mPreviewImage != null) {
@@ -380,7 +382,7 @@ public class SaveImage {
// After this call, mSelectedImageUri will be actually
// pointing at the new file mDestinationFile.
savedUri = SaveImage.linkNewFileToUri(mContext, mSelectedImageUri,
- mDestinationFile, time, !flatten);
+ mDestinationFile, time, false);
}
}
if (mCallback != null) {
@@ -700,7 +702,7 @@ public class SaveImage {
values.put(Images.Media.TITLE, file.getName());
values.put(Images.Media.DISPLAY_NAME, file.getName());
values.put(Images.Media.MIME_TYPE, "image/jpeg");
- values.put(Images.Media.DATE_TAKEN, time);
+ values.put(Images.Media.DATE_TAKEN, time * 1000);
values.put(Images.Media.DATE_MODIFIED, time);
values.put(Images.Media.DATE_ADDED, time);
values.put(Images.Media.ORIENTATION, 0);
diff --git a/src/com/android/gallery3d/filtershow/ui/ExportDialog.java b/src/com/android/gallery3d/filtershow/ui/ExportDialog.java
index b42c9f367..001e07589 100644
--- a/src/com/android/gallery3d/filtershow/ui/ExportDialog.java
+++ b/src/com/android/gallery3d/filtershow/ui/ExportDialog.java
@@ -107,8 +107,16 @@ public class ExportDialog extends DialogFragment implements View.OnClickListener
mOriginalBounds = MasterImage.getImage().getOriginalBounds();
ImagePreset preset = MasterImage.getImage().getPreset();
+ if (mOriginalBounds == null || preset == null) return null;
mOriginalBounds = preset.finalGeometryRect(mOriginalBounds.width(),
mOriginalBounds.height());
+ if (preset != null) {
+ mOriginalBounds = preset.finalGeometryRect(mOriginalBounds.width(),
+ mOriginalBounds.height());
+ }
+ if (mOriginalBounds == null) {
+ return null;
+ }
mRatio = mOriginalBounds.width() / (float) mOriginalBounds.height();
mWidthText.setText("" + mOriginalBounds.width());
mHeightText.setText("" + mOriginalBounds.height());
diff --git a/src/com/android/gallery3d/gadget/WidgetClickHandler.java b/src/com/android/gallery3d/gadget/WidgetClickHandler.java
index e66a2a66f..e5b0a376c 100644
--- a/src/com/android/gallery3d/gadget/WidgetClickHandler.java
+++ b/src/com/android/gallery3d/gadget/WidgetClickHandler.java
@@ -57,6 +57,8 @@ public class WidgetClickHandler extends Activity {
Intent intent;
if (isValidDataUri(uri)) {
intent = new Intent(Intent.ACTION_VIEW, uri);
+ // Used for checking whether it is from widget
+ intent.putExtra(PhotoPage.KEY_IS_FROM_WIDGET, true);
if (tediousBack) {
intent.putExtra(PhotoPage.KEY_TREAT_BACK_AS_UP, true);
}
diff --git a/src/com/android/gallery3d/gadget/WidgetConfigure.java b/src/com/android/gallery3d/gadget/WidgetConfigure.java
index 2a4c6cfe4..b9a3fec23 100644
--- a/src/com/android/gallery3d/gadget/WidgetConfigure.java
+++ b/src/com/android/gallery3d/gadget/WidgetConfigure.java
@@ -18,11 +18,16 @@ package com.android.gallery3d.gadget;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
+import android.content.ClipData;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.v4.content.FileProvider;
import android.util.Log;
import android.widget.RemoteViews;
@@ -38,6 +43,14 @@ import com.android.gallery3d.data.Path;
import com.android.gallery3d.filtershow.crop.CropActivity;
import com.android.gallery3d.filtershow.crop.CropExtras;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
public class WidgetConfigure extends Activity {
@SuppressWarnings("unused")
private static final String TAG = "WidgetConfigure";
@@ -61,6 +74,7 @@ public class WidgetConfigure extends Activity {
private int mAppWidgetId = -1;
private Uri mPickedItem;
+ private Uri mCropSrc, mCropDst;
@Override
protected void onCreate(Bundle savedState) {
@@ -116,48 +130,142 @@ public class WidgetConfigure extends Activity {
} else if (requestCode == REQUEST_GET_PHOTO) {
setChoosenPhoto(data);
} else if (requestCode == REQUEST_CROP_IMAGE) {
- setPhotoWidget(data);
+ setPhotoWidget();
} else {
throw new AssertionError("unknown request: " + requestCode);
}
}
- private void setPhotoWidget(Intent data) {
- // Store the cropped photo in our database
- Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
- WidgetDatabaseHelper helper = new WidgetDatabaseHelper(this);
+ private void setPhotoWidget() {
+ AsyncTask.execute(new Runnable() {
+ @Override
+ public void run() {
+ Bitmap bitmap = null;
+ InputStream stream = null;
+ try {
+ stream = WidgetConfigure.this.getContentResolver()
+ .openInputStream(mCropDst);
+ if (stream != null) {
+ bitmap = BitmapFactory.decodeStream(stream);
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ if (stream != null) {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ getContentResolver().delete(mCropSrc, null, null);
+ getContentResolver().delete(mCropDst, null, null);
+ }
+ if (bitmap == null) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ }
+ WidgetDatabaseHelper helper = new WidgetDatabaseHelper(WidgetConfigure.this);
+ try {
+ helper.setPhoto(mAppWidgetId, mPickedItem, bitmap);
+ updateWidgetAndFinish(helper.getEntry(mAppWidgetId));
+ } finally {
+ helper.close();
+ }
+ }
+ });
+ }
+
+ private void setChoosenPhoto(final Intent data) {
+ AsyncTask.execute(new Runnable() {
+ @Override
+ public void run() {
+ Resources res = getResources();
+
+ float width = res.getDimension(R.dimen.appwidget_width);
+ float height = res.getDimension(R.dimen.appwidget_height);
+
+ // We try to crop a larger image (by scale factor), but there is still
+ // a bound on the binder limit.
+ float scale = Math.min(WIDGET_SCALE_FACTOR,
+ MAX_WIDGET_SIDE / Math.max(width, height));
+
+ int widgetWidth = Math.round(width * scale);
+ int widgetHeight = Math.round(height * scale);
+
+ File cropSrc = new File(getCacheDir(), "crop_source.png");
+ File cropDst = new File(getCacheDir(), "crop_dest.png");
+ mPickedItem = data.getData();
+ if (!copyUriToFile(mPickedItem, cropSrc)) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ }
+
+ mCropSrc = FileProvider.getUriForFile(WidgetConfigure.this,
+ "com.android.gallery3d.fileprovider",
+ new File(cropSrc.getAbsolutePath()));
+ mCropDst = FileProvider.getUriForFile(WidgetConfigure.this,
+ "com.android.gallery3d.fileprovider",
+ new File(cropDst.getAbsolutePath()));
+
+ Intent request = new Intent(CropActivity.CROP_ACTION)
+ .putExtra(CropExtras.KEY_OUTPUT_X, widgetWidth)
+ .putExtra(CropExtras.KEY_OUTPUT_Y, widgetHeight)
+ .putExtra(CropExtras.KEY_ASPECT_X, widgetWidth)
+ .putExtra(CropExtras.KEY_ASPECT_Y, widgetHeight)
+ .putExtra(CropExtras.KEY_SCALE_UP_IF_NEEDED, true)
+ .putExtra(CropExtras.KEY_SCALE, true)
+ .putExtra(CropExtras.KEY_RETURN_DATA, false)
+ .setDataAndType(mCropSrc, "image/*")
+ .addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ request.putExtra(MediaStore.EXTRA_OUTPUT, mCropDst);
+ request.setClipData(ClipData.newRawUri(MediaStore.EXTRA_OUTPUT, mCropDst));
+ startActivityForResult(request, REQUEST_CROP_IMAGE);
+ }
+ });
+ }
+
+ public boolean copyUriToFile(Uri inUri, File dst) {
+ boolean isSuccessful = false;
+ InputStream in = null;
+ OutputStream out = null;
try {
- helper.setPhoto(mAppWidgetId, mPickedItem, bitmap);
- updateWidgetAndFinish(helper.getEntry(mAppWidgetId));
+ in = getContentResolver().openInputStream(inUri);
+ out = new FileOutputStream(dst);
+
+ byte[] buf = new byte[1024];
+
+ try {
+ for (int len; (len = in.read(buf)) > 0; ) {
+ out.write(buf, 0, len);
+ }
+ isSuccessful = true;
+ } catch (IOException e) {
+ // ignore
+ }
+
+ } catch (FileNotFoundException fnf) {
+ // ignore
} finally {
- helper.close();
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
}
- }
-
- private void setChoosenPhoto(Intent data) {
- Resources res = getResources();
-
- float width = res.getDimension(R.dimen.appwidget_width);
- float height = res.getDimension(R.dimen.appwidget_height);
-
- // We try to crop a larger image (by scale factor), but there is still
- // a bound on the binder limit.
- float scale = Math.min(WIDGET_SCALE_FACTOR,
- MAX_WIDGET_SIDE / Math.max(width, height));
-
- int widgetWidth = Math.round(width * scale);
- int widgetHeight = Math.round(height * scale);
-
- mPickedItem = data.getData();
- Intent request = new Intent(CropActivity.CROP_ACTION, mPickedItem)
- .putExtra(CropExtras.KEY_OUTPUT_X, widgetWidth)
- .putExtra(CropExtras.KEY_OUTPUT_Y, widgetHeight)
- .putExtra(CropExtras.KEY_ASPECT_X, widgetWidth)
- .putExtra(CropExtras.KEY_ASPECT_Y, widgetHeight)
- .putExtra(CropExtras.KEY_SCALE_UP_IF_NEEDED, true)
- .putExtra(CropExtras.KEY_SCALE, true)
- .putExtra(CropExtras.KEY_RETURN_DATA, true);
- startActivityForResult(request, REQUEST_CROP_IMAGE);
+ return isSuccessful;
}
private void setChoosenAlbum(Intent data) {
diff --git a/src/com/android/gallery3d/gadget/WidgetService.java b/src/com/android/gallery3d/gadget/WidgetService.java
index fc54fb6e8..854433776 100644
--- a/src/com/android/gallery3d/gadget/WidgetService.java
+++ b/src/com/android/gallery3d/gadget/WidgetService.java
@@ -80,7 +80,7 @@ public class WidgetService extends RemoteViewsService {
}
@Override
- public void onDestroy() {
+ public synchronized void onDestroy() {
mSource.close();
mSource = null;
}
@@ -115,7 +115,11 @@ public class WidgetService extends RemoteViewsService {
}
@Override
- public RemoteViews getViewAt(int position) {
+ public synchronized RemoteViews getViewAt(int position) {
+ if (mSource == null) {
+ // This instance has been destroyed, exit out
+ return null;
+ }
Bitmap bitmap = mSource.getImage(position);
if (bitmap == null) return getLoadingView();
RemoteViews views = new RemoteViews(
diff --git a/src/com/android/gallery3d/glrenderer/UploadedTexture.java b/src/com/android/gallery3d/glrenderer/UploadedTexture.java
index f41a979b7..546d9f398 100644
--- a/src/com/android/gallery3d/glrenderer/UploadedTexture.java
+++ b/src/com/android/gallery3d/glrenderer/UploadedTexture.java
@@ -221,8 +221,11 @@ public abstract class UploadedTexture extends BasicTexture {
Assert.assertTrue(bWidth <= texWidth && bHeight <= texHeight);
- // Upload the bitmap to a new texture.
- mId = canvas.getGLId().generateTexture();
+ // Null pointer check here is to avoid monkey test failure.
+ if (canvas.getGLId() != null) {
+ // Upload the bitmap to a new texture.
+ mId = canvas.getGLId().generateTexture();
+ }
canvas.setTextureParameters(this);
if (bWidth == texWidth && bHeight == texHeight) {
diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java
index 6b4f10312..411c578a5 100644
--- a/src/com/android/gallery3d/ui/ActionModeHandler.java
+++ b/src/com/android/gallery3d/ui/ActionModeHandler.java
@@ -272,7 +272,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
ArrayList<MediaObject> selected = new ArrayList<MediaObject>();
DataManager manager = mActivity.getDataManager();
for (Path path : unexpandedPaths) {
- if (jc.isCancelled()) {
+ if (jc.isCancelled() || !mSelectionManager.inSelectionMode()) {
return null;
}
selected.add(manager.getMediaObject(path));
diff --git a/src/com/android/gallery3d/ui/AlbumLabelMaker.java b/src/com/android/gallery3d/ui/AlbumLabelMaker.java
index da1cac0bd..3ac3bb7fe 100644
--- a/src/com/android/gallery3d/ui/AlbumLabelMaker.java
+++ b/src/com/android/gallery3d/ui/AlbumLabelMaker.java
@@ -25,6 +25,7 @@ import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.TextUtils;
+import android.view.View;
import com.android.gallery3d.R;
import com.android.gallery3d.data.DataSourceType;
@@ -32,6 +33,8 @@ import com.android.photos.data.GalleryBitmapPool;
import com.android.gallery3d.util.ThreadPool;
import com.android.gallery3d.util.ThreadPool.JobContext;
+import java.util.Locale;
+
public class AlbumLabelMaker {
private static final int BORDER_SIZE = 0;
@@ -170,30 +173,60 @@ public class AlbumLabelMaker {
canvas.translate(BORDER_SIZE, BORDER_SIZE);
- // draw title
- if (jc.isCancelled()) return null;
- int x = s.leftMargin + s.iconSize;
- // TODO: is the offset relevant in new reskin?
- // int y = s.titleOffset;
- int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
- drawText(canvas, x, y, title, labelWidth - s.leftMargin - x -
- s.titleRightMargin, mTitlePaint);
-
- // draw count
- if (jc.isCancelled()) return null;
- x = labelWidth - s.titleRightMargin;
- y = (s.labelBackgroundHeight - s.countFontSize) / 2;
- drawText(canvas, x, y, count,
- labelWidth - x , mCountPaint);
-
- // draw the icon
- if (icon != null) {
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {// RTL
+ // draw title
+ if (jc.isCancelled()) return null;
+ int strLength = (int) mTitlePaint.measureText(title);
+ int x = labelWidth - (s.leftMargin + s.iconSize) - strLength;
+ // TODO: is the offset relevant in new reskin?
+ // int y = s.titleOffset;
+ int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
+ drawText(canvas, x, y, title, labelWidth - s.leftMargin - x -
+ s.titleRightMargin, mTitlePaint);
+
+ // draw count
+ if (jc.isCancelled()) return null;
+ x = s.leftMargin + 10;// plus 10 to get a much bigger margin
+ y = (s.labelBackgroundHeight - s.countFontSize) / 2;
+ drawText(canvas, x, y, count,
+ labelWidth - x, mCountPaint);
+ // draw the icon
+ if (icon != null) {
+ if (jc.isCancelled()) return null;
+ float scale = (float) s.iconSize / icon.getWidth();
+ canvas.translate(labelWidth - s.leftMargin - s.iconSize,
+ (s.labelBackgroundHeight -
+ Math.round(scale * icon.getHeight())) / 2f);
+ canvas.scale(scale, scale);
+ canvas.drawBitmap(icon, 0, 0, null);
+ }
+ } else { // LTR
+ // draw title
+ if (jc.isCancelled()) return null;
+ int x = s.leftMargin + s.iconSize;
+ // TODO: is the offset relevant in new reskin?
+ // int y = s.titleOffset;
+ int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
+ drawText(canvas, x, y, title, labelWidth - s.leftMargin - x -
+ s.titleRightMargin, mTitlePaint);
+
+ // draw count
if (jc.isCancelled()) return null;
- float scale = (float) s.iconSize / icon.getWidth();
- canvas.translate(s.leftMargin, (s.labelBackgroundHeight -
- Math.round(scale * icon.getHeight()))/2f);
- canvas.scale(scale, scale);
- canvas.drawBitmap(icon, 0, 0, null);
+ x = labelWidth - s.titleRightMargin;
+ y = (s.labelBackgroundHeight - s.countFontSize) / 2;
+ drawText(canvas, x, y, count,
+ labelWidth - x, mCountPaint);
+
+ // draw the icon
+ if (icon != null) {
+ if (jc.isCancelled()) return null;
+ float scale = (float) s.iconSize / icon.getWidth();
+ canvas.translate(s.leftMargin, (s.labelBackgroundHeight -
+ Math.round(scale * icon.getHeight())) / 2f);
+ canvas.scale(scale, scale);
+ canvas.drawBitmap(icon, 0, 0, null);
+ }
}
return bitmap;
diff --git a/src/com/android/gallery3d/ui/DetailsHelper.java b/src/com/android/gallery3d/ui/DetailsHelper.java
index 47296f655..4f610407f 100644
--- a/src/com/android/gallery3d/ui/DetailsHelper.java
+++ b/src/com/android/gallery3d/ui/DetailsHelper.java
@@ -139,6 +139,8 @@ public class DetailsHelper {
return context.getString(R.string.exposure_time);
case MediaDetails.INDEX_ISO:
return context.getString(R.string.iso);
+ case MediaDetails.INDEX_DATETIME_ORIGINAL:
+ return context.getString(R.string.record_time);
default:
return "Unknown key" + key;
}
diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java
index 30fd1e18f..3e2af0d40 100644
--- a/src/com/android/gallery3d/ui/DialogDetailsView.java
+++ b/src/com/android/gallery3d/ui/DialogDetailsView.java
@@ -21,6 +21,7 @@ import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
+import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.LayoutInflater;
import android.view.View;
@@ -33,14 +34,18 @@ import com.android.gallery3d.R;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.MediaDetails;
+import com.android.gallery3d.exif.ExifInterface;
import com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
import com.android.gallery3d.ui.DetailsHelper.CloseListener;
import com.android.gallery3d.ui.DetailsHelper.DetailsSource;
import com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer;
import com.android.gallery3d.ui.DetailsHelper.ResolutionResolvingListener;
+import java.text.DateFormat;
import java.text.DecimalFormat;
+import java.text.ParseException;
import java.util.ArrayList;
+import java.util.Date;
import java.util.Locale;
import java.util.Map.Entry;
@@ -131,6 +136,15 @@ public class DialogDetailsView implements DetailsViewContainer {
setDetails(context, details);
}
+ private String exifDateToFormatedDate(String exifDt) {
+ try {
+ Date date = ExifInterface.DATETIME_FORMAT.parse(exifDt);
+ return DateFormat.getDateTimeInstance().format(date);
+ } catch (ParseException e) {
+ return exifDt;
+ }
+ }
+
private void setDetails(Context context, MediaDetails details) {
boolean resolutionIsValid = true;
String path = null;
@@ -221,6 +235,9 @@ public class DialogDetailsView implements DetailsViewContainer {
case MediaDetails.INDEX_ORIENTATION:
value = toLocalInteger(detail.getValue());
break;
+ case MediaDetails.INDEX_DATETIME_ORIGINAL:
+ value = exifDateToFormatedDate(detail.getValue().toString());
+ break;
default: {
Object valueObj = detail.getValue();
// This shouldn't happen, log its key to help us diagnose the problem.
@@ -236,13 +253,20 @@ public class DialogDetailsView implements DetailsViewContainer {
value = String.format("%s: %s %s", DetailsHelper.getDetailsName(
context, key), value, context.getString(details.getUnit(key)));
} else {
- value = String.format("%s: %s", DetailsHelper.getDetailsName(
- context, key), value);
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && (key == MediaDetails.INDEX_PATH)) {
+ value = String.format("%s : \n%s",
+ DetailsHelper.getDetailsName(context, key), value);
+ } else {
+ value = String.format("%s: %s", DetailsHelper.getDetailsName(context, key),
+ value);
+ }
}
mItems.add(value);
- }
- if (!resolutionIsValid) {
- DetailsHelper.resolveResolution(path, this);
+ if (!resolutionIsValid) {
+ DetailsHelper.resolveResolution(path, this);
+ }
}
}
diff --git a/src/com/android/gallery3d/ui/Knob.java b/src/com/android/gallery3d/ui/Knob.java
new file mode 100644
index 000000000..179023e02
--- /dev/null
+++ b/src/com/android/gallery3d/ui/Knob.java
@@ -0,0 +1,337 @@
+/*
+ * Copyright (c) 2013, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.android.gallery3d.ui;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import java.lang.Math;
+
+import com.android.gallery3d.R;
+
+public class Knob extends FrameLayout {
+ private static final int STROKE_WIDTH = 6;
+ private static final float TEXT_SIZE = 0.20f;
+ private static final float TEXT_PADDING = 0.31f;
+ private static final float LABEL_PADDING = 0.05f;
+ private static final float LABEL_SIZE = 0.09f;
+ private static final float LABEL_WIDTH = 0.80f;
+ private static final float INDICATOR_RADIUS = 0.38f;
+
+ public interface OnKnobChangeListener {
+ void onValueChanged(Knob knob, int value, boolean fromUser);
+ boolean onSwitchChanged(Knob knob, boolean on);
+ }
+
+ private OnKnobChangeListener mOnKnobChangeListener = null;
+
+ private float mProgress = 0.0f;
+ private int mMax = 100;
+ private boolean mOn = false;
+ private boolean mEnabled = false;
+
+ private int mHighlightColor;
+ private int mLowlightColor;
+ private int mDisabledColor;
+
+ private final Paint mPaint;
+
+ private final TextView mLabelTV;
+ private final TextView mProgressTV;
+
+ private final ImageView mKnobOn;
+ private final ImageView mKnobOff;
+
+ private float mLastX;
+ private float mLastY;
+ private boolean mMoved;
+
+ private int mWidth = 0;
+ private int mIndicatorWidth = 0;
+
+ private RectF mRectF;
+
+ public Knob(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Knob, 0, 0);
+
+ String label;
+ int foreground;
+ try {
+ label = a.getString(R.styleable.Knob_label);
+ foreground = a.getResourceId(R.styleable.Knob_foreground, R.drawable.knob);
+ } finally {
+ a.recycle();
+ }
+
+ LayoutInflater li = (LayoutInflater)
+ context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ li.inflate(R.layout.knob, this, true);
+
+ Resources res = getResources();
+ mHighlightColor = res.getColor(R.color.highlight);
+ mLowlightColor = res.getColor(R.color.lowlight);
+ mDisabledColor = res.getColor(R.color.disabled_knob);
+
+ ((ImageView) findViewById(R.id.knob_foreground)).setImageResource(foreground);
+
+ mLabelTV = (TextView) findViewById(R.id.knob_label);
+ mLabelTV.setText(label);
+ mProgressTV = (TextView) findViewById(R.id.knob_value);
+
+ mKnobOn = (ImageView) findViewById(R.id.knob_toggle_on);
+ mKnobOff = (ImageView) findViewById(R.id.knob_toggle_off);
+
+ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mPaint.setColor(mHighlightColor);
+ mPaint.setStrokeWidth(STROKE_WIDTH);
+ mPaint.setStrokeCap(Paint.Cap.ROUND);
+ mPaint.setStyle(Paint.Style.STROKE);
+
+ setWillNotDraw(false);
+ }
+
+ public Knob(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public Knob(Context context) {
+ this(context, null);
+ }
+
+ public void setOnKnobChangeListener(OnKnobChangeListener l) {
+ mOnKnobChangeListener = l;
+ }
+
+ public void setValue(int value) {
+ if (mMax != 0) {
+ setProgress(((float) value) / mMax);
+ }
+ }
+
+ public int getValue() {
+ return (int) (mProgress * mMax);
+ }
+
+ public void setProgress(float progress) {
+ setProgress(progress, false);
+ }
+
+ private void setProgressText(boolean on) {
+ if (on) {
+ mProgressTV.setText((int) (mProgress * 100) + "%");
+ } else {
+ mProgressTV.setText("--%");
+ }
+ }
+
+ private void setProgress(float progress, boolean fromUser) {
+ if (progress > 1.0f) {
+ progress = 1.0f;
+ }
+ if (progress < 0.0f) {
+ progress = 0.0f;
+ }
+ mProgress = progress;
+ setProgressText(mOn && mEnabled);
+
+ invalidate();
+
+ if (mOnKnobChangeListener != null) {
+ mOnKnobChangeListener.onValueChanged(this, (int) (progress * mMax), fromUser);
+ }
+ }
+
+ public void setMax(int max) {
+ mMax = max;
+ }
+
+ public float getProgress() {
+ return mProgress;
+ }
+
+ private void drawIndicator() {
+ float r = mWidth * INDICATOR_RADIUS;
+ ImageView view = mOn ? mKnobOn : mKnobOff;
+ view.setTranslationX((float) Math.sin(mProgress * 2 * Math.PI) * r - mIndicatorWidth / 2);
+ view.setTranslationY((float) -Math.cos(mProgress * 2 * Math.PI) * r - mIndicatorWidth / 2);
+ }
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ mEnabled = enabled;
+ setOn(enabled);
+ }
+
+ public void setOn(boolean on) {
+ if (on != mOn) {
+ mOn = on;
+ }
+ on = on && mEnabled;
+ mLabelTV.setTextColor(on ? mHighlightColor : mDisabledColor);
+ mProgressTV.setTextColor(on ? mHighlightColor : mDisabledColor);
+ setProgressText(on);
+ mPaint.setColor(on ? mHighlightColor : mDisabledColor);
+ mKnobOn.setVisibility(on ? View.VISIBLE : View.GONE);
+ mKnobOff.setVisibility(on ? View.GONE : View.VISIBLE);
+ invalidate();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ drawIndicator();
+ if (mOn && mEnabled) {
+ canvas.drawArc(mRectF, -90, mProgress * 360, false, mPaint);
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldW, int oldH) {
+ int size = w > h ? h : w;
+ mWidth = size;
+ mIndicatorWidth = mKnobOn.getWidth();
+
+ int diff;
+ if (w > h) {
+ diff = (w - h) / 2;
+ mRectF = new RectF(STROKE_WIDTH + diff, STROKE_WIDTH,
+ w - STROKE_WIDTH - diff, h - STROKE_WIDTH);
+ } else {
+ diff = (h - w) / 2;
+ mRectF = new RectF(STROKE_WIDTH, STROKE_WIDTH + diff,
+ w - STROKE_WIDTH, h - STROKE_WIDTH - diff);
+ }
+
+ mProgressTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, size * TEXT_SIZE);
+ mProgressTV.setPadding(0, (int) (size * TEXT_PADDING), 0, 0);
+ mProgressTV.setVisibility(View.VISIBLE);
+ mLabelTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, size * LABEL_SIZE);
+ mLabelTV.setPadding(0, (int) (size * LABEL_PADDING), 0, 0);
+ mLabelTV.setLayoutParams(new LinearLayout.LayoutParams((int) (w * LABEL_WIDTH),
+ LayoutParams.WRAP_CONTENT));
+ mLabelTV.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ return true;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ if (mOn) {
+ mLastX = event.getX();
+ mLastY = event.getY();
+ getParent().requestDisallowInterceptTouchEvent(true);
+ }
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if (mOn) {
+ float x = event.getX();
+ float y = event.getY();
+ float center = mWidth / 2;
+ if (mMoved || (x - center) * (x - center) + (y - center) * (y - center)
+ > center * center / 4) {
+ float delta = getDelta(x, y);
+ setProgress(mProgress + delta / 360, true);
+ mMoved = true;
+ }
+ mLastX = x;
+ mLastY = y;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ if (!mMoved) {
+ if (mOnKnobChangeListener == null
+ || mOnKnobChangeListener.onSwitchChanged(this, !mOn)) {
+ if (mEnabled) {
+ setOn(!mOn);
+ invalidate();
+ }
+ }
+ }
+ mMoved = false;
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ private float getDelta(float x, float y) {
+ float angle = angle(x, y);
+ float oldAngle = angle(mLastX, mLastY);
+ float delta = angle - oldAngle;
+ if (delta >= 180.0f) {
+ delta = -oldAngle;
+ } else if (delta <= -180.0f) {
+ delta = 360 - oldAngle;
+ }
+ return delta;
+ }
+
+ private float angle(float x, float y) {
+ float center = mWidth / 2.0f;
+ x -= center;
+ y -= center;
+
+ if (x == 0.0f) {
+ if (y > 0.0f) {
+ return 180.0f;
+ } else {
+ return 0.0f;
+ }
+ }
+
+ float angle = (float) (Math.atan(y / x) / Math.PI * 180.0);
+ if (x > 0.0f) {
+ angle += 90;
+ } else {
+ angle += 270;
+ }
+ return angle;
+ }
+}
diff --git a/src/com/android/gallery3d/ui/Paper.java b/src/com/android/gallery3d/ui/Paper.java
index b36f5c3a2..6ed5013a2 100644
--- a/src/com/android/gallery3d/ui/Paper.java
+++ b/src/com/android/gallery3d/ui/Paper.java
@@ -28,53 +28,76 @@ class Paper {
@SuppressWarnings("unused")
private static final String TAG = "Paper";
private static final int ROTATE_FACTOR = 4;
- private EdgeAnimation mAnimationLeft = new EdgeAnimation();
- private EdgeAnimation mAnimationRight = new EdgeAnimation();
+ private EdgeAnimation mAnimationBegin = new EdgeAnimation();
+ private EdgeAnimation mAnimationEnd = new EdgeAnimation();
private int mWidth;
+ private int mHeight;
private float[] mMatrix = new float[16];
+ private final boolean mIsWide;
+
+ public Paper(boolean wide) {
+ mIsWide = wide;
+ }
+
public void overScroll(float distance) {
distance /= mWidth; // make it relative to width
if (distance < 0) {
- mAnimationLeft.onPull(-distance);
+ mAnimationBegin.onPull(-distance);
} else {
- mAnimationRight.onPull(distance);
+ mAnimationEnd.onPull(distance);
}
}
public void edgeReached(float velocity) {
velocity /= mWidth; // make it relative to width
if (velocity < 0) {
- mAnimationRight.onAbsorb(-velocity);
+ mAnimationEnd.onAbsorb(-velocity);
} else {
- mAnimationLeft.onAbsorb(velocity);
+ mAnimationBegin.onAbsorb(velocity);
}
}
public void onRelease() {
- mAnimationLeft.onRelease();
- mAnimationRight.onRelease();
+ mAnimationBegin.onRelease();
+ mAnimationEnd.onRelease();
}
public boolean advanceAnimation() {
// Note that we use "|" because we want both animations get updated.
- return mAnimationLeft.update() | mAnimationRight.update();
+ return mAnimationBegin.update() | mAnimationEnd.update();
}
public void setSize(int width, int height) {
mWidth = width;
+ mHeight = height;
}
- public float[] getTransform(Rect rect, float scrollX) {
- float left = mAnimationLeft.getValue();
- float right = mAnimationRight.getValue();
- float screenX = rect.centerX() - scrollX;
- // We linearly interpolate the value [left, right] for the screenX
- // range int [-1/4, 5/4]*mWidth. So if part of the thumbnail is outside
+ public float[] getTransform(Rect rect, float scroll) {
+ Log.d(TAG, rect.toString());
+ float start = mAnimationBegin.getValue();
+ float end = mAnimationEnd.getValue();
+ int center = 0;
+ int screenWidth = mWidth;
+ int rotateX = 0;
+ int rotateY = 0;
+ final boolean wide = mIsWide;
+ if (wide) {
+ center = rect.centerX();
+ rotateY = 1;
+ } else {
+ center = rect.centerY();
+ rotateX = 1;
+ screenWidth = mHeight;
+ }
+ float screen = center - scroll;
+ // We linearly interpolate the value [start, end] for the screen
+ // range int [-1/4, 5/4]*screenWidth. So if part of the thumbnail is outside
// the screen, we still get some transform.
- float x = screenX + mWidth / 4;
- int range = 3 * mWidth / 2;
- float t = ((range - x) * left - x * right) / range;
+ float x = screen + screenWidth / 4;
+ int range = 3 * screenWidth / 2;
+ float t = ((range - x) * start - x * end) / range;
+
// compress t to the range (-1, 1) by the function
// f(t) = (1 / (1 + e^-t) - 0.5) * 2
// then multiply by 90 to make the range (-45, 45)
@@ -82,8 +105,9 @@ class Paper {
(1 / (1 + (float) Math.exp(-t * ROTATE_FACTOR)) - 0.5f) * 2 * -45;
Matrix.setIdentityM(mMatrix, 0);
Matrix.translateM(mMatrix, 0, mMatrix, 0, rect.centerX(), rect.centerY(), 0);
- Matrix.rotateM(mMatrix, 0, degrees, 0, 1, 0);
+ Matrix.rotateM(mMatrix, 0, degrees, rotateX, rotateY, 0);
Matrix.translateM(mMatrix, 0, mMatrix, 0, -rect.width() / 2, -rect.height() / 2, 0);
+
return mMatrix;
}
}
diff --git a/src/com/android/gallery3d/ui/PhotoView.java b/src/com/android/gallery3d/ui/PhotoView.java
index e8c706f05..347d4b3af 100644..100755
--- a/src/com/android/gallery3d/ui/PhotoView.java
+++ b/src/com/android/gallery3d/ui/PhotoView.java
@@ -92,6 +92,9 @@ public class PhotoView extends GLView {
// Returns true if the item is a Video.
public boolean isVideo(int offset);
+ // Returns true if the item is a Gif.
+ public boolean isGif(int offset);
+
// Returns true if the item can be deleted.
public boolean isDeletable(int offset);
@@ -593,7 +596,6 @@ public class PhotoView extends GLView {
private boolean mIsCamera;
private boolean mIsPanorama;
private boolean mIsStaticCamera;
- private boolean mIsVideo;
private boolean mIsDeletable;
private int mLoadingState = Model.LOADING_INIT;
private Size mSize = new Size();
@@ -606,7 +608,6 @@ public class PhotoView extends GLView {
mIsCamera = mModel.isCamera(0);
mIsPanorama = mModel.isPanorama(0);
mIsStaticCamera = mModel.isStaticCamera(0);
- mIsVideo = mModel.isVideo(0);
mIsDeletable = mModel.isDeletable(0);
mLoadingState = mModel.getLoadingState(0);
setScreenNail(mModel.getScreenNail(0));
@@ -731,8 +732,11 @@ public class PhotoView extends GLView {
// Draw the play video icon and the message.
canvas.translate((int) (cx + 0.5f), (int) (cy + 0.5f));
int s = (int) (scale * Math.min(r.width(), r.height()) + 0.5f);
- if (mIsVideo) drawVideoPlayIcon(canvas, s);
- if (mLoadingState == Model.LOADING_FAIL) {
+ //Full pic locates at index 0 of the array in PhotoDataAdapter
+ if (mModel.isVideo(0) || mModel.isGif(0)) {
+ drawVideoPlayIcon(canvas, s);
+ }
+ if (mLoadingState == Model.LOADING_FAIL ) {
drawLoadingFailMessage(canvas);
}
@@ -774,7 +778,6 @@ public class PhotoView extends GLView {
private boolean mIsCamera;
private boolean mIsPanorama;
private boolean mIsStaticCamera;
- private boolean mIsVideo;
private boolean mIsDeletable;
private int mLoadingState = Model.LOADING_INIT;
private Size mSize = new Size();
@@ -788,7 +791,6 @@ public class PhotoView extends GLView {
mIsCamera = mModel.isCamera(mIndex);
mIsPanorama = mModel.isPanorama(mIndex);
mIsStaticCamera = mModel.isStaticCamera(mIndex);
- mIsVideo = mModel.isVideo(mIndex);
mIsDeletable = mModel.isDeletable(mIndex);
mLoadingState = mModel.getLoadingState(mIndex);
setScreenNail(mModel.getScreenNail(mIndex));
@@ -852,8 +854,10 @@ public class PhotoView extends GLView {
invalidate();
}
int s = Math.min(drawW, drawH);
- if (mIsVideo) drawVideoPlayIcon(canvas, s);
- if (mLoadingState == Model.LOADING_FAIL) {
+ if (mModel.isVideo(mIndex) || mModel.isGif(mIndex)) {
+ drawVideoPlayIcon(canvas, s);
+ }
+ if (mLoadingState == Model.LOADING_FAIL ) {
drawLoadingFailMessage(canvas);
}
canvas.restore();
@@ -1128,6 +1132,7 @@ public class PhotoView extends GLView {
}
private void deleteAfterAnimation(int duration) {
+ if (mHandler.hasMessages(MSG_DELETE_ANIMATION_DONE)) return;
MediaItem item = mModel.getMediaItem(mTouchBoxIndex);
if (item == null) return;
mListener.onCommitDeleteImage();
@@ -1854,4 +1859,5 @@ public class PhotoView extends GLView {
}
return effect;
}
+
}
diff --git a/src/com/android/gallery3d/ui/SlotView.java b/src/com/android/gallery3d/ui/SlotView.java
index bd0ffdc15..475d93a67 100644
--- a/src/com/android/gallery3d/ui/SlotView.java
+++ b/src/com/android/gallery3d/ui/SlotView.java
@@ -18,20 +18,24 @@ package com.android.gallery3d.ui;
import android.graphics.Rect;
import android.os.Handler;
+import android.text.TextUtils;
import android.view.GestureDetector;
import android.view.MotionEvent;
+import android.view.View;
import android.view.animation.DecelerateInterpolator;
+import com.android.gallery3d.R;
import com.android.gallery3d.anim.Animation;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.glrenderer.GLCanvas;
+import java.util.Locale;
+
public class SlotView extends GLView {
@SuppressWarnings("unused")
private static final String TAG = "SlotView";
- private static final boolean WIDE = true;
private static final int INDEX_NONE = -1;
public static final int RENDER_MORE_PASS = 1;
@@ -62,7 +66,7 @@ public class SlotView extends GLView {
private final GestureDetector mGestureDetector;
private final ScrollerHelper mScroller;
- private final Paper mPaper = new Paper();
+ private final Paper mPaper;
private Listener mListener;
private UserInteractionListener mUIListener;
@@ -88,10 +92,17 @@ public class SlotView extends GLView {
// to prevent allocating memory
private final Rect mTempRect = new Rect();
+ // Flag to check whether it is come from Photo Page.
+ private boolean isFromPhotoPage = false;
+
+ private final boolean mIsWide;
+
public SlotView(AbstractGalleryActivity activity, Spec spec) {
+ mIsWide = activity.getResources().getBoolean(R.bool.config_scroll_horizontal);
mGestureDetector = new GestureDetector(activity, new MyGestureListener());
mScroller = new ScrollerHelper(activity);
mHandler = new SynchronizedHandler(activity.getGLRoot());
+ mPaper = new Paper(mIsWide);
setSlotSpec(spec);
}
@@ -109,7 +120,7 @@ public class SlotView extends GLView {
return;
}
Rect rect = mLayout.getSlotRect(index, mTempRect);
- int position = WIDE
+ int position = mIsWide
? (rect.left + rect.right - getWidth()) / 2
: (rect.top + rect.bottom - getHeight()) / 2;
setScrollPosition(position);
@@ -117,11 +128,11 @@ public class SlotView extends GLView {
public void makeSlotVisible(int index) {
Rect rect = mLayout.getSlotRect(index, mTempRect);
- int visibleBegin = WIDE ? mScrollX : mScrollY;
- int visibleLength = WIDE ? getWidth() : getHeight();
+ int visibleBegin = mIsWide ? mScrollX : mScrollY;
+ int visibleLength = mIsWide ? getWidth() : getHeight();
int visibleEnd = visibleBegin + visibleLength;
- int slotBegin = WIDE ? rect.left : rect.top;
- int slotEnd = WIDE ? rect.right : rect.bottom;
+ int slotBegin = mIsWide ? rect.left : rect.top;
+ int slotEnd = mIsWide ? rect.right : rect.bottom;
int position = visibleBegin;
if (visibleLength < slotEnd - slotBegin) {
@@ -135,7 +146,20 @@ public class SlotView extends GLView {
setScrollPosition(position);
}
+ /**
+ * Set the flag which used for check whether it is come from Photo Page.
+ */
+ public void setIsFromPhotoPage(boolean flag) {
+ isFromPhotoPage = flag;
+ }
+
public void setScrollPosition(int position) {
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())
+ && position == 0 && !isFromPhotoPage) {
+ // If RTL and not from Photo Page, set position to max.
+ position = mLayout.getScrollLimit();
+ }
position = Utils.clamp(position, 0, mLayout.getScrollLimit());
mScroller.setPosition(position);
updateScrollPosition(position, false);
@@ -179,8 +203,8 @@ public class SlotView extends GLView {
}
private void updateScrollPosition(int position, boolean force) {
- if (!force && (WIDE ? position == mScrollX : position == mScrollY)) return;
- if (WIDE) {
+ if (!force && (mIsWide ? position == mScrollX : position == mScrollY)) return;
+ if (mIsWide) {
mScrollX = position;
} else {
mScrollY = position;
@@ -315,7 +339,7 @@ public class SlotView extends GLView {
canvas.save(GLCanvas.SAVE_FLAG_ALPHA | GLCanvas.SAVE_FLAG_MATRIX);
Rect rect = mLayout.getSlotRect(index, mTempRect);
if (paperActive) {
- canvas.multiplyMatrix(mPaper.getTransform(rect, mScrollX), 0);
+ canvas.multiplyMatrix(mPaper.getTransform(rect, (mIsWide ? mScrollX : mScrollY)), 0);
} else {
canvas.translate(rect.left, rect.top, 0);
}
@@ -389,6 +413,8 @@ public class SlotView extends GLView {
public int rowsLand = -1;
public int rowsPort = -1;
+ public int colsLand = -1;
+ public int colsPort = -1;
public int slotGap = -1;
}
@@ -434,9 +460,17 @@ public class SlotView extends GLView {
public Rect getSlotRect(int index, Rect rect) {
int col, row;
- if (WIDE) {
- col = index / mUnitCount;
- row = index - col * mUnitCount;
+ if (mIsWide) {
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // If RTL, recalculate the columns and rows.
+ int count = ((mSlotCount + mUnitCount - 1) / mUnitCount);
+ col = count - index / mUnitCount - 1;
+ row = index % mUnitCount;
+ } else {
+ col = index / mUnitCount;
+ row = index - col * mUnitCount;
+ }
} else {
row = index / mUnitCount;
col = index - row * mUnitCount;
@@ -498,10 +532,17 @@ public class SlotView extends GLView {
mSlotWidth = mSpec.slotWidth;
mSlotHeight = mSpec.slotHeight;
} else {
- int rows = (mWidth > mHeight) ? mSpec.rowsLand : mSpec.rowsPort;
- mSlotGap = mSpec.slotGap;
- mSlotHeight = Math.max(1, (mHeight - (rows - 1) * mSlotGap) / rows);
- mSlotWidth = mSlotHeight - mSpec.slotHeightAdditional;
+ if (mIsWide) {
+ int rows = (mWidth > mHeight) ? mSpec.rowsLand : mSpec.rowsPort;
+ mSlotGap = mSpec.slotGap;
+ mSlotHeight = Math.max(1, (mHeight - (rows - 1) * mSlotGap) / rows);
+ mSlotWidth = mSlotHeight - mSpec.slotHeightAdditional;
+ } else {
+ int cols = (mWidth > mHeight) ? mSpec.colsLand : mSpec.colsPort;
+ mSlotGap = mSpec.slotGap;
+ mSlotHeight = Math.max(1, (mWidth - (cols - 1) * mSlotGap) / cols);
+ mSlotWidth = mSlotHeight - mSpec.slotHeightAdditional;
+ }
}
if (mRenderer != null) {
@@ -509,7 +550,7 @@ public class SlotView extends GLView {
}
int[] padding = new int[2];
- if (WIDE) {
+ if (mIsWide) {
initLayoutParameters(mWidth, mHeight, mSlotWidth, mSlotHeight, padding);
mVerticalPadding.startAnimateTo(padding[0]);
mHorizontalPadding.startAnimateTo(padding[1]);
@@ -530,7 +571,14 @@ public class SlotView extends GLView {
private void updateVisibleSlotRange() {
int position = mScrollPosition;
- if (WIDE) {
+ if (mIsWide) {
+ if (View.LAYOUT_DIRECTION_RTL == TextUtils
+ .getLayoutDirectionFromLocale(Locale.getDefault())) {
+ // If RTL, recalculate the position.
+ position = mContentLength > mWidth ? (mContentLength - position - mWidth)
+ : position;
+ position = Math.max(0, position);
+ }
int startCol = position / (mSlotWidth + mSlotGap);
int start = Math.max(0, mUnitCount * startCol);
int endCol = (position + mWidth + mSlotWidth + mSlotGap - 1) /
@@ -575,9 +623,8 @@ public class SlotView extends GLView {
}
public int getSlotIndexByPosition(float x, float y) {
- int absoluteX = Math.round(x) + (WIDE ? mScrollPosition : 0);
- int absoluteY = Math.round(y) + (WIDE ? 0 : mScrollPosition);
-
+ int absoluteX = Math.round(x) + (mIsWide ? mScrollPosition : 0);
+ int absoluteY = Math.round(y) + (mIsWide ? 0 : mScrollPosition);
absoluteX -= mHorizontalPadding.get();
absoluteY -= mVerticalPadding.get();
@@ -588,11 +635,11 @@ public class SlotView extends GLView {
int columnIdx = absoluteX / (mSlotWidth + mSlotGap);
int rowIdx = absoluteY / (mSlotHeight + mSlotGap);
- if (!WIDE && columnIdx >= mUnitCount) {
+ if (!mIsWide && columnIdx >= mUnitCount) {
return INDEX_NONE;
}
- if (WIDE && rowIdx >= mUnitCount) {
+ if (mIsWide && rowIdx >= mUnitCount) {
return INDEX_NONE;
}
@@ -604,7 +651,7 @@ public class SlotView extends GLView {
return INDEX_NONE;
}
- int index = WIDE
+ int index = mIsWide
? (columnIdx * mUnitCount + rowIdx)
: (rowIdx * mUnitCount + columnIdx);
@@ -612,7 +659,7 @@ public class SlotView extends GLView {
}
public int getScrollLimit() {
- int limit = WIDE ? mContentLength - mWidth : mContentLength - mHeight;
+ int limit = mIsWide ? mContentLength - mWidth : mContentLength - mHeight;
return limit <= 0 ? 0 : limit;
}
@@ -660,7 +707,7 @@ public class SlotView extends GLView {
cancelDown(false);
int scrollLimit = mLayout.getScrollLimit();
if (scrollLimit == 0) return false;
- float velocity = WIDE ? velocityX : velocityY;
+ float velocity = mIsWide ? velocityX : velocityY;
mScroller.fling((int) -velocity, 0, scrollLimit);
if (mUIListener != null) mUIListener.onUserInteractionBegin();
invalidate();
@@ -671,7 +718,7 @@ public class SlotView extends GLView {
public boolean onScroll(MotionEvent e1,
MotionEvent e2, float distanceX, float distanceY) {
cancelDown(false);
- float distance = WIDE ? distanceX : distanceY;
+ float distance = mIsWide ? distanceX : distanceY;
int overDistance = mScroller.startScroll(
Math.round(distance), 0, mLayout.getScrollLimit());
if (mOverscrollEffect == OVERSCROLL_3D && overDistance != 0) {
@@ -718,7 +765,7 @@ public class SlotView extends GLView {
mStartIndex = INDEX_NONE;
}
// Reset the scroll position to avoid scrolling over the updated limit.
- setScrollPosition(WIDE ? mScrollX : mScrollY);
+ setScrollPosition(mIsWide ? mScrollX : mScrollY);
return changed;
}
@@ -785,4 +832,11 @@ public class SlotView extends GLView {
if (progress == 1f) mEnabled = false;
}
}
+
+ /**
+ * Get the SlotView's max scroll value.
+ */
+ public int getScrollLimit() {
+ return mLayout.getScrollLimit();
+ }
}
diff --git a/src/com/android/gallery3d/util/GIFView.java b/src/com/android/gallery3d/util/GIFView.java
new file mode 100755
index 000000000..86003fb31
--- /dev/null
+++ b/src/com/android/gallery3d/util/GIFView.java
@@ -0,0 +1,214 @@
+package com.android.gallery3d.util;
+
+import com.android.gallery3d.R;
+
+import android.content.Context;
+import android.content.ContentResolver;
+import android.content.res.AssetManager;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.IOException;
+
+public class GIFView extends ImageView implements GifAction {
+
+ private static final String TAG = "GIFView";
+ private static final float SCALE_LIMIT = 4;
+ private static final long FRAME_DELAY = 200; //milliseconds
+
+ private GifDecoder mGifDecoder = null;
+ private Bitmap mCurrentImage = null;
+ private DrawThread mDrawThread = null;
+
+ private Uri mUri;
+ private Context mContext;
+
+ public GIFView(Context context) {
+ super(context);
+ mContext = context;
+ }
+
+ public boolean setDrawable(Uri uri) {
+ if (null == uri) {
+ return false;
+ }
+ mUri = uri;
+
+ InputStream is = getInputStream(uri);
+ if (is == null || (getFileSize (is) == 0)) {
+ return false;
+ }
+ startDecode(is);
+ return true;
+ }
+
+ private int getFileSize (InputStream is) {
+ if(is == null) return 0;
+
+ int size = 0;
+ try {
+ if (is instanceof FileInputStream) {
+ FileInputStream f = (FileInputStream) is;
+ size = (int) f.getChannel().size();
+ } else {
+ while (-1 != is.read()) {
+ size++;
+ }
+ }
+
+ } catch (IOException e) {
+ Log.e(TAG, "catch exception:" + e);
+ }
+
+ return size;
+
+ }
+
+ private InputStream getInputStream (Uri uri) {
+ ContentResolver cr = mContext.getContentResolver();
+ InputStream input = null;
+ try {
+ input = cr.openInputStream(uri);
+ } catch (IOException e) {
+ Log.e(TAG, "catch exception:" + e);
+ }
+ return input;
+ }
+
+ private void startDecode(InputStream is) {
+ freeGifDecoder();
+ mGifDecoder = new GifDecoder(is, this);
+ mGifDecoder.start();
+ }
+
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ if (mGifDecoder == null) {
+ return;
+ }
+
+ if (mCurrentImage == null) {
+ mCurrentImage = mGifDecoder.getImage();
+ }
+ if (mCurrentImage == null) {
+ // if this gif can not be displayed, just try to show it as jpg by parsing mUri
+ setImageURI(mUri);
+ return;
+ }
+ setImageURI(null);
+ int saveCount = canvas.getSaveCount();
+ canvas.save();
+ canvas.translate(getPaddingLeft(), getPaddingTop());
+ Rect sRect = null;
+ Rect dRect = null;
+
+ int imageHeight = mCurrentImage.getHeight();
+ int imageWidth = mCurrentImage.getWidth();
+
+ int displayHeight = ViewGifImage.mDM.heightPixels;
+ int displayWidth = ViewGifImage.mDM.widthPixels;
+
+ int width, height;
+ if (imageWidth >= displayWidth || imageHeight >= displayHeight) {
+ // scale-down the image
+ if (imageWidth * displayHeight > displayWidth * imageHeight) {
+ width = displayWidth;
+ height = (imageHeight * width) / imageWidth;
+ } else {
+ height = displayHeight;
+ width = (imageWidth * height) / imageHeight;
+ }
+ } else {
+ // scale-up the image
+ float scale = Math.min(SCALE_LIMIT, Math.min(displayWidth / (float) imageWidth,
+ displayHeight / (float) imageHeight));
+ width = (int) (imageWidth * scale);
+ height = (int) (imageHeight * scale);
+ }
+ dRect = new Rect((displayWidth - width) / 2, (displayHeight - height) / 2,
+ (displayWidth + width) / 2, (displayHeight + height) / 2);
+ canvas.drawBitmap(mCurrentImage, sRect, dRect, null);
+ canvas.restoreToCount(saveCount);
+ }
+
+ public void parseOk(boolean parseStatus, int frameIndex) {
+ if (parseStatus) {
+ //indicates the start of a new GIF
+ if (mGifDecoder != null && frameIndex == -1
+ && mGifDecoder.getFrameCount() > 1) {
+ if (mDrawThread != null) {
+ mDrawThread = null;
+ }
+ mDrawThread = new DrawThread();
+ mDrawThread.start();
+ }
+ } else {
+ Log.e(TAG, "parse error");
+ }
+ }
+
+ private Handler mRedrawHandler = new Handler() {
+ public void handleMessage(Message msg) {
+ invalidate();
+ }
+ };
+
+ private class DrawThread extends Thread {
+ public void run() {
+ if (mGifDecoder == null) {
+ return;
+ }
+
+ while (true) {
+ if (!isShown() || mRedrawHandler == null) {
+ break;
+ }
+ if (mGifDecoder == null) {
+ return;
+ }
+ GifFrame frame = mGifDecoder.next();
+ mCurrentImage = frame.mImage;
+
+ Message msg = mRedrawHandler.obtainMessage();
+ mRedrawHandler.sendMessage(msg);
+ try {
+ Thread.sleep(getDelay(frame));
+ } catch (InterruptedException e) {
+ Log.e(TAG, "catch exception:" + e);
+ }
+ }
+ }
+
+ }
+
+ private long getDelay (GifFrame frame) {
+ //in milliseconds
+ return frame.mDelayInMs == 0 ? FRAME_DELAY : frame.mDelayInMs;
+ }
+
+ private void freeGifDecoder () {
+ if (mGifDecoder != null) {
+ mGifDecoder.free();
+ mGifDecoder = null;
+ }
+
+ }
+
+ public void freeMemory() {
+ if (mDrawThread != null) {
+ mDrawThread = null;
+ }
+ freeGifDecoder();
+ }
+}
diff --git a/src/com/android/gallery3d/util/GalleryUtils.java b/src/com/android/gallery3d/util/GalleryUtils.java
index 8fb926c0b..8e4ebb714 100644
--- a/src/com/android/gallery3d/util/GalleryUtils.java
+++ b/src/com/android/gallery3d/util/GalleryUtils.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.util;
import android.annotation.TargetApi;
+import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
@@ -35,6 +36,7 @@ import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
+import android.widget.Toast;
import com.android.gallery3d.R;
import com.android.gallery3d.app.GalleryActivity;
@@ -275,7 +277,7 @@ public class GalleryUtils {
return String.format(Locale.ENGLISH, format, latitude, longitude);
}
- public static void showOnMap(Context context, double latitude, double longitude) {
+ public static void showOnMap(final Context context, double latitude, double longitude) {
try {
// We don't use "geo:latitude,longitude" because it only centers
// the MapView to the specified location, but we need a marker
@@ -292,8 +294,21 @@ public class GalleryUtils {
// Use the "geo intent" if no GMM is installed
Log.e(TAG, "GMM activity not found!", e);
String url = formatLatitudeLongitude("geo:%f,%f", latitude, longitude);
- Intent mapsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- context.startActivity(mapsIntent);
+ try {
+ Intent mapsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ context.startActivity(mapsIntent);
+ } catch (ActivityNotFoundException ex) {
+ Log.e(TAG, "Map view activity not found! url = " + url, ex);
+ ((Activity)context).runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(context,
+ context.getString(R.string.map_activity_not_found_err),
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+
+ }
}
}
diff --git a/src/com/android/gallery3d/util/GifAction.java b/src/com/android/gallery3d/util/GifAction.java
new file mode 100644
index 000000000..88e3cdee0
--- /dev/null
+++ b/src/com/android/gallery3d/util/GifAction.java
@@ -0,0 +1,5 @@
+package com.android.gallery3d.util;
+
+public interface GifAction {
+ public void parseOk(boolean parseStatus, int frameIndex);
+}
diff --git a/src/com/android/gallery3d/util/GifDecoder.java b/src/com/android/gallery3d/util/GifDecoder.java
new file mode 100755
index 000000000..4235fc5a5
--- /dev/null
+++ b/src/com/android/gallery3d/util/GifDecoder.java
@@ -0,0 +1,723 @@
+package com.android.gallery3d.util;
+
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.util.Log;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+public class GifDecoder extends Thread {
+
+ public static final int STATUS_PARSING = 0;
+ public static final int STATUS_FORMAT_ERROR = 1;
+ public static final int STATUS_OPEN_ERROR = 2;
+ public static final int STATUS_FINISH = -1;
+
+ private InputStream mIS;
+ private int mStatus;
+
+ public int mWidth; // full image width
+ public int mHeight; // full image height
+ private boolean mGctFlag; // global color table used
+ private int mGctSize; // size of global color table
+ private int mLoopCount = 1; // iterations; 0 = repeat forever
+
+ private int[] mGct; // global color table
+ private int[] mLct; // local color table
+ private int[] mAct; // active color table
+
+ private int mBgIndex; // background color index
+ private int mBgColor; // background color
+ private int mLastBgColor; // previous bg color
+ private int mPixelAspect; // pixel aspect ratio
+
+ private boolean mLctFlag; // local color table flag
+ private boolean mInterlace; // interlace flag
+ private int mLctSize; // local color table size
+
+ private int mIx, mIy, mIw, mIh; // current image rectangle
+ private int mLrx, mLry, mLrw, mLrh;
+ private Bitmap mImage; // current frame
+ private Bitmap mLastImage; // previous frame
+ private GifFrame mCurrentFrame = null;
+
+ private boolean mIsShow = false;
+
+ private byte[] mBlock = new byte[256]; // current data block
+ private int mBlockSize = 0; // block size
+ private int mDispose = 0;
+ private int mLastDispose = 0;
+ private boolean mTransparency = false; // use transparent color
+ private int mDelay = 0; // delay in milliseconds
+ private int mTransIndex; // transparent color index
+
+ // max decoder pixel stack size
+ private static final int MaxStackSize = 4096;
+
+ // LZW decoder working arrays
+ private short[] mPrefix;
+ private byte[] mSuffix;
+ private byte[] mPixelStack;
+ private byte[] mPixels;
+
+ private GifFrame mGifFrame; // frames read from current file
+ private int mFrameCount;
+
+ private GifAction mGifAction = null;
+
+ private byte[] mGifData = null;
+
+ public GifDecoder(byte[] data, GifAction act) {
+ mGifData = data;
+ mGifAction = act;
+ }
+
+ public GifDecoder(InputStream is, GifAction act) {
+ mIS = is;
+ mGifAction = act;
+ }
+
+ public void run() {
+ if (mIS != null) {
+ readStream();
+ } else if (mGifData != null) {
+ readByte();
+ }
+ }
+
+ public void free() {
+ freeFrame();
+ freeIS();
+ freeImage();
+ }
+
+ public int getStatus() {
+ return mStatus;
+ }
+
+ public boolean parseOk() {
+ return mStatus == STATUS_FINISH;
+ }
+
+ public int getDelay(int n) {
+ mDelay = -1;
+ if ((n >= 0) && (n < mFrameCount)) {
+ GifFrame f = getFrame(n);
+ if (f != null) {
+ mDelay = f.mDelayInMs;
+ }
+ }
+ return mDelay;
+ }
+
+ public int[] getDelays() {
+ GifFrame f = mGifFrame;
+ int[] d = new int[mFrameCount];
+ int i = 0;
+ while (f != null && i < mFrameCount) {
+ d[i] = f.mDelayInMs;
+ f = f.mNextFrame;
+ i++;
+ }
+ return d;
+ }
+
+ public int getFrameCount() {
+ return mFrameCount;
+ }
+
+ public Bitmap getImage() {
+ return getFrameImage(0);
+ }
+
+ public int getLoopCount() {
+ return mLoopCount;
+ }
+
+ private void setPixels() {
+ int[] dest = new int[mWidth * mHeight];
+ // fill in starting image contents based on last image's dispose code
+ if (mLastDispose > 0) {
+ if (mLastDispose == 3) {
+ // use image before last
+ int n = mFrameCount - 2;
+ if (n > 0) {
+ mLastImage = getPreUndisposedImage(n - 1);
+ } else {
+ mLastImage = null;
+ }
+ }
+ if (mLastImage != null) {
+ mLastImage.getPixels(dest, 0, mWidth, 0, 0, mWidth, mHeight);
+ // copy pixels
+ if (mLastDispose == 2) {
+ // fill last image rect area with background color
+ int c = 0;
+ if (!mTransparency) {
+ c = mLastBgColor;
+ }
+ for (int i = 0; i < mLrh; i++) {
+ int n1 = (mLry + i) * mWidth + mLrx;
+ int n2 = n1 + mLrw;
+ for (int k = n1; k < n2; k++) {
+ dest[k] = c;
+ }
+ }
+ }
+ }
+ }
+
+ // copy each source line to the appropriate place in the destination
+ int pass = 1;
+ int inc = 8;
+ int iline = 0;
+ for (int i = 0; i < mIh; i++) {
+ int line = i;
+ if (mInterlace) {
+ if (iline >= mIh) {
+ pass++;
+ switch (pass) {
+ case 2:
+ iline = 4;
+ break;
+ case 3:
+ iline = 2;
+ inc = 4;
+ break;
+ case 4:
+ iline = 1;
+ inc = 2;
+ }
+ }
+ line = iline;
+ iline += inc;
+ }
+ line += mIy;
+ if (line < mHeight) {
+ int k = line * mWidth;
+ int dx = k + mIx; // start of line in dest
+ int dlim = dx + mIw; // end of dest line
+ if ((k + mWidth) < dlim) {
+ dlim = k + mWidth; // past dest edge
+ }
+ int sx = i * mIw; // start of line in source
+ while (dx < dlim) {
+ // map color and insert in destination
+ int index = ((int) mPixels[sx++]) & 0xff;
+ int c = mAct[index];
+ if (c != 0) {
+ dest[dx] = c;
+ }
+ dx++;
+ }
+ }
+ }
+ mImage = Bitmap.createBitmap(dest, mWidth, mHeight, Config.ARGB_4444);
+ }
+
+ public Bitmap getFrameImage(int n) {
+ GifFrame frame = getFrame(n);
+ if (frame == null) {
+ return null;
+ } else {
+ return frame.mImage;
+ }
+ }
+
+ public GifFrame getCurrentFrame() {
+ return mCurrentFrame;
+ }
+
+ public GifFrame getFrame(int n) {
+ GifFrame frame = mGifFrame;
+ int i = 0;
+ while (frame != null) {
+ if (i == n) {
+ return frame;
+ } else {
+ frame = frame.mNextFrame;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ private Bitmap getPreUndisposedImage(int n) {
+ Bitmap preUndisposedImage = null;
+ GifFrame frame = mGifFrame;
+ int i = 0;
+ while (frame != null && i <= n) {
+ if (frame.mDispose == 1) {
+ preUndisposedImage = frame.mImage;
+ } else {
+ frame = frame.mNextFrame;
+ }
+ i++;
+ }
+ return preUndisposedImage;
+ }
+
+ public void reset() {
+ mCurrentFrame = mGifFrame;
+ }
+
+ public GifFrame next() {
+ if (mIsShow == false) {
+ mIsShow = true;
+ return mGifFrame;
+ } else {
+ if (mStatus == STATUS_PARSING) {
+ if (mCurrentFrame.mNextFrame != null) {
+ mCurrentFrame = mCurrentFrame.mNextFrame;
+ }
+ } else {
+ mCurrentFrame = mCurrentFrame.mNextFrame;
+ if (mCurrentFrame == null) {
+ mCurrentFrame = mGifFrame;
+ }
+ }
+ return mCurrentFrame;
+ }
+ }
+
+ private int readByte() {
+ mIS = new ByteArrayInputStream(mGifData);
+ mGifData = null;
+ return readStream();
+ }
+
+ private int readStream() {
+ init();
+ if (mIS != null) {
+ readHeader();
+ if (!err()) {
+ readContents();
+ if (mFrameCount < 0) {
+ mStatus = STATUS_FORMAT_ERROR;
+ mGifAction.parseOk(false, -1);
+ } else {
+ mStatus = STATUS_FINISH;
+ mGifAction.parseOk(true, -1);
+ }
+ }
+ try {
+ mIS.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ mStatus = STATUS_OPEN_ERROR;
+ mGifAction.parseOk(false, -1);
+ }
+ return mStatus;
+ }
+
+ private void decodeImageData() {
+ int NullCode = -1;
+ int npix = mIw * mIh;
+ int available, clear, code_mask, code_size, end_of_information, in_code, old_code,
+ bits, code, count, i, datum, data_size, first, top, bi, pi;
+
+ if ((mPixels == null) || (mPixels.length < npix)) {
+ mPixels = new byte[npix]; // allocate new pixel array
+ }
+ if (mPrefix == null) {
+ mPrefix = new short[MaxStackSize];
+ }
+ if (mSuffix == null) {
+ mSuffix = new byte[MaxStackSize];
+ }
+ if (mPixelStack == null) {
+ mPixelStack = new byte[MaxStackSize + 1];
+ }
+ // Initialize GIF data stream decoder.
+ data_size = read();
+ clear = 1 << data_size;
+ end_of_information = clear + 1;
+ available = clear + 2;
+ old_code = NullCode;
+ code_size = data_size + 1;
+ code_mask = (1 << code_size) - 1;
+ for (code = 0; code < clear; code++) {
+ mPrefix[code] = 0;
+ mSuffix[code] = (byte) code;
+ }
+
+ // Decode GIF pixel stream.
+ datum = bits = count = first = top = pi = bi = 0;
+ for (i = 0; i < npix;) {
+ if (top == 0) {
+ if (bits < code_size) {
+ // Load bytes until there are enough bits for a code.
+ if (count == 0) {
+ // Read a new data block.
+ count = readBlock();
+ if (count <= 0) {
+ break;
+ }
+ bi = 0;
+ }
+ datum += (((int) mBlock[bi]) & 0xff) << bits;
+ bits += 8;
+ bi++;
+ count--;
+ continue;
+ }
+ // Get the next code.
+ code = datum & code_mask;
+ datum >>= code_size;
+ bits -= code_size;
+
+ // Interpret the code
+ if ((code > available) || (code == end_of_information)) {
+ break;
+ }
+ if (code == clear) {
+ // Reset decoder.
+ code_size = data_size + 1;
+ code_mask = (1 << code_size) - 1;
+ available = clear + 2;
+ old_code = NullCode;
+ continue;
+ }
+ if (old_code == NullCode) {
+ mPixelStack[top++] = mSuffix[code];
+ old_code = code;
+ first = code;
+ continue;
+ }
+ in_code = code;
+ if (code == available) {
+ mPixelStack[top++] = (byte) first;
+ code = old_code;
+ }
+ while (code > clear) {
+ mPixelStack[top++] = mSuffix[code];
+ code = mPrefix[code];
+ }
+ first = ((int) mSuffix[code]) & 0xff;
+ // Add a new string to the string table,
+ if (available >= MaxStackSize) {
+ break;
+ }
+ mPixelStack[top++] = (byte) first;
+ mPrefix[available] = (short) old_code;
+ mSuffix[available] = (byte) first;
+ available++;
+ if (((available & code_mask) == 0)
+ && (available < MaxStackSize)) {
+ code_size++;
+ code_mask += available;
+ }
+ old_code = in_code;
+ }
+
+ // Pop a pixel off the pixel stack.
+ top--;
+ mPixels[pi++] = mPixelStack[top];
+ i++;
+ }
+ for (i = pi; i < npix; i++) {
+ mPixels[i] = 0; // clear missing pixels
+ }
+ }
+
+ private boolean err() {
+ return mStatus != STATUS_PARSING;
+ }
+
+ private void init() {
+ mStatus = STATUS_PARSING;
+ mFrameCount = 0;
+ mGifFrame = null;
+ mGct = null;
+ mLct = null;
+ }
+
+ private int read() {
+ int curByte = 0;
+ try {
+ curByte = mIS.read();
+ } catch (Exception e) {
+ mStatus = STATUS_FORMAT_ERROR;
+ }
+ return curByte;
+ }
+
+ private int readBlock() {
+ mBlockSize = read();
+ int n = 0;
+ if (mBlockSize > 0) {
+ try {
+ int count = 0;
+ while (n < mBlockSize) {
+ count = mIS.read(mBlock, n, mBlockSize - n);
+ if (count == -1) {
+ break;
+ }
+ n += count;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (n < mBlockSize) {
+ mStatus = STATUS_FORMAT_ERROR;
+ }
+ }
+ return n;
+ }
+
+ private int[] readColorTable(int ncolors) {
+ int nbytes = 3 * ncolors;
+ int[] tab = null;
+ byte[] c = new byte[nbytes];
+ int n = 0;
+ try {
+ n = mIS.read(c);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (n < nbytes) {
+ mStatus = STATUS_FORMAT_ERROR;
+ } else {
+ tab = new int[256]; // max size to avoid bounds checks
+ int i = 0;
+ int j = 0;
+ while (i < ncolors) {
+ int r = ((int) c[j++]) & 0xff;
+ int g = ((int) c[j++]) & 0xff;
+ int b = ((int) c[j++]) & 0xff;
+ tab[i++] = 0xff000000 | (r << 16) | (g << 8) | b;
+ }
+ }
+ return tab;
+ }
+
+ private void readContents() {
+ // read GIF file content blocks
+ boolean done = false;
+ while (!(done || err())) {
+ int code = read();
+ switch (code) {
+ case 0x2C: // image separator
+ readImage();
+ break;
+ case 0x21: // extension
+ code = read();
+ switch (code) {
+ case 0xf9: // graphics control extension
+ readGraphicControlExt();
+ break;
+ case 0xff: // application extension
+ readBlock();
+ String app = "";
+ for (int i = 0; i < 11; i++) {
+ app += (char) mBlock[i];
+ }
+ if (app.equals("NETSCAPE2.0")) {
+ readNetscapeExt();
+ } else {
+ skip(); // don't care
+ }
+ break;
+ default: // uninteresting extension
+ skip();
+ }
+ break;
+ case 0x3b: // terminator
+ done = true;
+ break;
+ case 0x00: // bad byte, but keep going and see what happens
+ break;
+ default:
+ mStatus = STATUS_FORMAT_ERROR;
+ }
+ }
+ }
+
+ private void readGraphicControlExt() {
+ read(); // block size
+ int packed = read(); // packed fields
+ mDispose = (packed & 0x1c) >> 2; // disposal method
+ if (mDispose == 0) {
+ mDispose = 1; // elect to keep old image if discretionary
+ }
+ mTransparency = (packed & 1) != 0;
+ mDelay = readShort() * 10; // delay in milliseconds
+ mTransIndex = read(); // transparent color index
+ read(); // block terminator
+ }
+
+ private void readHeader() {
+ String id = "";
+ for (int i = 0; i < 6; i++) {
+ id += (char) read();
+ }
+ if (!id.startsWith("GIF")) {
+ mStatus = STATUS_FORMAT_ERROR;
+ return;
+ }
+ readLSD();
+ if (mGctFlag && !err()) {
+ mGct = readColorTable(mGctSize);
+ mBgColor = mGct[mBgIndex];
+ }
+ }
+
+ private void readImage() {
+ mIx = readShort(); // (sub)image position & size
+ mIy = readShort();
+ mIw = readShort();
+ mIh = readShort();
+ int packed = read();
+ mLctFlag = (packed & 0x80) != 0; // 1 - local color table flag
+ mInterlace = (packed & 0x40) != 0; // 2 - interlace flag
+ // 3 - sort flag
+ // 4-5 - reserved
+ mLctSize = 2 << (packed & 7); // 6-8 - local color table size
+ if (mLctFlag) {
+ mLct = readColorTable(mLctSize); // read table
+ mAct = mLct; // make local table active
+ } else {
+ mAct = mGct; // make global table active
+ if (mBgIndex == mTransIndex) {
+ mBgColor = 0;
+ }
+ }
+ int save = 0;
+ if (mTransparency) {
+ save = mAct[mTransIndex];
+ mAct[mTransIndex] = 0; // set transparent color if specified
+ }
+ if (mAct == null) {
+ mStatus = STATUS_FORMAT_ERROR; // no color table defined
+ }
+ if (err()) {
+ return;
+ }
+ try {
+ decodeImageData(); // decode pixel data
+ skip();
+ if (err()) {
+ return;
+ }
+ mFrameCount++;
+ // create new image to receive frame data
+ mImage = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_4444);
+ // createImage(mWidth, mHeight);
+ setPixels(); // transfer pixel data to image
+ if (mGifFrame == null) {
+ mGifFrame = new GifFrame(mImage, mDelay, mDispose);
+ mCurrentFrame = mGifFrame;
+ } else {
+ GifFrame f = mGifFrame;
+ while (f.mNextFrame != null) {
+ f = f.mNextFrame;
+ }
+ f.mNextFrame = new GifFrame(mImage, mDelay, mDispose);
+ }
+ // frames.addElement(new GifFrame(image, delay)); // add image to
+ // frame
+ // list
+ if (mTransparency) {
+ mAct[mTransIndex] = save;
+ }
+ resetFrame();
+ mGifAction.parseOk(true, mFrameCount);
+ } catch (OutOfMemoryError e) {
+ Log.e("GifDecoder", ">>> log : " + e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ private void readLSD() {
+ // logical screen size
+ mWidth = readShort();
+ mHeight = readShort();
+ // packed fields
+ int packed = read();
+ mGctFlag = (packed & 0x80) != 0; // 1 : global color table flag
+ // 2-4 : color resolution
+ // 5 : gct sort flag
+ mGctSize = 2 << (packed & 7); // 6-8 : gct size
+ mBgIndex = read(); // background color index
+ mPixelAspect = read(); // pixel aspect ratio
+ }
+
+ private void readNetscapeExt() {
+ do {
+ readBlock();
+ if (mBlock[0] == 1) {
+ // loop count sub-block
+ int b1 = ((int) mBlock[1]) & 0xff;
+ int b2 = ((int) mBlock[2]) & 0xff;
+ mLoopCount = (b2 << 8) | b1;
+ }
+ } while ((mBlockSize > 0) && !err());
+ }
+
+ private int readShort() {
+ // read 16-bit value, LSB first
+ return read() | (read() << 8);
+ }
+
+ private void resetFrame() {
+ mLastDispose = mDispose;
+ mLrx = mIx;
+ mLry = mIy;
+ mLrw = mIw;
+ mLrh = mIh;
+ mLastImage = mImage;
+ mLastBgColor = mBgColor;
+ mDispose = 0;
+ mTransparency = false;
+ mDelay = 0;
+ mLct = null;
+ }
+
+ /**
+ * Skips variable length blocks up to and including next zero length block.
+ */
+ private void skip() {
+ do {
+ readBlock();
+ } while ((mBlockSize > 0) && !err());
+ }
+
+ private void freeFrame() {
+ GifFrame fg = mGifFrame;
+ while (fg != null) {
+ if (fg.mImage != null) {
+ fg.mImage.recycle();
+ }
+ fg.mImage = null;
+ fg = null;
+ mGifFrame = mGifFrame.mNextFrame;
+ fg = mGifFrame;
+ }
+ }
+
+ private void freeIS() {
+ if (mIS != null) {
+ try {
+ mIS.close();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ mIS = null;
+ }
+ mGifData = null;
+ }
+
+ private void freeImage() {
+ if (mImage != null) {
+ mImage.recycle();
+ mImage = null;
+ }
+ if (mLastImage != null) {
+ mLastImage.recycle();
+ mLastImage = null;
+ }
+ }
+}
diff --git a/src/com/android/gallery3d/util/GifFrame.java b/src/com/android/gallery3d/util/GifFrame.java
new file mode 100755
index 000000000..87d58a40d
--- /dev/null
+++ b/src/com/android/gallery3d/util/GifFrame.java
@@ -0,0 +1,17 @@
+package com.android.gallery3d.util;
+
+import android.graphics.Bitmap;
+
+public class GifFrame {
+
+ public Bitmap mImage;
+ public int mDelayInMs; //in milliseconds
+ public int mDispose;
+ public GifFrame mNextFrame = null;
+
+ public GifFrame(Bitmap bitmap, int delay, int dispose) {
+ mImage = bitmap;
+ mDelayInMs = delay;
+ mDispose = dispose;
+ }
+}
diff --git a/src/com/android/gallery3d/util/MediaSetUtils.java b/src/com/android/gallery3d/util/MediaSetUtils.java
index 043800561..35a4dff04 100644
--- a/src/com/android/gallery3d/util/MediaSetUtils.java
+++ b/src/com/android/gallery3d/util/MediaSetUtils.java
@@ -28,9 +28,12 @@ import java.util.Comparator;
public class MediaSetUtils {
public static final Comparator<MediaSet> NAME_COMPARATOR = new NameComparator();
- public static final int CAMERA_BUCKET_ID = GalleryUtils.getBucketId(
- Environment.getExternalStorageDirectory().toString() + "/"
- + BucketNames.CAMERA);
+ private static String mRoot = Environment.getExternalStorageDirectory().toString();
+
+ public static void setRoot(String root) {
+ mRoot = root;
+ }
+
public static final int DOWNLOAD_BUCKET_ID = GalleryUtils.getBucketId(
Environment.getExternalStorageDirectory().toString() + "/"
+ BucketNames.DOWNLOAD);
@@ -44,14 +47,14 @@ public class MediaSetUtils {
Environment.getExternalStorageDirectory().toString() +
"/" + BucketNames.SCREENSHOTS);
- private static final Path[] CAMERA_PATHS = {
- Path.fromString("/local/all/" + CAMERA_BUCKET_ID),
- Path.fromString("/local/image/" + CAMERA_BUCKET_ID),
- Path.fromString("/local/video/" + CAMERA_BUCKET_ID)};
+ public static int getCameraBucketId() {
+ return GalleryUtils.getBucketId(mRoot + "/" + BucketNames.CAMERA);
+ }
public static boolean isCameraSource(Path path) {
- return CAMERA_PATHS[0] == path || CAMERA_PATHS[1] == path
- || CAMERA_PATHS[2] == path;
+ return path.equalsIgnoreCase("/local/all/" + getCameraBucketId())
+ || path.equalsIgnoreCase("/local/image/" + getCameraBucketId())
+ || path.equalsIgnoreCase("/local/video/" + getCameraBucketId());
}
// Sort MediaSets by name
diff --git a/src/com/android/gallery3d/util/ViewGifImage.java b/src/com/android/gallery3d/util/ViewGifImage.java
new file mode 100755
index 000000000..cdd509280
--- /dev/null
+++ b/src/com/android/gallery3d/util/ViewGifImage.java
@@ -0,0 +1,67 @@
+package com.android.gallery3d.util;
+
+import com.android.gallery3d.R;
+
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.DisplayMetrics;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+public class ViewGifImage extends Activity {
+ private static final String TAG = "ViewGifImage";
+ public static final String VIEW_GIF_ACTION = "com.android.gallery3d.VIEW_GIF";
+
+ public static DisplayMetrics mDM;
+
+ private ImageView mGifView;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.view_gif_image);
+ mDM = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(mDM);
+ if (getIntent().getAction() != null
+ && getIntent().getAction().equals(VIEW_GIF_ACTION)) {
+ Uri gifUri = getIntent().getData();
+ showGifPicture(gifUri);
+ }
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ finish();
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mGifView != null && mGifView instanceof GIFView) {
+ ((GIFView) mGifView).freeMemory();
+ mGifView = null;
+ }
+ super.onDestroy();
+ }
+
+ private void showGifPicture(Uri uri) {
+ mGifView = new GIFView(this);
+ ((LinearLayout) findViewById(R.id.image_absoluteLayout)).addView(mGifView,
+ new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+ if (((GIFView) mGifView).setDrawable(uri)) return;
+
+ finish();
+
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ getWindowManager().getDefaultDisplay().getMetrics(mDM);
+ super.onConfigurationChanged(newConfig);
+ }
+}
diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java
new file mode 100644
index 000000000..a5c7fb043
--- /dev/null
+++ b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java
@@ -0,0 +1,79 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.thundersoft.hz.selfportrait.detect;
+
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.util.Log;
+
+public class FaceDetect {
+ private static final String TAG = "FaceDetect";
+
+ private int mHandle = 0;
+
+ static {
+ try {
+ System.loadLibrary("ts_detected_face_jni");
+ } catch (UnsatisfiedLinkError e) {
+ e.printStackTrace();
+ Log.e(TAG, "ts_detected_face_jni library not found!");
+ }
+ }
+
+ /**
+ * initialize method,MUST called at first time.
+ */
+ public void initialize() {
+ mHandle = native_create();
+ }
+
+ /**
+ * uninitialize method,MUST called at last time.
+ */
+
+ public void uninitialize() {
+ native_destroy(mHandle);
+ }
+
+ /**
+ * dectectFeatures method,MUST called after initialize method and before
+ * uninitialize method.
+ *
+ * @param bmp, Android Bitmap instance,MUST not null.
+ * @return FaceInfo array if success, otherwise return null.
+ */
+ public FaceInfo[] dectectFeatures(Bitmap bmp) {
+ int count = native_detect(mHandle, bmp);
+ if (count < 1) {
+ return null;
+ }
+ FaceInfo[] res = new FaceInfo[count];
+ for (int i = 0; i < count; i++) {
+ FaceInfo face = new FaceInfo();
+ native_face_info(mHandle, i, face.face, face.eye1, face.eye2, face.mouth);
+ res[i] = face;
+ }
+ return res;
+ }
+
+ private static native int native_create();
+ private static native void native_destroy(int handle);
+ private static native int native_detect(int handle, Bitmap bmp);
+ private static native int native_face_info(int handle, int index, Rect face, Rect eye1,
+ Rect eye2, Rect mouth);
+}
diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java
new file mode 100644
index 000000000..eee51f71b
--- /dev/null
+++ b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.thundersoft.hz.selfportrait.detect;
+
+import android.graphics.Rect;
+
+public class FaceInfo {
+ /**
+ * face rectangle
+ */
+ public Rect face = new Rect();
+ /**
+ * left eye rectangle
+ */
+ public Rect eye1 = new Rect();
+ /**
+ * right eye rectangle
+ */
+ public Rect eye2 = new Rect();
+ /**
+ * mount rectangle
+ */
+ public Rect mouth = new Rect();
+}
diff --git a/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java
new file mode 100644
index 000000000..8d58bcfef
--- /dev/null
+++ b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java
@@ -0,0 +1,87 @@
+/*
+* Copyright (C) 2014,2015 Thundersoft Corporation
+* All rights Reserved
+*
+* 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.thundersoft.hz.selfportrait.makeup.engine;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.util.Log;
+
+public class MakeupEngine {
+ static {
+ try {
+ System.loadLibrary("ts_face_beautify_jni");
+ } catch (UnsatisfiedLinkError e) {
+ e.printStackTrace();
+ Log.e(MakeupEngine.class.getName(), "ts_face_beautify_jni library not found!");
+ }
+ }
+
+ private static MakeupEngine mInstance;
+
+ private MakeupEngine() {
+
+ }
+
+ public static MakeupEngine getMakeupObj() {
+ if(mInstance == null) {
+ mInstance = new MakeupEngine();
+ }
+
+ return mInstance;
+ }
+
+ private Context mContext;
+
+ public void setContext(Context context) {
+ mContext = context;
+ }
+
+ public Context getContext() {
+ return mContext;
+ }
+
+ /**
+ * FUNCTION: doProcessBeautify
+ * Do process face region clean and whiten.
+ * @param inBitmap, the Bitmap instance which have face region, MUST not null.
+ * @param outBitmap, the result of process, MUST not null.
+ * @param frameWidth,frameHeight, the size of inBitmap.
+ * @param faceRect, the face region in inBitmap.
+ * @param cleanLevel, the level of clean.(0-100)
+ * @param whiteLevel, the level of white.(0-100)
+ */
+ public static native boolean doProcessBeautify(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight,
+ Rect faceRect, int cleanLevel, int beautyLevel);
+
+ /**
+ * FUNCTION: doWarpFace
+ * Do process face region warp and big eye.
+ * @param inBitmap, the Bitmap instance which have face region, MUST not null.
+ * @param outBitmap, the result of process, MUST not null.
+ * @param frameWidth, the size of inBitmap.
+ * @param frameHeight, the size of inBitmap.
+ * @param leftEye, the left eye rectangle
+ * @param rightEye, the right eye rectangle
+ * @param mouth, the mouth rectangle
+ * @param bigEyeLevel, the level of big eye.(0-100)
+ * @param trimFaceLevel, the level of trim face.(0-100)
+ */
+ public static native boolean doWarpFace(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight,
+ Rect leftEye, Rect rightEye, Rect mouth, int bigEyeLevel, int trimFaceLevel);
+}
diff --git a/src/org/codeaurora/gallery3d/ext/ActivityHooker.java b/src/org/codeaurora/gallery3d/ext/ActivityHooker.java
new file mode 100644
index 000000000..65761ff23
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/ActivityHooker.java
@@ -0,0 +1,96 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * Default implemention class of IActivityHooker.
+ */
+public class ActivityHooker implements IActivityHooker {
+
+ private static final int MENU_MAX_NUMBER = 100;
+ private static int sMenuId = 1;
+ private int mMenuId;
+ private static Object sMenuLock = new Object();
+ private Activity mContext;
+ private Intent mIntent;
+
+ public ActivityHooker() {
+ synchronized (sMenuLock) {
+ sMenuId++;
+ mMenuId = sMenuId * MENU_MAX_NUMBER;
+ }
+ }
+
+ @Override
+ public int getMenuActivityId(int id) {
+ return mMenuId + id;
+ };
+
+ @Override
+ public int getMenuOriginalId(int id) {
+ return id - mMenuId;
+ }
+
+ @Override
+ public void init(Activity context, Intent intent) {
+ mContext = context;
+ mIntent = intent;
+ }
+
+ @Override
+ public Activity getContext() {
+ return mContext;
+ }
+
+ @Override
+ public Intent getIntent() {
+ return mIntent;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ }
+
+ @Override
+ public void onStart() {
+ }
+
+ @Override
+ public void onResume() {
+ }
+
+ @Override
+ public void onPause() {
+ }
+
+ @Override
+ public void onStop() {
+ }
+
+ @Override
+ public void onDestroy() {
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ return false;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ return false;
+ }
+
+ @Override
+ public void setParameter(String key, Object value) {
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java b/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java
new file mode 100644
index 000000000..4bf8616e7
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/ActivityHookerGroup.java
@@ -0,0 +1,150 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import java.util.ArrayList;
+
+/**
+ * The composite pattern class. It will deliver every action to its leaf
+ * hookers.
+ */
+public class ActivityHookerGroup extends ActivityHooker {
+ private ArrayList<IActivityHooker> mHooks = new ArrayList<IActivityHooker>();
+
+ /**
+ * Add hooker to current group.
+ *
+ * @param hooker
+ * @return
+ */
+ public boolean addHooker(IActivityHooker hooker) {
+ return mHooks.add(hooker);
+ }
+
+ /**
+ * Remove hooker from current group.
+ *
+ * @param hooker
+ * @return
+ */
+ public boolean removeHooker(IActivityHooker hooker) {
+ return mHooks.remove(hooker);
+ }
+
+ /**
+ * Get hooker of requested location.
+ *
+ * @param index
+ * @return
+ */
+ public IActivityHooker getHooker(int index) {
+ return mHooks.get(index);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ for (IActivityHooker hook : mHooks) {
+ hook.onCreate(savedInstanceState);
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ for (IActivityHooker hook : mHooks) {
+ hook.onStart();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ for (IActivityHooker hook : mHooks) {
+ hook.onResume();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ for (IActivityHooker hook : mHooks) {
+ hook.onPause();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ for (IActivityHooker hook : mHooks) {
+ hook.onStop();
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ for (IActivityHooker hook : mHooks) {
+ hook.onDestroy();
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ boolean handle = false;
+ for (IActivityHooker hook : mHooks) {
+ boolean one = hook.onCreateOptionsMenu(menu);
+ if (!handle) {
+ handle = one;
+ }
+ }
+ return handle;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ boolean handle = false;
+ for (IActivityHooker hook : mHooks) {
+ boolean one = hook.onPrepareOptionsMenu(menu);
+ if (!handle) {
+ handle = one;
+ }
+ }
+ return handle;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ super.onOptionsItemSelected(item);
+ boolean handle = false;
+ for (IActivityHooker hook : mHooks) {
+ boolean one = hook.onOptionsItemSelected(item);
+ if (!handle) {
+ handle = one;
+ }
+ }
+ return handle;
+ }
+
+ @Override
+ public void setParameter(String key, Object value) {
+ super.setParameter(key, value);
+ for (IActivityHooker hook : mHooks) {
+ hook.setParameter(key, value);
+ }
+ }
+
+ @Override
+ public void init(Activity context, Intent intent) {
+ super.init(context, intent);
+ for (IActivityHooker hook : mHooks) {
+ hook.init(context, intent);
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/ext/IActivityHooker.java b/src/org/codeaurora/gallery3d/ext/IActivityHooker.java
new file mode 100644
index 000000000..a83799626
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IActivityHooker.java
@@ -0,0 +1,128 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * Activity action hooker class. Host app's activity will call this hooker's
+ * functions in its lifecycle. For example:
+ * HostActivity.onCreate()-->hooker.onCreate(). But void init(Activity context,
+ * Intent intent) will be called before other functions. <br/>
+ * IActivityHooker objects may show menus, but we should give a unique menu id
+ * to every menus. Hooker can call getMenuActivityId(int) to get a global unique
+ * menu id to be used in menu.add(), and can call getMenuOriginalId(int) to get
+ * the original menu id. the example: class Hooker implements IActivityHooker {
+ * private static final int MENU_EXAMPLE = 1;
+ *
+ * @Override public boolean onCreateOptionsMenu(Menu menu) {
+ * super.onCreateOptionsMenu(menu); menu.add(0,
+ * getMenuActivityId(MENU_EXAMPLE), 0, android.R.string.ok); return
+ * true; }
+ * @Override public boolean onOptionsItemSelected(MenuItem item) {
+ * switch(getMenuOriginalId(item.getItemId())) { case MENU_EXAMPLE:
+ * //do something return true; default: return false; } } }
+ */
+public interface IActivityHooker {
+ /**
+ * Will be called in Host Activity.onCreate(Bundle savedInstanceState)
+ * @param savedInstanceState
+ */
+ void onCreate(Bundle savedInstanceState);
+ /**
+ * Will be called in Host Activity.onStart()
+ */
+ void onStart();
+ /**
+ * Will be called in Host Activity.onStop()
+ */
+ void onStop();
+ /**
+ * Will be called in Host Activity.onPause()
+ */
+ void onPause();
+ /**
+ * Will be called in Host Activity.onResume()
+ */
+ void onResume();
+ /**
+ * Will be called in Host Activity.onDestroy()
+ */
+ void onDestroy();
+ /**
+ * Will be called in Host Activity.onCreateOptionsMenu(Menu menu)
+ * @param menu
+ * @return
+ */
+ /**
+ * Will be called in Host Activity.onCreateOptionsMenu(Menu menu)
+ *
+ * @param menu
+ * @return
+ */
+ boolean onCreateOptionsMenu(Menu menu);
+
+ /**
+ * Will be called in Host Activity.onPrepareOptionsMenu(Menu menu)
+ *
+ * @param menu
+ * @return
+ */
+ boolean onPrepareOptionsMenu(Menu menu);
+
+ /**
+ * Will be called in Host Activity.onOptionsItemSelected(MenuItem item)
+ *
+ * @param item
+ * @return
+ */
+ boolean onOptionsItemSelected(MenuItem item);
+
+ /**
+ * Should be called before any other functions.
+ *
+ * @param context
+ * @param intent
+ */
+ void init(Activity context, Intent intent);
+
+ /**
+ * @return return activity set by init(Activity context, Intent intent)
+ */
+ Activity getContext();
+
+ /**
+ * @return return intent set by init(Activity context, Intent intent)
+ */
+ Intent getIntent();
+
+ /**
+ * IActivityHooker objects may show menus, but we should give a unique menu
+ * id to every menus. Hooker can call this function to get a global unique
+ * menu id to be used in menu.add()
+ *
+ * @param id
+ * @return
+ */
+ int getMenuActivityId(int id);
+
+ /**
+ * When onOptionsItemSelected is called, we can get menu's id from
+ * parameter. You can get the original menu id by calling this function.
+ *
+ * @param id
+ * @return
+ */
+ int getMenuOriginalId(int id);
+
+ /**
+ * Host activity will call this function to set parameter to hooker
+ * activity.
+ *
+ * @param key
+ * @param value
+ */
+ void setParameter(String key, Object value);
+}
diff --git a/src/org/codeaurora/gallery3d/ext/IContrllerOverlayExt.java b/src/org/codeaurora/gallery3d/ext/IContrllerOverlayExt.java
new file mode 100644
index 000000000..da50cdffc
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IContrllerOverlayExt.java
@@ -0,0 +1,51 @@
+package org.codeaurora.gallery3d.ext;
+/**
+ * Controller overlay extension interface.
+ */
+public interface IContrllerOverlayExt {
+ /**
+ * Show buffering state.
+ * @param fullBuffer
+ * @param percent
+ */
+ void showBuffering(boolean fullBuffer, int percent);
+ /**
+ * Clear buffering state.
+ */
+ void clearBuffering();
+ /**
+ * Show re-connecting state.
+ * @param times
+ */
+ void showReconnecting(int times);
+ /**
+ * Show re-connecting error for connecting fail error.
+ */
+ void showReconnectingError();
+ /**
+ * Show playing info or not.
+ * @param liveStreaming true means showing playing info, otherwise doesn't show playing info.
+ */
+ void setPlayingInfo(boolean liveStreaming);
+ /**
+ * Indicates whether current video can be paused or not.
+ * @param canPause
+ */
+ void setCanPause(boolean canPause);
+ /**
+ * Indicates whether thumb can be scrubbed or not.
+ * @param enable
+ */
+ void setCanScrubbing(boolean enable);
+ /**
+ * Always show bottmon panel or not.
+ * @param alwaysShow
+ * @param foreShow
+ */
+ void setBottomPanel(boolean alwaysShow, boolean foreShow);
+ /**
+ * Is playing end or not.
+ * @return
+ */
+ boolean isPlayingEnd();
+}
diff --git a/src/org/codeaurora/gallery3d/ext/IMovieItem.java b/src/org/codeaurora/gallery3d/ext/IMovieItem.java
new file mode 100644
index 000000000..dece4e803
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IMovieItem.java
@@ -0,0 +1,66 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.net.Uri;
+
+/**
+ * Movie info class
+ */
+public interface IMovieItem {
+ /**
+ * @return movie Uri, it's may be not the original Uri.
+ */
+ Uri getUri();
+
+ /**
+ * @return MIME type of video
+ */
+ String getMimeType();
+
+ /**
+ * @return title of video
+ */
+ String getTitle();
+
+ /**
+ * @return whether error occured or not.
+ */
+ boolean getError();
+
+ /**
+ * set title of video
+ *
+ * @param title
+ */
+ void setTitle(String title);
+
+ /**
+ * set video Uri
+ *
+ * @param uri
+ */
+ void setUri(Uri uri);
+
+ /**
+ * Set MIME type of video
+ *
+ * @param mimeType
+ */
+ void setMimeType(String mimeType);
+
+ /**
+ * Set error occured flag
+ */
+ void setError();
+
+ /**
+ * @return return original Uri of video.
+ */
+ Uri getOriginalUri();
+
+ /**
+ * Set video original Uri.
+ *
+ * @param uri
+ */
+ void setOriginalUri(Uri uri);
+}
diff --git a/src/org/codeaurora/gallery3d/ext/IMovieList.java b/src/org/codeaurora/gallery3d/ext/IMovieList.java
new file mode 100644
index 000000000..404d24c41
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IMovieList.java
@@ -0,0 +1,46 @@
+package org.codeaurora.gallery3d.ext;
+/**
+ * Movie list extension interface
+ */
+public interface IMovieList {
+ /**
+ * Add movie item to list.
+ * @param item
+ */
+ void add(IMovieItem item);
+ /**
+ * Get the item index of list
+ * @param item
+ * @return
+ */
+ int index(IMovieItem item);
+ /**
+ *
+ * @return list size
+ */
+ int size();
+ /**
+ *
+ * @param item
+ * @return next item of current item
+ */
+ IMovieItem getNext(IMovieItem item);
+ /**
+ *
+ * @param item
+ * @return previous item of current item
+ */
+ IMovieItem getPrevious(IMovieItem item);
+ /**
+ * Is first item in list
+ * @param item
+ * @return
+ */
+ boolean isFirst(IMovieItem item);
+ /**
+ * Is last item in list.
+ * @param item
+ * @return
+ */
+ boolean isLast(IMovieItem item);
+} \ No newline at end of file
diff --git a/src/org/codeaurora/gallery3d/ext/IMovieListLoader.java b/src/org/codeaurora/gallery3d/ext/IMovieListLoader.java
new file mode 100644
index 000000000..fe5999858
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IMovieListLoader.java
@@ -0,0 +1,51 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+
+public interface IMovieListLoader {
+ /**
+ * Load all video list or not.[boolean]
+ * "yes" means load all videos in all storages.
+ * "false" means load videos located in current video's folder.
+ */
+ String EXTRA_ALL_VIDEO_FOLDER = "org.codeaurora.intent.extra.ALL_VIDEO_FOLDER";
+ /**
+ * Video list order by column name.[String]
+ */
+ String EXTRA_ORDERBY = "org.codeaurora.intent.extra.VIDEO_LIST_ORDERBY";
+ /**
+ * Enable video list or not.[boolean]
+ */
+ String EXTRA_ENABLE_VIDEO_LIST = "org.codeaurora.intent.extra.ENABLE_VIDEO_LIST";
+ /**
+ * Loader listener interface
+ */
+ public interface LoaderListener {
+ /**
+ * Will be called after movie list loaded.
+ * @param movieList
+ */
+ void onListLoaded(IMovieList movieList);
+ }
+ /**
+ * Build the movie list from current item.
+ * @param context
+ * @param intent
+ * @param l
+ * @param item
+ */
+ void fillVideoList(Activity context, Intent intent, LoaderListener l, IMovieItem item);
+ /**
+ * enable video list or not.
+ * @param intent
+ * @return
+ */
+ boolean isEnabledVideoList(Intent intent);
+ /**
+ * Cancel current loading process.
+ */
+ void cancelList();
+
+}
diff --git a/src/org/codeaurora/gallery3d/ext/IMoviePlayer.java b/src/org/codeaurora/gallery3d/ext/IMoviePlayer.java
new file mode 100644
index 000000000..32d400b0d
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/IMoviePlayer.java
@@ -0,0 +1,42 @@
+package org.codeaurora.gallery3d.ext;
+
+public interface IMoviePlayer {
+
+ /**
+ * add new bookmark Uri.
+ */
+ void addBookmark();
+
+ /**
+ * Loop current video.
+ *
+ * @param loop
+ */
+ void setLoop(boolean loop);
+
+ /**
+ * Loop current video or not
+ *
+ * @return
+ */
+ boolean getLoop();
+
+ /**
+ * Can stop current video or not.
+ *
+ * @return
+ */
+ boolean canStop();
+
+ /**
+ * Stop current video.
+ */
+ void stopVideo();
+
+ /**
+ * start current item and stop playing video.
+ *
+ * @param item
+ */
+ void startNextVideo(IMovieItem item);
+}
diff --git a/src/org/codeaurora/gallery3d/ext/MovieItem.java b/src/org/codeaurora/gallery3d/ext/MovieItem.java
new file mode 100644
index 000000000..56afdda4b
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/MovieItem.java
@@ -0,0 +1,115 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.net.Uri;
+import android.provider.MediaStore;
+
+public class MovieItem implements IMovieItem {
+ private static final String TAG = "MovieItem";
+ private static final boolean LOG = false;
+
+ private Uri mUri;
+ private String mMimeType;
+ private String mTitle;
+ private boolean mError;
+ // private int mStereoType;
+ private Uri mOriginal;
+
+ private static final int STREO_TYPE_2D = 1;
+
+ public MovieItem(Uri uri, String mimeType, String title, int stereoType) {
+ mUri = uri;
+ mMimeType = mimeType;
+ mTitle = title;
+ // mStereoType = stereoType;
+ mOriginal = uri;
+ }
+
+ public MovieItem(String uri, String mimeType, String title, int stereoType) {
+ this(Uri.parse(uri), mimeType, title, stereoType);
+ }
+
+ public MovieItem(Uri uri, String mimeType, String title) {
+ this(uri, mimeType, title, STREO_TYPE_2D);
+ }
+
+ public MovieItem(String uri, String mimeType, String title) {
+ this(Uri.parse(uri), mimeType, title);
+ }
+
+ @Override
+ public Uri getUri() {
+ return mUri;
+ }
+
+ @Override
+ public String getMimeType() {
+ return mMimeType;
+ }
+
+ @Override
+ public String getTitle() {
+ return mTitle;
+ }
+
+ @Override
+ public boolean getError() {
+ return mError;
+ }
+
+ // @Override
+ // public int getStereoType() {
+ // return mStereoType;
+ // }
+
+ public void setTitle(String title) {
+ mTitle = title;
+ }
+
+ @Override
+ public void setUri(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ public void setMimeType(String mimeType) {
+ mMimeType = mimeType;
+ }
+
+ // @Override
+ // public void setStereoType(int stereoType) {
+ // mStereoType = stereoType;
+ // }
+
+ @Override
+ public void setError() {
+ mError = true;
+ }
+
+ @Override
+ public Uri getOriginalUri() {
+ return mOriginal;
+ }
+
+ @Override
+ public void setOriginalUri(Uri uri) {
+ mOriginal = uri;
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder().append("MovieItem(uri=")
+ .append(mUri)
+ .append(", mime=")
+ .append(mMimeType)
+ .append(", title=")
+ .append(mTitle)
+ .append(", error=")
+ .append(mError)
+ // .append(", support3D=")
+ // .append(mStereoType)
+ .append(", mOriginal=")
+ .append(mOriginal)
+ .append(")")
+ .toString();
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/ext/MovieList.java b/src/org/codeaurora/gallery3d/ext/MovieList.java
new file mode 100644
index 000000000..ecb7f0db3
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/MovieList.java
@@ -0,0 +1,72 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.util.Log;
+
+import java.util.ArrayList;
+
+public class MovieList implements IMovieList {
+ private static final String TAG = "MovieList";
+ private static final boolean LOG = false;
+
+ private final ArrayList<IMovieItem> mItems = new ArrayList<IMovieItem>();
+ private static final int UNKNOWN = -1;
+
+ @Override
+ public void add(IMovieItem item) {
+ if (LOG) {
+ Log.v(TAG, "add(" + item + ")");
+ }
+ mItems.add(item);
+ }
+
+ @Override
+ public int index(IMovieItem item) {
+ int find = UNKNOWN;
+ int size = mItems.size();
+ for (int i = 0; i < size; i++) {
+ if (item == mItems.get(i)) {
+ find = i;
+ break;
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "index(" + item + ") return " + find);
+ }
+ return find;
+ }
+
+ @Override
+ public int size() {
+ return mItems.size();
+ }
+
+ @Override
+ public IMovieItem getNext(IMovieItem item) {
+ IMovieItem next = null;
+ int find = index(item);
+ if (find >= 0 && find < size() - 1) {
+ next = mItems.get(++find);
+ }
+ return next;
+ }
+
+ @Override
+ public IMovieItem getPrevious(IMovieItem item) {
+ IMovieItem prev = null;
+ int find = index(item);
+ if (find > 0 && find < size()) {
+ prev = mItems.get(--find);
+ }
+ return prev;
+ }
+
+ @Override
+ public boolean isFirst(IMovieItem item) {
+ return getPrevious(item) == null;
+ }
+
+ @Override
+ public boolean isLast(IMovieItem item) {
+ return getNext(item) == null;
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/ext/MovieListLoader.java b/src/org/codeaurora/gallery3d/ext/MovieListLoader.java
new file mode 100644
index 000000000..60f0392de
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/MovieListLoader.java
@@ -0,0 +1,269 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.MediaStore;
+import android.provider.OpenableColumns;
+import android.util.Log;
+
+import java.io.File;
+import java.util.ArrayList;
+
+/**
+ * Movie list loader class. It will load videos from MediaProvider database.
+ * If MoviePlayer starting activity doesn't set any thing, default OrderBy will be used.
+ * Default OrderBy: MediaStore.Video.Media.DATE_TAKEN + " DESC, " + MediaStore.Video.Media._ID + " DESC ";
+ */
+public class MovieListLoader implements IMovieListLoader {
+ private static final String TAG = "MovieListLoader";
+ private static final boolean LOG = false;
+
+ private MovieListFetcherTask mListTask;
+
+ @Override
+ public void fillVideoList(Activity activity, Intent intent, final LoaderListener l,
+ IMovieItem currentMovieItem) {
+
+ // determine if a video playlist has been passed in through the intent
+ // if a playlist does exist, use that
+ ArrayList<Uri> uris = intent.getParcelableArrayListExtra("EXTRA_FILE_LIST");
+ if (uris != null) {
+ final MovieList movieList = new MovieList();
+ ContentResolver cr = activity.getContentResolver();
+
+ for(Uri uri : uris) {
+ // add currentMovieItem in its proper place in the video playlist
+ // 'Next' and 'Previous' functionality in MovieListHooker is dependent on reference
+ // matching currentMovieItem
+ if (currentMovieItem.getOriginalUri().equals(uri)) {
+ movieList.add(currentMovieItem);
+ continue;
+ }
+
+ File videoFile = new File(uri.getPath());
+ movieList.add(new MovieItem(uri, cr.getType(uri), videoFile.getName()));
+ }
+
+ // notify callback on main thread
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ l.onListLoaded(movieList);
+ }
+ });
+
+ return;
+ }
+
+ // proceed with creating a playlist if one isn't found
+ boolean fetechAll = false;
+ if (intent.hasExtra(EXTRA_ALL_VIDEO_FOLDER)) {
+ fetechAll = intent.getBooleanExtra(EXTRA_ALL_VIDEO_FOLDER, false);
+ }
+ //default order by
+ String orderBy = MediaStore.Video.Media.DATE_TAKEN + " DESC, " + MediaStore.Video.Media._ID + " DESC ";
+ if (intent.hasExtra(EXTRA_ORDERBY)) {
+ orderBy = intent.getStringExtra(EXTRA_ORDERBY);
+ }
+ cancelList();
+ mListTask = new MovieListFetcherTask(activity, fetechAll, l, orderBy);
+ mListTask.execute(currentMovieItem);
+ if (LOG) {
+ Log.v(TAG, "fillVideoList() fetechAll=" + fetechAll + ", orderBy=" + orderBy);
+ }
+ }
+
+ @Override
+ public boolean isEnabledVideoList(Intent intent) {
+ boolean enable = true;
+ if (intent != null && intent.hasExtra(EXTRA_ENABLE_VIDEO_LIST)) {
+ enable = intent.getBooleanExtra(EXTRA_ENABLE_VIDEO_LIST, true);
+ }
+ if (LOG) {
+ Log.v(TAG, "isEnabledVideoList() return " + enable);
+ }
+ return enable;
+ }
+
+ @Override
+ public void cancelList() {
+ if (mListTask != null) {
+ mListTask.cancel(true);
+ }
+ }
+
+ private class MovieListFetcherTask extends AsyncTask<IMovieItem, Void, IMovieList> {
+ private static final String TAG = "MovieListFetcherTask";
+ private static final boolean LOG = false;
+
+ // TODO comments by sunlei
+// public static final String COLUMN_STEREO_TYPE = MediaStore.Video.Media.STEREO_TYPE;
+// public static final String COLUMN_STEREO_TYPE = "STEREO_TYPE";
+
+ private final ContentResolver mCr;
+ private final LoaderListener mFetecherListener;
+ private final boolean mFetechAll;
+ private final String mOrderBy;
+
+ public MovieListFetcherTask(Context context, boolean fetechAll, LoaderListener l, String orderBy) {
+ mCr = context.getContentResolver();
+ mFetecherListener = l;
+ mFetechAll = fetechAll;
+ mOrderBy = orderBy;
+ if (LOG) {
+ Log.v(TAG, "MovieListFetcherTask() fetechAll=" + fetechAll + ", orderBy=" + orderBy);
+ }
+ }
+
+ @Override
+ protected void onPostExecute(IMovieList params) {
+ if (LOG) {
+ Log.v(TAG, "onPostExecute() isCancelled()=" + isCancelled());
+ }
+ if (isCancelled()) {
+ return;
+ }
+ if (mFetecherListener != null) {
+ mFetecherListener.onListLoaded(params);
+ }
+ }
+
+ @Override
+ protected IMovieList doInBackground(IMovieItem... params) {
+ if (LOG) {
+ Log.v(TAG, "doInBackground() begin");
+ }
+ if (params[0] == null) {
+ return null;
+ }
+ IMovieList movieList = null;
+ Uri uri = params[0].getUri();
+ String mime = params[0].getMimeType();
+ if (mFetechAll) { //get all list
+ if (MovieUtils.isLocalFile(uri, mime)) {
+ String uristr = String.valueOf(uri);
+ if (uristr.toLowerCase().startsWith("content://media")) {
+ //from gallery, gallery3D, videoplayer
+ long curId = Long.parseLong(uri.getPathSegments().get(3));
+ movieList = fillUriList(null, null, curId, params[0]);
+ } else if (uristr.toLowerCase().startsWith("file://")) {
+ long curId = getCursorId(uri);
+ movieList = fillUriList(null, null, curId, params[0]);
+ }
+ }
+ } else { //get current list
+ if (MovieUtils.isLocalFile(uri, mime)) {
+ String uristr = String.valueOf(uri);
+ if (uristr.toLowerCase().startsWith("content://media")) {
+ Cursor cursor = mCr.query(uri,
+ new String[]{MediaStore.Video.Media.BUCKET_ID},
+ null, null, null);
+ long bucketId = -1;
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ bucketId = cursor.getLong(0);
+ }
+ cursor.close();
+ }
+ long curId = Long.parseLong(uri.getPathSegments().get(3));
+ movieList = fillUriList(MediaStore.Video.Media.BUCKET_ID + "=? ",
+ new String[]{String.valueOf(bucketId)}, curId, params[0]);
+ } else if (uristr.toLowerCase().startsWith("file://")) {
+ String data = Uri.decode(uri.toString());
+ data = data.replaceAll("'", "''");
+ String where = "_data LIKE '%" + data.replaceFirst("file:///", "") + "'";
+ Cursor cursor = mCr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
+ new String[]{"_id", MediaStore.Video.Media.BUCKET_ID},
+ where, null, null);
+ long bucketId = -1;
+ long curId = -1;
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ curId = cursor.getLong(0);
+ bucketId = cursor.getLong(1);
+ }
+ cursor.close();
+ }
+ movieList = fillUriList(MediaStore.Video.Media.BUCKET_ID + "=? ",
+ new String[]{String.valueOf(bucketId)}, curId, params[0]);
+ }
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "doInBackground() done return " + movieList);
+ }
+ return movieList;
+ }
+
+ private IMovieList fillUriList(String where, String[] whereArgs, long curId, IMovieItem current) {
+ IMovieList movieList = null;
+ Cursor cursor = null;
+ try {
+ cursor = mCr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
+ new String[]{"_id", "mime_type", OpenableColumns.DISPLAY_NAME},
+ where,
+ whereArgs,
+ mOrderBy);
+ boolean find = false;
+ if (cursor != null && cursor.getCount() > 0) {
+ movieList = new MovieList();
+ while (cursor.moveToNext()) {
+ long id = cursor.getLong(0);
+ if (!find && id == curId) {
+ find = true;
+ movieList.add(current);
+ continue;
+ }
+ Uri uri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
+ String mimeType = cursor.getString(1);
+ String title = cursor.getString(2);
+
+ movieList.add(new MovieItem(uri, mimeType, title));
+ }
+ }
+ } catch (final SQLiteException e) {
+ e.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "fillUriList() cursor=" + cursor + ", return " + movieList);
+ }
+ return movieList;
+ }
+
+ private long getCursorId(Uri uri) {
+ long curId = -1;
+ Cursor cursor = null;
+ String data = Uri.decode(uri.toString());
+ data = data.replaceAll("'", "''");
+ String where = "_data LIKE '%" + data.replaceFirst("file:///", "") + "'";
+ try {
+ cursor = mCr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
+ new String[] {
+ "_id"
+ }, where, null, null);
+
+ if (cursor != null && cursor.moveToFirst()) {
+ curId = cursor.getLong(0);
+ }
+ } catch (final SQLiteException e) {
+ e.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return curId;
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/ext/MovieUtils.java b/src/org/codeaurora/gallery3d/ext/MovieUtils.java
new file mode 100644
index 000000000..4bc70a39f
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/ext/MovieUtils.java
@@ -0,0 +1,98 @@
+package org.codeaurora.gallery3d.ext;
+
+import android.net.Uri;
+import android.util.Log;
+
+import java.util.Locale;
+
+/**
+ * Util class for Movie functions. *
+ */
+public class MovieUtils {
+ private static final String TAG = "MovieUtils";
+ private static final boolean LOG = false;
+
+ private MovieUtils() {
+ }
+
+ /**
+ * Whether current video(Uri) is RTSP streaming or not.
+ *
+ * @param uri
+ * @param mimeType
+ * @return
+ */
+ public static boolean isRtspStreaming(Uri uri, String mimeType) {
+ boolean rtsp = false;
+ if (uri != null) {
+ if ("rtsp".equalsIgnoreCase(uri.getScheme())) {
+ rtsp = true;
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "isRtspStreaming(" + uri + ", " + mimeType + ") return " + rtsp);
+ }
+ return rtsp;
+ }
+
+ /**
+ * Whether current video(Uri) is HTTP streaming or not.
+ *
+ * @param uri
+ * @param mimeType
+ * @return
+ */
+ public static boolean isHttpStreaming(Uri uri, String mimeType) {
+ boolean http = false;
+ if (uri != null) {
+ if ("http".equalsIgnoreCase(uri.getScheme())) {
+ http = true;
+ } else if ("https".equalsIgnoreCase(uri.getScheme())) {
+ http = true;
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "isHttpStreaming(" + uri + ", " + mimeType + ") return " + http);
+ }
+ return http;
+ }
+
+ /**
+ * Whether current video(Uri) is live streaming or not.
+ *
+ * @param uri
+ * @param mimeType
+ * @return
+ */
+ public static boolean isSdpStreaming(Uri uri, String mimeType) {
+ boolean sdp = false;
+ if (uri != null) {
+ if ("application/sdp".equals(mimeType)) {
+ sdp = true;
+ } else if (uri.toString().toLowerCase(Locale.ENGLISH).endsWith(".sdp")) {
+ sdp = true;
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "isSdpStreaming(" + uri + ", " + mimeType + ") return " + sdp);
+ }
+ return sdp;
+ }
+
+ /**
+ * Whether current video(Uri) is local file or not.
+ *
+ * @param uri
+ * @param mimeType
+ * @return
+ */
+ public static boolean isLocalFile(Uri uri, String mimeType) {
+ boolean local = (!isSdpStreaming(uri, mimeType)
+ && !isRtspStreaming(uri, mimeType)
+ && !isHttpStreaming(uri, mimeType));
+ if (LOG) {
+ Log.v(TAG, "isLocalFile(" + uri + ", " + mimeType + ") return " + local);
+ }
+ return local;
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/BookmarkActivity.java b/src/org/codeaurora/gallery3d/video/BookmarkActivity.java
new file mode 100644
index 000000000..e4662b4eb
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/BookmarkActivity.java
@@ -0,0 +1,244 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.AdapterView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.SimpleCursorAdapter;
+import android.widget.TextView;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.app.MovieActivity;
+
+public class BookmarkActivity extends Activity implements OnItemClickListener {
+ private static final String TAG = "BookmarkActivity";
+ private static final boolean LOG = false;
+
+ private BookmarkEnhance mBookmark;
+ private BookmarkAdapter mAdapter;
+ private Cursor mCursor;
+ private ListView mListView;
+ private TextView mEmptyView;
+
+ private static final int MENU_DELETE_ALL = 1;
+ private static final int MENU_DELETE_ONE = 2;
+ private static final int MENU_EDIT = 3;
+
+ public static final String KEY_LOGO_BITMAP = "logo-bitmap";
+
+ @Override
+ protected void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.bookmark);
+
+ Bitmap logo = getIntent().getParcelableExtra(KEY_LOGO_BITMAP);
+ if (logo != null) {
+ getActionBar().setLogo(new BitmapDrawable(getResources(), logo));
+ }
+
+ mListView = (ListView) findViewById(android.R.id.list);
+ mEmptyView = (TextView) findViewById(android.R.id.empty);
+
+ mBookmark = new BookmarkEnhance(this);
+ mCursor = mBookmark.query();
+ mAdapter = new BookmarkAdapter(this, R.layout.bookmark_item, null, new String[] {},
+ new int[] {});
+ mListView.setEmptyView(mEmptyView);
+ mListView.setAdapter(mAdapter);
+ mAdapter.changeCursor(mCursor);
+
+ mListView.setOnItemClickListener(this);
+ registerForContextMenu(mListView);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mAdapter != null) {
+ mAdapter.changeCursor(null);
+ }
+ super.onDestroy();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ menu.add(0, MENU_DELETE_ALL, 0, R.string.delete_all)
+ .setIcon(android.R.drawable.ic_menu_delete);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ switch (item.getItemId()) {
+ case MENU_DELETE_ALL:
+ mBookmark.deleteAll();
+ return true;
+ default:
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private class BookmarkAdapter extends SimpleCursorAdapter {
+
+ public BookmarkAdapter(final Context context, final int layout, final Cursor c,
+ final String[] from, final int[] to) {
+ super(context, layout, c, from, to);
+ }
+
+ @Override
+ public View newView(final Context context, final Cursor cursor, final ViewGroup parent) {
+ final View view = super.newView(context, cursor, parent);
+ final ViewHolder holder = new ViewHolder();
+ holder.mTitleView = (TextView) view.findViewById(R.id.title);
+ holder.mDataView = (TextView) view.findViewById(R.id.data);
+ view.setTag(holder);
+ return view;
+ }
+
+ @Override
+ public void bindView(final View view, final Context context, final Cursor cursor) {
+ final ViewHolder holder = (ViewHolder) view.getTag();
+ holder.mId = cursor.getLong(BookmarkEnhance.INDEX_ID);
+ holder.mTitle = cursor.getString(BookmarkEnhance.INDEX_TITLE);
+ holder.mData = cursor.getString(BookmarkEnhance.INDEX_DATA);
+ holder.mMimetype = cursor.getString(BookmarkEnhance.INDEX_MIME_TYPE);
+ holder.mTitleView.setText(holder.mTitle);
+ holder.mDataView.setText(holder.mData);
+ }
+
+ @Override
+ public void changeCursor(final Cursor c) {
+ super.changeCursor(c);
+ }
+
+ }
+
+ private class ViewHolder {
+ long mId;
+ String mTitle;
+ String mData;
+ String mMimetype;
+ TextView mTitleView;
+ TextView mDataView;
+ }
+
+ @Override
+ public void onItemClick(final AdapterView<?> parent, final View view, final int position,
+ final long id) {
+ final Object o = view.getTag();
+ if (o instanceof ViewHolder) {
+ final ViewHolder holder = (ViewHolder) o;
+ finish();
+ final Intent intent = new Intent(this, MovieActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ String mime = "video/*";
+ if (!(holder.mMimetype == null || "".equals(holder.mMimetype.trim()))) {
+ mime = holder.mMimetype;
+ }
+ intent.setDataAndType(Uri.parse(holder.mData), mime);
+ startActivity(intent);
+ }
+ if (LOG) {
+ Log.v(TAG, "onItemClick(" + position + ", " + id + ")");
+ }
+ }
+
+ @Override
+ public void onCreateContextMenu(final ContextMenu menu, final View v,
+ final ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ menu.add(0, MENU_DELETE_ONE, 0, R.string.delete);
+ menu.add(0, MENU_EDIT, 0, R.string.edit);
+ }
+
+ @Override
+ public boolean onContextItemSelected(final MenuItem item) {
+ final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
+ switch (item.getItemId()) {
+ case MENU_DELETE_ONE:
+ mBookmark.delete(info.id);
+ return true;
+ case MENU_EDIT:
+ final Object obj = info.targetView.getTag();
+ if (obj instanceof ViewHolder) {
+ showEditDialog((ViewHolder) obj);
+ } else {
+ Log.w(TAG, "wrong context item info " + info);
+ }
+ return true;
+ default:
+ return super.onContextItemSelected(item);
+ }
+ }
+
+ private void showEditDialog(final ViewHolder holder) {
+ if (LOG) {
+ Log.v(TAG, "showEditDialog(" + holder + ")");
+ }
+ if (holder == null) {
+ return;
+ }
+ final LayoutInflater inflater = LayoutInflater.from(this);
+ final View v = inflater.inflate(R.layout.bookmark_edit_dialog, null);
+ final EditText titleView = (EditText) v.findViewById(R.id.title);
+ final EditText dataView = (EditText) v.findViewById(R.id.data);
+ titleView.setText(holder.mTitle);
+ dataView.setText(holder.mData);
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.edit);
+ builder.setView(v);
+ builder.setIcon(R.drawable.ic_menu_display_bookmark);
+ builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
+
+ @Override
+ public void onClick(final DialogInterface dialog, final int which) {
+ mBookmark.update(holder.mId, titleView.getText().toString(),
+ dataView.getText().toString(), 0);
+ }
+
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ final AlertDialog dialog = builder.create();
+ dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ dialog.setInverseBackgroundForced(true);
+ dialog.show();
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/BookmarkEnhance.java b/src/org/codeaurora/gallery3d/video/BookmarkEnhance.java
new file mode 100644
index 000000000..cf607ecc4
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/BookmarkEnhance.java
@@ -0,0 +1,138 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.util.Log;
+
+import com.android.gallery3d.R;
+
+public class BookmarkEnhance {
+ private static final String TAG = "BookmarkEnhance";
+ private static final boolean LOG = false;
+
+ private static final Uri BOOKMARK_URI = Uri.parse("content://media/internal/bookmark");
+
+ public static final String COLUMN_ID = "_id";
+ public static final String COLUMN_DATA = "_data";
+ public static final String COLUMN_TITLE = "_display_name";
+ public static final String COLUMN_ADD_DATE = "date_added";
+ public static final String COLUMN_MEDIA_TYPE = "mime_type";
+ private static final String COLUMN_POSITION = "position";
+ private static final String COLUMN_MIME_TYPE = "media_type";
+
+ private static final String NULL_HOCK = COLUMN_POSITION;
+ public static final String ORDER_COLUMN = COLUMN_ADD_DATE + " ASC ";
+ private static final String VIDEO_STREAMING_MEDIA_TYPE = "streaming";
+
+ public static final int INDEX_ID = 0;
+ public static final int INDEX_DATA = 1;
+ public static final int INDEX_TITLE = 2;
+ public static final int INDEX_ADD_DATE = 3;
+ public static final int INDEX_MIME_TYPE = 4;
+ private static final int INDEX_POSITION = 5;
+ private static final int INDEX_MEDIA_TYPE = 6;
+
+ public static final String[] PROJECTION = new String[] {
+ COLUMN_ID,
+ COLUMN_DATA,
+ COLUMN_TITLE,
+ COLUMN_ADD_DATE,
+ COLUMN_MIME_TYPE,
+ };
+
+ private final Context mContext;
+ private final ContentResolver mCr;
+
+ public BookmarkEnhance(final Context context) {
+ mContext = context;
+ mCr = context.getContentResolver();
+ }
+
+ public Uri insert(final String title, final String uri, final String mimeType,
+ final long position) {
+ final ContentValues values = new ContentValues();
+ final String mytitle = (title == null ? mContext.getString(R.string.default_title) : title);
+ values.put(COLUMN_TITLE, mytitle);
+ values.put(COLUMN_DATA, uri);
+ values.put(COLUMN_POSITION, position);
+ values.put(COLUMN_ADD_DATE, System.currentTimeMillis());
+ values.put(COLUMN_MEDIA_TYPE, VIDEO_STREAMING_MEDIA_TYPE);
+ values.put(COLUMN_MIME_TYPE, mimeType);
+ final Uri insertUri = mCr.insert(BOOKMARK_URI, values);
+ if (LOG) {
+ Log.v(TAG, "insert(" + title + "," + uri + ", " + position + ") return "
+ + insertUri);
+ }
+ return insertUri;
+ }
+
+ public int delete(final long id) {
+ final Uri uri = ContentUris.withAppendedId(BOOKMARK_URI, id);
+ final int count = mCr.delete(uri, null, null);
+ if (LOG) {
+ Log.v(TAG, "delete(" + id + ") return " + count);
+ }
+ return count;
+ }
+
+ public int deleteAll() {
+ final int count = mCr.delete(BOOKMARK_URI, COLUMN_MEDIA_TYPE + "=? ", new String[] {
+ VIDEO_STREAMING_MEDIA_TYPE
+ });
+ if (LOG) {
+ Log.v(TAG, "deleteAll() return " + count);
+ }
+ return count;
+ }
+
+ public boolean exists(final String uri) {
+ final Cursor cursor = mCr.query(BOOKMARK_URI,
+ PROJECTION,
+ COLUMN_DATA + "=? and " + COLUMN_MEDIA_TYPE + "=? ",
+ new String[] {
+ uri, VIDEO_STREAMING_MEDIA_TYPE
+ },
+ null
+ );
+ boolean exist = false;
+ if (cursor != null) {
+ exist = cursor.moveToFirst();
+ cursor.close();
+ }
+ if (LOG) {
+ Log.v(TAG, "exists(" + uri + ") return " + exist);
+ }
+ return exist;
+ }
+
+ public Cursor query() {
+ final Cursor cursor = mCr.query(BOOKMARK_URI,
+ PROJECTION,
+ COLUMN_MEDIA_TYPE + "='" + VIDEO_STREAMING_MEDIA_TYPE + "' ",
+ null,
+ ORDER_COLUMN
+ );
+ if (LOG) {
+ Log.v(TAG, "query() return cursor=" + (cursor == null ? -1 : cursor.getCount()));
+ }
+ return cursor;
+ }
+
+ public int update(final long id, final String title, final String uri, final int position) {
+ final ContentValues values = new ContentValues();
+ values.put(COLUMN_TITLE, title);
+ values.put(COLUMN_DATA, uri);
+ values.put(COLUMN_POSITION, position);
+ final Uri updateUri = ContentUris.withAppendedId(BOOKMARK_URI, id);
+ final int count = mCr.update(updateUri, values, null, null);
+ if (LOG) {
+ Log.v(TAG, "update(" + id + ", " + title + ", " + uri + ", " + position + ")" +
+ " return " + count);
+ }
+ return count;
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/BookmarkHooker.java b/src/org/codeaurora/gallery3d/video/BookmarkHooker.java
new file mode 100644
index 000000000..015fc3c41
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/BookmarkHooker.java
@@ -0,0 +1,76 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+import org.codeaurora.gallery3d.ext.MovieUtils;
+
+public class BookmarkHooker extends MovieHooker {
+ private static final String TAG = "BookmarkHooker";
+ private static final boolean LOG = false;
+
+ private static final String ACTION_BOOKMARK = "org.codeaurora.bookmark.VIEW";
+ private static final int MENU_BOOKMARK_ADD = 1;
+ private static final int MENU_BOOKMARK_DISPLAY = 2;
+ private MenuItem mMenuBookmarks;
+ private MenuItem mMenuBookmarkAdd;
+
+ public static final String KEY_LOGO_BITMAP = "logo-bitmap";
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuBookmarkAdd = menu.add(0, getMenuActivityId(MENU_BOOKMARK_ADD), 0,
+ R.string.bookmark_add);
+ mMenuBookmarks = menu.add(0, getMenuActivityId(MENU_BOOKMARK_DISPLAY), 0,
+ R.string.bookmark_display);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ if (MovieUtils.isLocalFile(getMovieItem().getUri(), getMovieItem().getMimeType())) {
+ if (mMenuBookmarkAdd != null) {
+ mMenuBookmarkAdd.setVisible(false);
+ }
+ if (mMenuBookmarks != null) {
+ mMenuBookmarks.setVisible(false);
+ }
+ } else {
+ if (mMenuBookmarkAdd != null) {
+ mMenuBookmarkAdd.setVisible(true);
+ }
+ if (mMenuBookmarks != null) {
+ mMenuBookmarks.setVisible(true);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch (getMenuOriginalId(item.getItemId())) {
+ case MENU_BOOKMARK_ADD:
+ getPlayer().addBookmark();
+ return true;
+ case MENU_BOOKMARK_DISPLAY:
+ gotoBookmark();
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private void gotoBookmark() {
+ final Intent intent = new Intent(ACTION_BOOKMARK);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
+ | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
+ intent.putExtra(KEY_LOGO_BITMAP, getIntent().getParcelableExtra(KEY_LOGO_BITMAP));
+ getContext().startActivity(intent);
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/CodeauroraVideoView.java b/src/org/codeaurora/gallery3d/video/CodeauroraVideoView.java
new file mode 100755
index 000000000..ecc2ac94f
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/CodeauroraVideoView.java
@@ -0,0 +1,1074 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.media.MediaPlayer.OnBufferingUpdateListener;
+import android.media.MediaPlayer.OnVideoSizeChangedListener;
+import android.media.Metadata;
+import android.media.MediaPlayer.OnCompletionListener;
+import android.media.MediaPlayer.OnErrorListener;
+import android.media.MediaPlayer.OnInfoListener;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.MediaController;
+import android.widget.MediaController.MediaPlayerControl;
+
+import org.codeaurora.gallery3d.video.ScreenModeManager.ScreenModeListener;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Displays a video file. The VideoView class
+ * can load images from various sources (such as resources or content
+ * providers), takes care of computing its measurement from the video so that
+ * it can be used in any layout manager, and provides various display options
+ * such as scaling and tinting.
+ */
+public class CodeauroraVideoView extends SurfaceView implements MediaPlayerControl, ScreenModeListener{
+ private static final boolean LOG = false;
+ private String TAG = "CodeauroraVideoView";
+ // settable by the client
+ private Uri mUri;
+ private Map<String, String> mHeaders;
+
+ // all possible internal states
+ private static final int STATE_ERROR = -1;
+ private static final int STATE_IDLE = 0;
+ private static final int STATE_PREPARING = 1;
+ private static final int STATE_PREPARED = 2;
+ private static final int STATE_PLAYING = 3;
+ private static final int STATE_PAUSED = 4;
+ private static final int STATE_PLAYBACK_COMPLETED = 5;
+ private static final int STATE_SUSPENDED = 6;
+ private static final int MSG_LAYOUT_READY = 1;
+
+ // mCurrentState is a VideoView object's current state.
+ // mTargetState is the state that a method caller intends to reach.
+ // For instance, regardless the VideoView object's current state,
+ // calling pause() intends to bring the object to a target state
+ // of STATE_PAUSED.
+ private int mCurrentState = STATE_IDLE;
+ private int mTargetState = STATE_IDLE;
+
+ // All the stuff we need for playing and showing a video
+ private SurfaceHolder mSurfaceHolder = null;
+ private MediaPlayer mMediaPlayer = null;
+ private int mAudioSession;
+ private int mVideoWidth;
+ private int mVideoHeight;
+ private int mSurfaceWidth;
+ private int mSurfaceHeight;
+ private int mDuration;
+ private MediaController mMediaController;
+ private OnCompletionListener mOnCompletionListener;
+ private MediaPlayer.OnPreparedListener mOnPreparedListener;
+ private MediaPlayer.OnBufferingUpdateListener mOnBufferingUpdateListener;
+ private MediaPlayer.OnVideoSizeChangedListener mVideoSizeListener;
+ private MediaPlayer.OnPreparedListener mPreparedListener;
+ private ScreenModeManager mScreenManager;
+ private int mCurrentBufferPercentage;
+ private OnErrorListener mOnErrorListener;
+ private OnInfoListener mOnInfoListener;
+ private int mSeekWhenPrepared; // recording the seek position while preparing
+ private boolean mCanPause;
+ private boolean mCanSeekBack;
+ private boolean mCanSeekForward;
+ private boolean mCanSeek;
+ private boolean mHasGotPreparedCallBack = false;
+ private boolean mNeedWaitLayout = false;
+ private boolean mHasGotMetaData = false;
+ private boolean mOnResumed;
+ private boolean mIsShowDialog = false;
+
+ private final Handler mHandler = new Handler() {
+ public void handleMessage(final Message msg) {
+ if (LOG) {
+ Log.v(TAG, "handleMessage() to do prepare. msg=" + msg);
+ }
+ switch (msg.what) {
+ case MSG_LAYOUT_READY:
+ if (mMediaPlayer == null || mUri == null) {
+ Log.w(TAG, "Cannot prepare play! mMediaPlayer=" + mMediaPlayer
+ + ", mUri=" + mUri);
+ return;
+ }
+ doPreparedIfReady(mMediaPlayer);
+ break;
+ default:
+ Log.w(TAG, "Unhandled message " + msg);
+ break;
+ }
+ }
+ };
+
+ public CodeauroraVideoView(Context context) {
+ super(context);
+ initVideoView();
+ initialize();
+ }
+
+ public CodeauroraVideoView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ initVideoView();
+ initialize();
+ }
+
+ public CodeauroraVideoView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ initVideoView();
+ initialize();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int width = 0;
+ int height = 0;
+ int screenMode = ScreenModeManager.SCREENMODE_BIGSCREEN;
+ if (mScreenManager != null) {
+ screenMode = mScreenManager.getScreenMode();
+ }
+ switch (screenMode) {
+ case ScreenModeManager.SCREENMODE_BIGSCREEN:
+ width = getDefaultSize(mVideoWidth, widthMeasureSpec);
+ height = getDefaultSize(mVideoHeight, heightMeasureSpec);
+ if (mVideoWidth > 0 && mVideoHeight > 0) {
+ if (mVideoWidth * height > width * mVideoHeight) {
+ height = width * mVideoHeight / mVideoWidth;
+ } else if (mVideoWidth * height < width * mVideoHeight) {
+ width = height * mVideoWidth / mVideoHeight;
+ }
+ }
+ break;
+ case ScreenModeManager.SCREENMODE_FULLSCREEN:
+ width = getDefaultSize(mVideoWidth, widthMeasureSpec);
+ height = getDefaultSize(mVideoHeight, heightMeasureSpec);
+ break;
+ case ScreenModeManager.SCREENMODE_CROPSCREEN:
+ width = getDefaultSize(mVideoWidth, widthMeasureSpec);
+ height = getDefaultSize(mVideoHeight, heightMeasureSpec);
+ if (mVideoWidth > 0 && mVideoHeight > 0) {
+ if (mVideoWidth * height > width * mVideoHeight) {
+ width = height * mVideoWidth / mVideoHeight;
+ } else if (mVideoWidth * height < width * mVideoHeight) {
+ height = width * mVideoHeight / mVideoWidth;
+ }
+ }
+ break;
+ default:
+ Log.w(TAG, "wrong screen mode : " + screenMode);
+ break;
+ }
+ if (LOG) {
+ Log.v(TAG, "onMeasure() set size: " + width + 'x' + height);
+ Log.v(TAG, "onMeasure() video size: " + mVideoWidth + 'x' + mVideoHeight);
+ Log.v(TAG, "onMeasure() mNeedWaitLayout=" + mNeedWaitLayout);
+ }
+ setMeasuredDimension(width, height);
+ if (mNeedWaitLayout) { // when OnMeasure ok, start video.
+ mNeedWaitLayout = false;
+ mHandler.sendEmptyMessage(MSG_LAYOUT_READY);
+ }
+ }
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(CodeauroraVideoView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(CodeauroraVideoView.class.getName());
+ }
+
+ public int resolveAdjustedSize(int desiredSize, int measureSpec) {
+ return getDefaultSize(desiredSize, measureSpec);
+ }
+
+ private void initVideoView() {
+ mVideoWidth = 0;
+ mVideoHeight = 0;
+ getHolder().addCallback(mSHCallback);
+ getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ setFocusable(true);
+ setFocusableInTouchMode(true);
+ requestFocus();
+ mCurrentState = STATE_IDLE;
+ mTargetState = STATE_IDLE;
+ }
+
+ private void initialize() {
+ mPreparedListener = new MediaPlayer.OnPreparedListener() {
+ public void onPrepared(final MediaPlayer mp) {
+ if (LOG) {
+ Log.v(TAG, "mPreparedListener.onPrepared(" + mp + ")");
+ }
+ //Here we can get meta data from mediaplayer.
+ // Get the capabilities of the player for this stream
+ final Metadata data = mp.getMetadata(MediaPlayer.METADATA_ALL,
+ MediaPlayer.BYPASS_METADATA_FILTER);
+ if (data != null) {
+ mCanPause = !data.has(Metadata.PAUSE_AVAILABLE)
+ || data.getBoolean(Metadata.PAUSE_AVAILABLE);
+ mCanSeekBack = !data.has(Metadata.SEEK_BACKWARD_AVAILABLE)
+ || data.getBoolean(Metadata.SEEK_BACKWARD_AVAILABLE);
+ mCanSeekForward = !data.has(Metadata.SEEK_FORWARD_AVAILABLE)
+ || data.getBoolean(Metadata.SEEK_FORWARD_AVAILABLE);
+ mCanSeek = !data.has(Metadata.SEEK_AVAILABLE)
+ || data.getBoolean(Metadata.SEEK_AVAILABLE);
+ } else {
+ mCanPause = true;
+ mCanSeekBack = true;
+ mCanSeekForward = true;
+ mCanSeek = true;
+ Log.w(TAG, "Metadata is null!");
+ }
+ if (LOG) {
+ Log.v(TAG, "mPreparedListener.onPrepared() mCanPause=" + mCanPause);
+ }
+ mHasGotPreparedCallBack = true;
+ doPreparedIfReady(mMediaPlayer);
+ }
+ };
+
+ mErrorListener = new MediaPlayer.OnErrorListener() {
+ public boolean onError(final MediaPlayer mp, final int frameworkErr, final int implErr) {
+ Log.d(TAG, "Error: " + frameworkErr + "," + implErr);
+ //record error position and duration
+ //here disturb the original logic
+ mSeekWhenPrepared = getCurrentPosition();
+ if (LOG) {
+ Log.v(TAG, "onError() mSeekWhenPrepared=" + mSeekWhenPrepared + ", mDuration=" + mDuration);
+ }
+ //for old version Streaming server, getduration is not valid.
+ mDuration = Math.abs(mDuration);
+ mCurrentState = STATE_ERROR;
+ mTargetState = STATE_ERROR;
+ if (mMediaController != null) {
+ mMediaController.hide();
+ }
+
+ /* If an error handler has been supplied, use it and finish. */
+ if (mOnErrorListener != null) {
+ if (mOnErrorListener.onError(mMediaPlayer, frameworkErr, implErr)) {
+ return true;
+ }
+ }
+
+ /* Otherwise, pop up an error dialog so the user knows that
+ * something bad has happened. Only try and pop up the dialog
+ * if we're attached to a window. When we're going away and no
+ * longer have a window, don't bother showing the user an error.
+ */
+ if (getWindowToken() != null) {
+ final Resources r = mContext.getResources();
+ int messageId;
+
+ if (frameworkErr == MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) {
+ messageId = com.android.internal.R.string.VideoView_error_text_invalid_progressive_playback;
+ } else {
+ messageId = com.android.internal.R.string.VideoView_error_text_unknown;
+ }
+ new AlertDialog.Builder(mContext)
+ .setMessage(messageId)
+ .setPositiveButton(com.android.internal.R.string.VideoView_error_button,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* If we get here, there is no onError listener, so
+ * at least inform them that the video is over.
+ */
+ if (mOnCompletionListener != null) {
+ mOnCompletionListener.onCompletion(mMediaPlayer);
+ }
+ }
+ })
+ .setCancelable(false)
+ .show();
+ }
+ return true;
+ }
+ };
+
+ mBufferingUpdateListener = new MediaPlayer.OnBufferingUpdateListener() {
+ public void onBufferingUpdate(final MediaPlayer mp, final int percent) {
+ mCurrentBufferPercentage = percent;
+ if (mOnBufferingUpdateListener != null) {
+ mOnBufferingUpdateListener.onBufferingUpdate(mp, percent);
+ }
+ if (LOG) {
+ Log.v(TAG, "onBufferingUpdate() Buffering percent: " + percent);
+ Log.v(TAG, "onBufferingUpdate() mTargetState=" + mTargetState);
+ Log.v(TAG, "onBufferingUpdate() mCurrentState=" + mCurrentState);
+ }
+ }
+ };
+
+ mSizeChangedListener = new MediaPlayer.OnVideoSizeChangedListener() {
+ public void onVideoSizeChanged(final MediaPlayer mp, final int width, final int height) {
+ mVideoWidth = mp.getVideoWidth();
+ mVideoHeight = mp.getVideoHeight();
+ if (LOG) {
+ Log.v(TAG, "OnVideoSizeChagned(" + width + "," + height + ")");
+ Log.v(TAG, "OnVideoSizeChagned(" + mVideoWidth + "," + mVideoHeight + ")");
+ Log.v(TAG, "OnVideoSizeChagned() mCurrentState=" + mCurrentState);
+ }
+ if (mVideoWidth != 0 && mVideoHeight != 0) {
+ getHolder().setFixedSize(mVideoWidth, mVideoHeight);
+ if (mCurrentState == STATE_PREPARING) {
+ mNeedWaitLayout = true;
+ }
+ }
+ if (mVideoSizeListener != null) {
+ mVideoSizeListener.onVideoSizeChanged(mp, width, height);
+ }
+ CodeauroraVideoView.this.requestLayout();
+ }
+ };
+
+ getHolder().removeCallback(mSHCallback);
+ mSHCallback = new SurfaceHolder.Callback() {
+ public void surfaceChanged(final SurfaceHolder holder, final int format,
+ final int w, final int h) {
+ if (LOG) {
+ Log.v(TAG, "surfaceChanged(" + holder + ", " + format
+ + ", " + w + ", " + h + ")");
+ Log.v(TAG, "surfaceChanged() mMediaPlayer=" + mMediaPlayer
+ + ", mTargetState=" + mTargetState
+ + ", mVideoWidth=" + mVideoWidth
+ + ", mVideoHeight=" + mVideoHeight);
+ }
+ mSurfaceWidth = w;
+ mSurfaceHeight = h;
+ final boolean isValidState = (mTargetState == STATE_PLAYING);
+ final boolean hasValidSize = (mVideoWidth == w && mVideoHeight == h);
+ if (mMediaPlayer != null && isValidState && hasValidSize) {
+ if (mSeekWhenPrepared != 0) {
+ seekTo(mSeekWhenPrepared);
+ }
+ Log.v(TAG, "surfaceChanged() start()");
+ start();
+ }
+ }
+
+ public void surfaceCreated(final SurfaceHolder holder) {
+ if (LOG) {
+ Log.v(TAG, "surfaceCreated(" + holder + ")");
+ }
+ /*
+ if (mCurrentState == STATE_SUSPENDED) {
+ mSurfaceHolder = holder;
+ mMediaPlayer.setDisplay(mSurfaceHolder);
+ if (mMediaPlayer.resume()) {
+ mCurrentState = STATE_PREPARED;
+ if (mSeekWhenPrepared != 0) {
+ seekTo(mSeekWhenPrepared);
+ }
+ if (mTargetState == STATE_PLAYING) {
+ start();
+ }
+ return;
+ } else {
+ release(false);
+ }
+ }
+ */
+ if (mCurrentState == STATE_SUSPENDED) {
+ mSurfaceHolder = holder;
+ mMediaPlayer.setDisplay(mSurfaceHolder);
+ release(false);
+ }
+ mSurfaceHolder = holder;
+ openVideo();
+ }
+
+ public void surfaceDestroyed(final SurfaceHolder holder) {
+ // after we return from this we can't use the surface any more
+ if (LOG) {
+ Log.v(TAG, "surfaceDestroyed(" + holder + ")");
+ }
+ mSurfaceHolder = null;
+ if (mMediaController != null) {
+ mMediaController.hide();
+ }
+ if (isHTTPStreaming(mUri) && mCurrentState == STATE_SUSPENDED) {
+ // Don't call release() while run suspend operation
+ return;
+ }
+ release(true);
+ }
+ };
+ getHolder().addCallback(mSHCallback);
+ }
+
+ public void setVideoPath(String path) {
+ setVideoURI(Uri.parse(path));
+ }
+
+ public void setVideoURI(Uri uri) {
+ setVideoURI(uri, null);
+ }
+
+ /**
+ * @hide
+ */
+ public void setVideoURI(Uri uri, Map<String, String> headers) {
+ Log.d(TAG,"setVideoURI uri = " + uri);
+ mDuration = -1;
+ setResumed(true);
+ mUri = uri;
+ mHeaders = headers;
+ mSeekWhenPrepared = 0;
+ openVideo();
+ requestLayout();
+ invalidate();
+ }
+
+ public void stopPlayback() {
+ if (mMediaPlayer != null) {
+ mMediaPlayer.stop();
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ mCurrentState = STATE_IDLE;
+ mTargetState = STATE_IDLE;
+ }
+ }
+
+ private void openVideo() {
+ clearVideoInfo();
+ if (mUri == null || mSurfaceHolder == null) {
+ // not ready for playback just yet, will try again later
+ return;
+ }
+
+ // we shouldn't clear the target state, because somebody might have
+ // called start() previously
+ release(false);
+ if ("".equalsIgnoreCase(String.valueOf(mUri))) {
+ Log.w(TAG, "Unable to open content: " + mUri);
+ mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
+ return;
+ }
+ try {
+ mMediaPlayer = new MediaPlayer();
+ if (mAudioSession != 0) {
+ mMediaPlayer.setAudioSessionId(mAudioSession);
+ } else {
+ mAudioSession = mMediaPlayer.getAudioSessionId();
+ }
+ mMediaPlayer.setOnPreparedListener(mPreparedListener);
+ mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
+ mMediaPlayer.setOnCompletionListener(mCompletionListener);
+ mMediaPlayer.setOnErrorListener(mErrorListener);
+ mMediaPlayer.setOnInfoListener(mOnInfoListener);
+ mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
+ mCurrentBufferPercentage = 0;
+ mMediaPlayer.setDataSource(mContext, mUri, mHeaders);
+ mMediaPlayer.setDisplay(mSurfaceHolder);
+ mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+ mMediaPlayer.setScreenOnWhilePlaying(true);
+ mMediaPlayer.prepareAsync();
+ // we don't set the target state here either, but preserve the
+ // target state that was there before.
+ mCurrentState = STATE_PREPARING;
+ attachMediaController();
+ } catch (IOException ex) {
+ Log.w(TAG, "Unable to open content: " + mUri, ex);
+ mCurrentState = STATE_ERROR;
+ mTargetState = STATE_ERROR;
+ mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
+ return;
+ } catch (IllegalArgumentException ex) {
+ Log.w(TAG, "Unable to open content: " + mUri, ex);
+ mCurrentState = STATE_ERROR;
+ mTargetState = STATE_ERROR;
+ mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
+ return;
+ }
+ }
+
+ public void setMediaController(MediaController controller) {
+ if (mMediaController != null) {
+ mMediaController.hide();
+ }
+ mMediaController = controller;
+ attachMediaController();
+ }
+
+ private void attachMediaController() {
+ if (mMediaPlayer != null && mMediaController != null) {
+ mMediaController.setMediaPlayer(this);
+ View anchorView = this.getParent() instanceof View ?
+ (View)this.getParent() : this;
+ mMediaController.setAnchorView(anchorView);
+ mMediaController.setEnabled(isInPlaybackState());
+ }
+ }
+
+ private boolean isHTTPStreaming(Uri mUri) {
+ if (mUri != null){
+ String scheme = mUri.toString();
+ if (scheme.startsWith("http://") || scheme.startsWith("https://")) {
+ if (scheme.endsWith(".m3u8") || scheme.endsWith(".m3u")
+ || scheme.contains("m3u8") || scheme.endsWith(".mpd")) {
+ // HLS or DASH streaming source
+ return false;
+ }
+ // HTTP streaming
+ return true;
+ }
+ }
+ return false;
+ }
+
+ MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener =
+ new MediaPlayer.OnVideoSizeChangedListener() {
+ public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
+ mVideoWidth = mp.getVideoWidth();
+ mVideoHeight = mp.getVideoHeight();
+ if (mVideoWidth != 0 && mVideoHeight != 0) {
+ getHolder().setFixedSize(mVideoWidth, mVideoHeight);
+ requestLayout();
+ }
+ }
+ };
+
+ private MediaPlayer.OnCompletionListener mCompletionListener =
+ new MediaPlayer.OnCompletionListener() {
+ public void onCompletion(MediaPlayer mp) {
+ mCurrentState = STATE_PLAYBACK_COMPLETED;
+ mTargetState = STATE_PLAYBACK_COMPLETED;
+ if (mMediaController != null) {
+ mMediaController.hide();
+ }
+ if (mOnCompletionListener != null) {
+ mOnCompletionListener.onCompletion(mMediaPlayer);
+ }
+ }
+ };
+
+ private MediaPlayer.OnErrorListener mErrorListener;
+
+ private MediaPlayer.OnBufferingUpdateListener mBufferingUpdateListener =
+ new MediaPlayer.OnBufferingUpdateListener() {
+ public void onBufferingUpdate(MediaPlayer mp, int percent) {
+ mCurrentBufferPercentage = percent;
+ }
+ };
+
+ /**
+ * Register a callback to be invoked when the media file
+ * is loaded and ready to go.
+ *
+ * @param l The callback that will be run
+ */
+ public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
+ mOnPreparedListener = l;
+ }
+
+ /**
+ * Register a callback to be invoked when the end of a media file
+ * has been reached during playback.
+ *
+ * @param l The callback that will be run
+ */
+ public void setOnCompletionListener(OnCompletionListener l) {
+ mOnCompletionListener = l;
+ }
+
+ /**
+ * Register a callback to be invoked when an error occurs
+ * during playback or setup. If no listener is specified,
+ * or if the listener returned false, VideoView will inform
+ * the user of any errors.
+ *
+ * @param l The callback that will be run
+ */
+ public void setOnErrorListener(OnErrorListener l) {
+ mOnErrorListener = l;
+ }
+
+ /**
+ * Register a callback to be invoked when an informational event
+ * occurs during playback or setup.
+ *
+ * @param l The callback that will be run
+ */
+ public void setOnInfoListener(OnInfoListener l) {
+ mOnInfoListener = l;
+ }
+
+ SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() {
+ public void surfaceChanged(SurfaceHolder holder, int format,
+ int w, int h) {
+ mSurfaceWidth = w;
+ mSurfaceHeight = h;
+ boolean isValidState = (mTargetState == STATE_PLAYING);
+ boolean hasValidSize = (mVideoWidth == w && mVideoHeight == h);
+ if (mMediaPlayer != null && isValidState && hasValidSize) {
+ if (mSeekWhenPrepared != 0) {
+ seekTo(mSeekWhenPrepared);
+ }
+ start();
+ }
+ }
+
+ public void surfaceCreated(SurfaceHolder holder) {
+ /*
+ if (mCurrentState == STATE_SUSPENDED) {
+ mSurfaceHolder = holder;
+ mMediaPlayer.setDisplay(mSurfaceHolder);
+ if (mMediaPlayer.resume()) {
+ mCurrentState = STATE_PREPARED;
+ if (mSeekWhenPrepared != 0) {
+ seekTo(mSeekWhenPrepared);
+ }
+ if (mTargetState == STATE_PLAYING) {
+ start();
+ }
+ return;
+ } else {
+ release(false);
+ }
+ }
+ mSurfaceHolder = holder;
+ openVideo();
+ */
+ if (LOG) {
+ Log.v(TAG, "surfaceCreated(" + holder + ")");
+ }
+ if (mCurrentState == STATE_SUSPENDED) {
+ mSurfaceHolder = holder;
+ mMediaPlayer.setDisplay(mSurfaceHolder);
+ release(false);
+ }
+ mSurfaceHolder = holder;
+ openVideo();
+ }
+
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ // after we return from this we can't use the surface any more
+ mSurfaceHolder = null;
+ if (mMediaController != null) mMediaController.hide();
+ if (isHTTPStreaming(mUri) && mCurrentState == STATE_SUSPENDED) {
+ // Don't call release() while run suspend operation
+ return;
+ }
+ release(true);
+ }
+ };
+
+ /*
+ * release the media player in any state
+ */
+ private void release(boolean cleartargetstate) {
+ if (mMediaPlayer != null) {
+ mMediaPlayer.reset();
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ mCurrentState = STATE_IDLE;
+ if (cleartargetstate) {
+ mTargetState = STATE_IDLE;
+ }
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (isInPlaybackState() && mMediaController != null) {
+ toggleMediaControlsVisiblity();
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onTrackballEvent(MotionEvent ev) {
+ if (isInPlaybackState() && mMediaController != null) {
+ toggleMediaControlsVisiblity();
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ final boolean isKeyCodeSupported = keyCode != KeyEvent.KEYCODE_BACK &&
+ keyCode != KeyEvent.KEYCODE_VOLUME_UP &&
+ keyCode != KeyEvent.KEYCODE_VOLUME_DOWN &&
+ keyCode != KeyEvent.KEYCODE_VOLUME_MUTE &&
+ keyCode != KeyEvent.KEYCODE_MENU &&
+ keyCode != KeyEvent.KEYCODE_CALL &&
+ keyCode != KeyEvent.KEYCODE_ENDCALL &&
+ keyCode != KeyEvent.KEYCODE_CAMERA;
+ if (isInPlaybackState() && isKeyCodeSupported && mMediaController != null) {
+ if (event.getRepeatCount() == 0 && (keyCode == KeyEvent.KEYCODE_HEADSETHOOK ||
+ keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)) {
+ if (mMediaPlayer.isPlaying()) {
+ pause();
+ mMediaController.show();
+ } else {
+ start();
+ mMediaController.hide();
+ }
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) {
+ if (!mMediaPlayer.isPlaying()) {
+ start();
+ mMediaController.hide();
+ }
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP
+ || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) {
+ if (mMediaPlayer.isPlaying()) {
+ pause();
+ mMediaController.show();
+ }
+ return true;
+ } else if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD ||
+ keyCode == KeyEvent.KEYCODE_MEDIA_NEXT ||
+ keyCode == KeyEvent.KEYCODE_MEDIA_PREVIOUS ||
+ keyCode == KeyEvent.KEYCODE_MEDIA_REWIND ||
+ keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE ||
+ keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {
+ // consume media action, so if video view if front,
+ // other media player will not play any sounds.
+ return true;
+ } else {
+ toggleMediaControlsVisiblity();
+ }
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ private void toggleMediaControlsVisiblity() {
+ if (mMediaController.isShowing()) {
+ mMediaController.hide();
+ } else {
+ mMediaController.show();
+ }
+ }
+
+ public void setDialogShowState(boolean isDialogShow) {
+ mIsShowDialog = isDialogShow;
+ }
+
+ @Override
+ public void start() {
+ if (mIsShowDialog) return;
+ if (isInPlaybackState()) {
+ mMediaPlayer.start();
+ mCurrentState = STATE_PLAYING;
+ }
+ mTargetState = STATE_PLAYING;
+ }
+
+ @Override
+ public void pause() {
+ if (isInPlaybackState()) {
+ if (mMediaPlayer.isPlaying()) {
+ mMediaPlayer.pause();
+ mCurrentState = STATE_PAUSED;
+ }
+ }
+ mTargetState = STATE_PAUSED;
+ }
+
+ public void suspend() {
+ /*
+ // HTTP streaming will call mMediaPlayer->suspend(), others will call release()
+ if (isHTTPStreaming(mUri) && mCurrentState != STATE_PREPARING) {
+ if (mMediaPlayer != null) {
+ if (mMediaPlayer.suspend()) {
+ mTargetState = mCurrentState;
+ mCurrentState = STATE_SUSPENDED;
+ return;
+ }
+ }
+ }*/
+ release(false);
+ }
+
+ public void resume() {
+ /*
+ // HTTP streaming (with suspended status) will call mMediaPlayer->resume(), others will call openVideo()
+ if (mCurrentState == STATE_SUSPENDED) {
+ if (mSurfaceHolder != null) {
+ // The surface hasn't been destroyed
+ if (mMediaPlayer.resume()) {
+ mCurrentState = STATE_PREPARED;
+ if (mSeekWhenPrepared !=0) {
+ seekTo(mSeekWhenPrepared);
+ }
+ if (mTargetState == STATE_PLAYING) {
+ start();
+ }
+ return;
+ } else {
+ // resume failed, so call release() before openVideo()
+ release(false);
+ }
+ } else {
+ // The surface has been destroyed, resume operation will be done after surface created
+ return;
+ }
+ }*/
+ // HTTP streaming (with suspended status) will call mMediaPlayer->resume(), others will call openVideo()
+ if (mCurrentState == STATE_SUSPENDED) {
+ if (mSurfaceHolder != null) {
+ release(false);
+ } else {
+ // The surface has been destroyed, resume operation will be done after surface created
+ return;
+ }
+ }
+ openVideo();
+ }
+
+ @Override
+ public int getDuration() {
+ final boolean inPlaybackState = isInPlaybackState();
+ if (LOG) {
+ Log.v(TAG, "getDuration() mDuration=" + mDuration + ", inPlaybackState="
+ + inPlaybackState);
+ }
+ if (inPlaybackState) {
+ if (mDuration > 0) {
+ return mDuration;
+ }
+ // in case the duration is zero or smaller than zero for streaming
+ // video
+ int tempDuration = mMediaPlayer.getDuration();
+ if (tempDuration <= 0) {
+ return mDuration;
+ } else {
+ mDuration = tempDuration;
+ }
+
+ return mDuration;
+ }
+ return mDuration;
+ }
+
+ @Override
+ public int getCurrentPosition() {
+ int position = 0;
+ if (mSeekWhenPrepared > 0) {
+ // if connecting error before seek,
+ // we should remember this position for retry
+ position = mSeekWhenPrepared;
+ // /M: if player not started, getCurrentPosition() will lead to NE.
+ } else if (isInPlaybackState()) {
+ position = mMediaPlayer.getCurrentPosition();
+ }
+ if (LOG) {
+ Log.v(TAG, "getCurrentPosition() return " + position
+ + ", mSeekWhenPrepared=" + mSeekWhenPrepared);
+ }
+ return position;
+ }
+
+ @Override
+ public void seekTo(int msec) {
+ if (isInPlaybackState()) {
+ mMediaPlayer.seekTo(msec);
+ mSeekWhenPrepared = 0;
+ } else {
+ mSeekWhenPrepared = msec;
+ }
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return isInPlaybackState() && mMediaPlayer.isPlaying();
+ }
+
+ @Override
+ public int getBufferPercentage() {
+ if (mMediaPlayer != null) {
+ return mCurrentBufferPercentage;
+ }
+ return 0;
+ }
+
+ private boolean isInPlaybackState() {
+ return (mMediaPlayer != null &&
+ mCurrentState != STATE_ERROR &&
+ mCurrentState != STATE_IDLE &&
+ mCurrentState != STATE_PREPARING &&
+ mCurrentState != STATE_SUSPENDED);
+ }
+
+ @Override
+ public boolean canPause() {
+ return mCanPause;
+ }
+
+ @Override
+ public boolean canSeekBackward() {
+ return mCanSeekBack;
+ }
+
+ @Override
+ public boolean canSeekForward() {
+ return mCanSeekForward;
+ }
+
+ public boolean canSeek() {
+ return mCanSeek;
+ }
+
+ @Override
+ public int getAudioSessionId() {
+ if (mAudioSession == 0) {
+ MediaPlayer foo = new MediaPlayer();
+ mAudioSession = foo.getAudioSessionId();
+ foo.release();
+ }
+ return mAudioSession;
+ }
+
+ // for duration displayed
+ public void setDuration(final int duration) {
+ if (LOG) {
+ Log.v(TAG, "setDuration(" + duration + ")");
+ }
+ mDuration = (duration > 0 ? -duration : duration);
+ }
+
+ public void setVideoURI(final Uri uri, final Map<String, String> headers,
+ final boolean hasGotMetaData) {
+ if (LOG) {
+ Log.v(TAG, "setVideoURI(" + uri + ", " + headers + ")");
+ }
+ // clear the flags
+ mHasGotMetaData = hasGotMetaData;
+ setVideoURI(uri, headers);
+ }
+
+ private void doPreparedIfReady(final MediaPlayer mp) {
+ if (LOG) {
+ Log.v(TAG, "doPreparedIfReady() mHasGotPreparedCallBack=" + mHasGotPreparedCallBack
+ + ", mHasGotMetaData=" + mHasGotMetaData + ", mNeedWaitLayout="
+ + mNeedWaitLayout
+ + ", mCurrentState=" + mCurrentState);
+ }
+ if (mHasGotPreparedCallBack && mHasGotMetaData && !mNeedWaitLayout) {
+ doPrepared(mp);
+ }
+ }
+
+ private void doPrepared(final MediaPlayer mp) {
+ if (LOG) {
+ Log.v(TAG, "doPrepared(" + mp + ") start");
+ }
+ mCurrentState = STATE_PREPARED;
+ if (mOnPreparedListener != null) {
+ mOnPreparedListener.onPrepared(mMediaPlayer);
+ }
+ mVideoWidth = mp.getVideoWidth();
+ mVideoHeight = mp.getVideoHeight();
+
+ // mSeekWhenPrepared may be changed after seekTo()
+ final int seekToPosition = mSeekWhenPrepared;
+ if (seekToPosition != 0) {
+ seekTo(seekToPosition);
+ }
+ if (mVideoWidth != 0 && mVideoHeight != 0) {
+ getHolder().setFixedSize(mVideoWidth, mVideoHeight);
+ }
+
+ if (mTargetState == STATE_PLAYING) {
+ start();
+ }
+ if (LOG) {
+ Log.v(TAG, "doPrepared() end video size: " + mVideoWidth + "," + mVideoHeight
+ + ", mTargetState=" + mTargetState + ", mCurrentState=" + mCurrentState);
+ }
+ }
+
+ /**
+ * surfaceCreate will invoke openVideo after the activity stoped. Here set
+ * this flag to avoid openVideo after the activity stoped.
+ *
+ * @param resume
+ */
+ public void setResumed(final boolean resume) {
+ if (LOG) {
+ Log.v(TAG, "setResumed(" + resume + ") mUri=" + mUri + ", mOnResumed=" + mOnResumed);
+ }
+ mOnResumed = resume;
+ }
+
+ private void clearVideoInfo() {
+ if (LOG) {
+ Log.v(TAG, "clearVideoInfo()");
+ }
+ mHasGotPreparedCallBack = false;
+ mNeedWaitLayout = false;
+ }
+
+ public void clearSeek() {
+ if (LOG) {
+ Log.v(TAG, "clearSeek() mSeekWhenPrepared=" + mSeekWhenPrepared);
+ }
+ mSeekWhenPrepared = 0;
+ }
+
+ public void clearDuration() {
+ if (LOG) {
+ Log.v(TAG, "clearDuration() mDuration=" + mDuration);
+ }
+ mDuration = -1;
+ }
+
+ public boolean isTargetPlaying() {
+ if (LOG) {
+ Log.v(TAG, "isTargetPlaying() mTargetState=" + mTargetState);
+ }
+ return mTargetState == STATE_PLAYING;
+ }
+
+ public void setScreenModeManager(final ScreenModeManager manager) {
+ mScreenManager = manager;
+ if (mScreenManager != null) {
+ mScreenManager.addListener(this);
+ }
+ if (LOG) {
+ Log.v(TAG, "setScreenModeManager(" + manager + ")");
+ }
+ }
+
+ @Override
+ public void onScreenModeChanged(final int newMode) {
+ this.requestLayout();
+ }
+
+ public void setOnVideoSizeChangedListener(final OnVideoSizeChangedListener l) {
+ mVideoSizeListener = l;
+ if (LOG) {
+ Log.i(TAG, "setOnVideoSizeChangedListener(" + l + ")");
+ }
+ }
+
+ public void setOnBufferingUpdateListener(final OnBufferingUpdateListener l) {
+ mOnBufferingUpdateListener = l;
+ if (LOG) {
+ Log.v(TAG, "setOnBufferingUpdateListener(" + l + ")");
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/DmReceiver.java b/src/org/codeaurora/gallery3d/video/DmReceiver.java
new file mode 100644
index 000000000..616ce33d6
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/DmReceiver.java
@@ -0,0 +1,65 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.PowerManager;
+import android.preference.PreferenceManager;
+import android.provider.Settings.System;
+import android.util.Log;
+
+public class DmReceiver extends BroadcastReceiver {
+ private static final String TAG = "DmReceiver";
+ public static final String WRITE_SETTING_ACTION = "streaming.action.WRITE_SETTINGS";
+ public static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
+
+ private SharedPreferences mPref;
+ static final int STREAMING_CONNPROFILE_IO_HANDLER_TYPE = 1;
+ static final int STREAMING_MAX_UDP_PORT_IO_HANDLER_TYPE = 3;
+ static final int STREAMING_MIN_UDP_PORT_IO_HANDLER_TYPE = 4;
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mPref == null) {
+ mPref = PreferenceManager.getDefaultSharedPreferences(context);
+ }
+ if (BOOT_COMPLETED.equals(intent.getAction())) {
+ String rtpMaxport = mPref.getString(SettingsActivity.PREFERENCE_RTP_MAXPORT, "65535");
+ String rtpMinport = mPref.getString(SettingsActivity.PREFERENCE_RTP_MINPORT, "8192");
+ String apn = mPref.getString(SettingsActivity.PREFERENCE_APN, "CMWAP");
+ System.putString(context.getContentResolver(),
+ "streaming_max_udp_port", rtpMaxport);
+ System.putString(context.getContentResolver(),
+ "streaming_min_udp_port", rtpMinport);
+ System.putString(context.getContentResolver(), "apn", apn);
+ } else if (WRITE_SETTING_ACTION.equals(intent.getAction())) {
+ int valueType = intent.getIntExtra("type", 0);
+ String value = intent.getStringExtra("value");
+ if (valueType == STREAMING_MAX_UDP_PORT_IO_HANDLER_TYPE) {
+ mPref.edit().putString(SettingsActivity.PREFERENCE_RTP_MAXPORT,
+ value).commit();
+ System.putString(context.getContentResolver(),
+ "streaming_max_udp_port", value);
+ } else if (valueType == STREAMING_MIN_UDP_PORT_IO_HANDLER_TYPE) {
+ mPref.edit().putString(SettingsActivity.PREFERENCE_RTP_MINPORT,
+ value).commit();
+ System.putString(context.getContentResolver(),
+ "streaming_min_udp_port", value);
+ } else if (valueType == STREAMING_CONNPROFILE_IO_HANDLER_TYPE) {
+ mPref.edit().putString(SettingsActivity.PREFERENCE_APN,
+ value).commit();
+ System.putString(context.getContentResolver(),
+ "apn", value);
+ }
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/ExtensionHelper.java b/src/org/codeaurora/gallery3d/video/ExtensionHelper.java
new file mode 100755
index 000000000..b5156100b
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/ExtensionHelper.java
@@ -0,0 +1,72 @@
+/*
+Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+package org.codeaurora.gallery3d.video;
+
+import android.content.Context;
+
+import com.android.gallery3d.app.MovieActivity;
+import com.android.gallery3d.R;
+
+import org.codeaurora.gallery3d.ext.ActivityHookerGroup;
+import org.codeaurora.gallery3d.ext.IActivityHooker;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExtensionHelper {
+
+ public static IActivityHooker getHooker(final Context context) {
+
+ final ActivityHookerGroup group = new ActivityHookerGroup();
+ boolean loop = context.getResources().getBoolean(R.bool.loop);
+ boolean stereo = context.getResources().getBoolean(R.bool.stereo);
+ boolean streaming = context.getResources().getBoolean(R.bool.streaming);
+ boolean playlist = context.getResources().getBoolean(R.bool.playlist);
+ boolean speaker = context.getResources().getBoolean(R.bool.speaker);
+
+ if (loop == true) {
+ group.addHooker(new LoopVideoHooker()); // add it for common feature.
+ }
+ if (stereo == true) {
+ group.addHooker(new StereoAudioHooker()); // add it for common feature.
+ }
+ if (streaming == true) {
+ group.addHooker(new StreamingHooker());
+ group.addHooker(new BookmarkHooker());
+ }
+ if (playlist == true) {
+ group.addHooker(new MovieListHooker()); // add it for common feature.
+ group.addHooker(new StepOptionSettingsHooker());
+ }
+ if (speaker == true) {
+ group.addHooker(new SpeakerHooker());
+ }
+ return group;
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/IControllerRewindAndForward.java b/src/org/codeaurora/gallery3d/video/IControllerRewindAndForward.java
new file mode 100644
index 000000000..1fc7f704d
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/IControllerRewindAndForward.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.codeaurora.gallery3d.video;
+
+import com.android.gallery3d.app.ControllerOverlay;
+import com.android.gallery3d.app.ControllerOverlay.Listener;
+
+///M: for CU rewind and forward
+public interface IControllerRewindAndForward extends ControllerOverlay {
+
+ interface IRewindAndForwardListener extends Listener {
+ void onStopVideo();
+ void onRewind();
+ void onForward();
+ }
+
+ boolean getPlayPauseEanbled();
+ boolean getTimeBarEanbled();
+ void setIListener(IRewindAndForwardListener listener);
+ void showControllerButtonsView(boolean canStop, boolean canRewind, boolean canForward);
+}
diff --git a/src/org/codeaurora/gallery3d/video/LoopVideoHooker.java b/src/org/codeaurora/gallery3d/video/LoopVideoHooker.java
new file mode 100644
index 000000000..004254856
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/LoopVideoHooker.java
@@ -0,0 +1,60 @@
+package org.codeaurora.gallery3d.video;
+
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+import org.codeaurora.gallery3d.ext.MovieUtils;
+
+public class LoopVideoHooker extends MovieHooker {
+
+ private static final String TAG = "LoopVideoHooker";
+ private static final boolean LOG = false;
+ private static final int MENU_LOOP = 1;
+
+ private MenuItem mMenuLoopButton;
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuLoopButton = menu.add(0, getMenuActivityId(MENU_LOOP), 0, R.string.loop);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ updateLoop();
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch (getMenuOriginalId(item.getItemId())) {
+ case MENU_LOOP:
+ getPlayer().setLoop(!getPlayer().getLoop());
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private void updateLoop() {
+ if (mMenuLoopButton != null) {
+ if (MovieUtils.isLocalFile(getMovieItem().getUri(), getMovieItem().getMimeType())) {
+ mMenuLoopButton.setVisible(true);
+ } else {
+ mMenuLoopButton.setVisible(false);
+ }
+ final boolean newLoop = getPlayer().getLoop();
+ if (newLoop) {
+ mMenuLoopButton.setTitle(R.string.single);
+ mMenuLoopButton.setIcon(R.drawable.ic_menu_unloop);
+ } else {
+ mMenuLoopButton.setTitle(R.string.loop);
+ mMenuLoopButton.setIcon(R.drawable.ic_menu_loop);
+ }
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/MovieHooker.java b/src/org/codeaurora/gallery3d/video/MovieHooker.java
new file mode 100644
index 000000000..a859d44a3
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/MovieHooker.java
@@ -0,0 +1,44 @@
+package org.codeaurora.gallery3d.video;
+
+import android.util.Log;
+
+import org.codeaurora.gallery3d.ext.ActivityHooker;
+import org.codeaurora.gallery3d.ext.IMovieItem;
+import org.codeaurora.gallery3d.ext.IMoviePlayer;
+
+public class MovieHooker extends ActivityHooker {
+
+ private static final String TAG = "MovieHooker";
+ private static final boolean LOG = false;
+ private IMovieItem mMovieItem;
+ private IMoviePlayer mPlayer;
+
+ @Override
+ public void setParameter(final String key, final Object value) {
+ super.setParameter(key, value);
+ if (LOG) {
+ Log.v(TAG, "setParameter(" + key + ", " + value + ")");
+ }
+ if (value instanceof IMovieItem) {
+ mMovieItem = (IMovieItem) value;
+ onMovieItemChanged(mMovieItem);
+ } else if (value instanceof IMoviePlayer) {
+ mPlayer = (IMoviePlayer) value;
+ onMoviePlayerChanged(mPlayer);
+ }
+ }
+
+ public IMovieItem getMovieItem() {
+ return mMovieItem;
+ }
+
+ public IMoviePlayer getPlayer() {
+ return mPlayer;
+ }
+
+ public void onMovieItemChanged(final IMovieItem item) {
+ }
+
+ public void onMoviePlayerChanged(final IMoviePlayer player) {
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/MovieListHooker.java b/src/org/codeaurora/gallery3d/video/MovieListHooker.java
new file mode 100644
index 000000000..ee360ac78
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/MovieListHooker.java
@@ -0,0 +1,116 @@
+package org.codeaurora.gallery3d.video;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+import org.codeaurora.gallery3d.ext.IMovieItem;
+import org.codeaurora.gallery3d.ext.IMovieList;
+import org.codeaurora.gallery3d.ext.IMovieListLoader;
+import org.codeaurora.gallery3d.ext.IMovieListLoader.LoaderListener;
+import org.codeaurora.gallery3d.ext.MovieListLoader;
+
+public class MovieListHooker extends MovieHooker implements LoaderListener {
+ private static final String TAG = "MovieListHooker";
+ private static final boolean LOG = false;
+
+ private static final int MENU_NEXT = 1;
+ private static final int MENU_PREVIOUS = 2;
+
+ private MenuItem mMenuNext;
+ private MenuItem mMenuPrevious;
+
+ private IMovieListLoader mMovieLoader;
+ private IMovieList mMovieList;
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mMovieLoader = new MovieListLoader();
+ mMovieLoader.fillVideoList(getContext(), getIntent(), this, getMovieItem());
+ }
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mMovieLoader.cancelList();
+ }
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ if (mMovieList != null) { //list should be filled
+ if (mMovieLoader != null && mMovieLoader.isEnabledVideoList(getIntent())) {
+ mMenuPrevious = menu.add(0, getMenuActivityId(MENU_PREVIOUS), 0, R.string.previous);
+ mMenuNext = menu.add(0, getMenuActivityId(MENU_NEXT), 0, R.string.next);
+ }
+ }
+ return true;
+ }
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ updatePrevNext();
+ return true;
+ }
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch(getMenuOriginalId(item.getItemId())) {
+ case MENU_PREVIOUS:
+ if (mMovieList == null) {
+ return false;
+ }
+ getPlayer().startNextVideo(mMovieList.getPrevious(getMovieItem()));
+ return true;
+ case MENU_NEXT:
+ if (mMovieList == null) {
+ return false;
+ }
+ getPlayer().startNextVideo(mMovieList.getNext(getMovieItem()));
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public void onMovieItemChanged(final IMovieItem item) {
+ super.onMovieItemChanged(item);
+ updatePrevNext();
+ }
+
+ private void updatePrevNext() {
+ if (LOG) {
+ Log.v(TAG, "updatePrevNext()");
+ }
+ if (mMovieList != null && mMenuPrevious != null && mMenuNext != null) {
+ if (mMovieList.isFirst(getMovieItem()) && mMovieList.isLast(getMovieItem())) { //only one movie
+ mMenuNext.setVisible(false);
+ mMenuPrevious.setVisible(false);
+ } else {
+ mMenuNext.setVisible(true);
+ mMenuPrevious.setVisible(true);
+ }
+ if (mMovieList.isFirst(getMovieItem())) {
+ mMenuPrevious.setEnabled(false);
+ } else {
+ mMenuPrevious.setEnabled(true);
+ }
+ if (mMovieList.isLast(getMovieItem())) {
+ mMenuNext.setEnabled(false);
+ } else {
+ mMenuNext.setEnabled(true);
+ }
+ }
+ }
+
+ @Override
+ public void onListLoaded(final IMovieList movieList) {
+ mMovieList = movieList;
+ getContext().invalidateOptionsMenu();
+ if (LOG) {
+ Log.v(TAG, "onListLoaded() " + (mMovieList != null ? mMovieList.size() : "null"));
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/MovieTitleHelper.java b/src/org/codeaurora/gallery3d/video/MovieTitleHelper.java
new file mode 100644
index 000000000..4f23e81b8
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/MovieTitleHelper.java
@@ -0,0 +1,108 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.provider.OpenableColumns;
+import android.util.Log;
+
+
+import java.io.File;
+
+public class MovieTitleHelper {
+ private static final String TAG = "MovieTitleHelper";
+ private static final boolean LOG = false;
+
+ public static String getTitleFromMediaData(final Context context, final Uri uri) {
+ String title = null;
+ Cursor cursor = null;
+ try {
+ String data = Uri.decode(uri.toString());
+ data = data.replaceAll("'", "''");
+ final String where = "_data LIKE '%" + data.replaceFirst("file:///", "") + "'";
+ cursor = context.getContentResolver().query(
+ MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
+ new String[] {
+ OpenableColumns.DISPLAY_NAME
+ }, where, null, null);
+ if (LOG) {
+ Log.v(
+ TAG,
+ "setInfoFromMediaData() cursor="
+ + (cursor == null ? "null" : cursor.getCount()));
+ }
+ if (cursor != null && cursor.moveToFirst()) {
+ title = cursor.getString(0);
+ }
+ } catch (final SQLiteException ex) {
+ ex.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "setInfoFromMediaData() return " + title);
+ }
+ return title;
+ }
+
+ public static String getTitleFromDisplayName(final Context context, final Uri uri) {
+ String title = null;
+ Cursor cursor = null;
+ try {
+ cursor = context.getContentResolver().query(uri,
+ new String[] {
+ OpenableColumns.DISPLAY_NAME
+ }, null, null, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ title = cursor.getString(0);
+ }
+ } catch (final SQLiteException ex) {
+ ex.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "getTitleFromDisplayName() return " + title);
+ }
+ return title;
+ }
+
+ public static String getTitleFromUri(final Uri uri) {
+ final String title = Uri.decode(uri.getLastPathSegment());
+ if (LOG) {
+ Log.v(TAG, "getTitleFromUri() return " + title);
+ }
+ return title;
+ }
+
+ public static String getTitleFromData(final Context context, final Uri uri) {
+ String title = null;
+ Cursor cursor = null;
+ try {
+ cursor = context.getContentResolver().query(uri,
+ new String[] {
+ "_data"
+ }, null, null, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ final File file = new File(cursor.getString(0));
+ title = file.getName();
+ }
+ } catch (final SQLiteException ex) {
+ ex.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "getTitleFromData() return " + title);
+ }
+ return title;
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/ScreenModeManager.java b/src/org/codeaurora/gallery3d/video/ScreenModeManager.java
new file mode 100644
index 000000000..a1c04c69f
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/ScreenModeManager.java
@@ -0,0 +1,117 @@
+package org.codeaurora.gallery3d.video;
+
+import android.util.Log;
+
+import java.util.ArrayList;
+
+public class ScreenModeManager {
+ private static final String TAG = "ScreenModeManager";
+ private static final boolean LOG = false;
+ //support screen mode.
+ public static final int SCREENMODE_BIGSCREEN = 1;
+ public static final int SCREENMODE_FULLSCREEN = 2;
+ public static final int SCREENMODE_CROPSCREEN = 4;
+ public static final int SCREENMODE_ALL = 7;
+
+ private int mScreenMode = SCREENMODE_BIGSCREEN;
+ private int mScreenModes = SCREENMODE_ALL;
+
+ /**
+ * Enable specified screen mode list.
+ * The screen mode's value determines the order of being shown.
+ * <br>you can enable three screen modes by setting screenModes =
+ * {@link #SCREENMODE_BIGSCREEN} |
+ * {@link #SCREENMODE_FULLSCREEN} |
+ * {@link #SCREENMODE_CROPSCREEN} or
+ * just enable two screen modes by setting screenModes =
+ * {@link #SCREENMODE_BIGSCREEN} |
+ * {@link #SCREENMODE_CROPSCREEN}.
+ * <br>If current screen mode is the last one of the ordered list,
+ * then the next screen mode will be the first one of the ordered list.
+ * @param screenModes enabled screen mode list.
+ */
+ public void setScreenModes(final int screenModes) {
+ mScreenModes = (SCREENMODE_BIGSCREEN & screenModes)
+ | (SCREENMODE_FULLSCREEN & screenModes)
+ | (SCREENMODE_CROPSCREEN & screenModes);
+ if ((screenModes & SCREENMODE_ALL) == 0) {
+ mScreenModes = SCREENMODE_ALL;
+ Log.w(TAG, "wrong screenModes=" + screenModes + ". use default value " + SCREENMODE_ALL);
+ }
+ if (LOG) {
+ Log.v(TAG, "enableScreenMode(" + screenModes + ") mScreenModes=" + mScreenModes);
+ }
+ }
+
+ /**
+ * Get the all screen modes of media controller.
+ * <br><b>Note:</b> it is not the video's current screen mode.
+ * @return the current screen modes.
+ */
+ public int getScreenModes() {
+ return mScreenModes;
+ }
+
+ public void setScreenMode(final int curScreenMode) {
+ if (LOG) {
+ Log.v(TAG, "setScreenMode(" + curScreenMode + ")");
+ }
+ mScreenMode = curScreenMode;
+ for (final ScreenModeListener listener : mListeners) {
+ listener.onScreenModeChanged(curScreenMode);
+ }
+ }
+
+ public int getScreenMode() {
+ if (LOG) {
+ Log.v(TAG, "getScreenMode() return " + mScreenMode);
+ }
+ return mScreenMode;
+ }
+
+ public int getNextScreenMode() {
+ int mode = getScreenMode();
+ mode <<= 1;
+ if ((mode & mScreenModes) == 0) {
+ //not exist, find the right one
+ if (mode > mScreenModes) {
+ mode = 1;
+ }
+ while ((mode & mScreenModes) == 0) {
+ mode <<= 1;
+ if (mode > mScreenModes) {
+ throw new RuntimeException("wrong screen mode = " + mScreenModes);
+ }
+ }
+ }
+ if (LOG) {
+ Log.v(TAG, "getNextScreenMode() = " + mode);
+ }
+ return mode;
+ }
+
+ private final ArrayList<ScreenModeListener> mListeners = new ArrayList<ScreenModeListener>();
+ public void addListener(final ScreenModeListener l) {
+ if (!mListeners.contains(l)) {
+ mListeners.add(l);
+ }
+ if (LOG) {
+ Log.v(TAG, "addListener(" + l + ")");
+ }
+ }
+
+ public void removeListener(final ScreenModeListener l) {
+ mListeners.remove(l);
+ if (LOG) {
+ Log.v(TAG, "removeListener(" + l + ")");
+ }
+ }
+
+ public void clear() {
+ mListeners.clear();
+ }
+
+ public interface ScreenModeListener {
+ void onScreenModeChanged(int newMode);
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/SettingsActivity.java b/src/org/codeaurora/gallery3d/video/SettingsActivity.java
new file mode 100755
index 000000000..3d7fac573
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/SettingsActivity.java
@@ -0,0 +1,308 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+import android.preference.RingtonePreference;
+import android.preference.PreferenceScreen;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.provider.Settings.System;
+import android.provider.Telephony;
+import android.telephony.TelephonyManager;
+import android.text.method.DigitsKeyListener;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MenuItem;
+import com.android.gallery3d.R;
+
+import java.util.ArrayList;
+
+public class SettingsActivity extends PreferenceActivity {
+
+ private static final String LOG_TAG = "SettingsActivity";
+
+ public static final String PREFERENCE_RTP_MINPORT = "rtp_min_port";
+ public static final String PREFERENCE_RTP_MAXPORT = "rtp_max_port";
+ private static final String PREFERENCE_KEEP_ALIVE_INTERVAL_SECOND = "keep_alive_interval_second";
+ private static final String PREFERENCE_CACHE_MIN_SIZE = "cache_min_size";
+ private static final String PREFERENCE_CACHE_MAX_SIZE = "cache_max_size";
+ public static final String PREFERENCE_BUFFER_SIZE = "buffer_size";
+ public static final String PREFERENCE_APN = "apn";
+ private static final String PACKAGE_NAME = "com.android.settings";
+
+ private static final int DEFAULT_RTP_MINPORT = 8192;
+ private static final int DEFAULT_RTP_MAXPORT = 65535;
+ private static final int DEFAULT_CACHE_MIN_SIZE = 4 * 1024 * 1024;
+ private static final int DEFAULT_CACHE_MAX_SIZE = 20 * 1024 * 1024;
+ private static final int DEFAULT_KEEP_ALIVE_INTERVAL_SECOND = 15;
+
+ private static final int RTP_MIN_PORT = 1;
+ private static final int RTP_MAX_PORT = 2;
+ private static final int BUFFER_SIZE = 3;
+
+ private SharedPreferences mPref;
+ private EditTextPreference mRtpMinPort;
+ private EditTextPreference mRtpMaxPort;
+ private EditTextPreference mBufferSize;
+ private PreferenceScreen mApn;
+
+ private static final int SELECT_APN = 1;
+ public static final String PREFERRED_APN_URI = "content://telephony/carriers/preferapn";
+ private static final Uri PREFERAPN_URI = Uri.parse(PREFERRED_APN_URI);
+ private static final int COLUMN_ID_INDEX = 0;
+ private static final int NAME_INDEX = 1;
+ private static final String RTP_PORTS_PROPERTY_NAME = "persist.env.media.rtp-ports";
+ private static final String CACHE_PROPERTY_NAME = "persist.env.media.cache-params";
+
+ private boolean mUseNvOperatorForEhrpd = SystemProperties.getBoolean(
+ "persist.radio.use_nv_for_ehrpd", false);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.rtsp_settings_preferences);
+
+ mPref = getPreferenceScreen().getSharedPreferences();
+ mRtpMinPort = (EditTextPreference) findPreference(PREFERENCE_RTP_MINPORT);
+ mRtpMaxPort = (EditTextPreference) findPreference(PREFERENCE_RTP_MAXPORT);
+ mBufferSize = (EditTextPreference) findPreference(PREFERENCE_BUFFER_SIZE);
+ mApn = (PreferenceScreen) findPreference(PREFERENCE_APN);
+
+ setPreferenceListener(RTP_MIN_PORT, mRtpMinPort);
+ setPreferenceListener(RTP_MAX_PORT, mRtpMaxPort);
+ setPreferenceListener(BUFFER_SIZE, mBufferSize);
+ setApnListener();
+
+ ActionBar ab = getActionBar();
+ ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ ab.setDisplayHomeAsUpEnabled(true);
+ ab.setTitle(R.string.setting);
+ }
+
+ private String getApnKey() {
+ // to find default key
+ String key = null;
+ Cursor cursor = getContentResolver().query(PREFERAPN_URI, new String[] {
+ "_id"
+ }, null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+ if (cursor.getCount() > 0 && cursor.moveToFirst()) {
+ key = cursor.getString(COLUMN_ID_INDEX);
+ Log.v("settingActivty", "default apn key = " + key);
+ }
+ cursor.close();
+ return key;
+ }
+
+ private String getApnName(String key) {
+ String name = null;
+ // to find default proxy
+ String where = getOperatorNumericSelection();
+
+ Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, new String[] {
+ "_id", "name", "apn", "type"
+ }, where, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+
+ while (cursor != null && cursor.moveToNext()) {
+ String curKey = cursor.getString(cursor.getColumnIndex("_id"));
+ String curName = cursor.getString(cursor.getColumnIndex("name"));
+ if (curKey.equals(key)) {
+ Log.d("rtsp", "getDefaultApnName, find, key=" + curKey + ",curName=" + curName);
+ name = curName;
+ break;
+ }
+ }
+
+ if (cursor != null) {
+ cursor.close();
+ }
+ return name;
+
+ }
+
+ private String getDefaultApnName() {
+ return getApnName(getApnKey());
+ }
+
+ private String getSelectedApnKey() {
+ String key = null;
+
+ Cursor cursor = getContentResolver().query(PREFERAPN_URI, new String[] {
+ "_id", "name"
+ }, null, null, null);
+ if (cursor.getCount() > 0) {
+ cursor.moveToFirst();
+ key = cursor.getString(NAME_INDEX);
+ }
+ cursor.close();
+
+ Log.w("rtsp", "getSelectedApnKey key = " + key);
+ if (null == key)
+ return new String("null");
+ return key;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == SELECT_APN) {
+ setResult(resultCode);
+ finish();
+ Log.w(LOG_TAG, "onActivityResult requestCode = " + requestCode);
+ }
+
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // TODO Auto-generated method stub
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ }
+ return true;
+ }
+
+ private String getOperatorNumericSelection() {
+ String[] mccmncs = getOperatorNumeric();
+ String where;
+ where = (mccmncs[0] != null) ? "numeric=\"" + mccmncs[0] + "\"" : "";
+ where += (mccmncs[1] != null) ? " or numeric=\"" + mccmncs[1] + "\"" : "";
+ Log.d(LOG_TAG, "getOperatorNumericSelection: " + where);
+ return where;
+ }
+
+ private String[] getOperatorNumeric() {
+ ArrayList<String> result = new ArrayList<String>();
+ String mccMncFromSim = null;
+ if (mUseNvOperatorForEhrpd) {
+ String mccMncForEhrpd = SystemProperties.get("ro.cdma.home.operator.numeric", null);
+ if (mccMncForEhrpd != null && mccMncForEhrpd.length() > 0) {
+ result.add(mccMncForEhrpd);
+ }
+ }
+
+ mccMncFromSim = TelephonyManager.getDefault().getSimOperator();
+
+ if (mccMncFromSim != null && mccMncFromSim.length() > 0) {
+ result.add(mccMncFromSim);
+ }
+ return result.toArray(new String[2]);
+ }
+
+ private void enableRtpPortSetting() {
+ final String rtpMinPortStr = mPref.getString(PREFERENCE_RTP_MINPORT,
+ Integer.toString(DEFAULT_RTP_MINPORT));
+ final String rtpMaxPortStr = mPref.getString(PREFERENCE_RTP_MAXPORT,
+ Integer.toString(DEFAULT_RTP_MAXPORT));
+ // System property format: "rtpMinPort/rtpMaxPort"
+ final String propertyValue = rtpMinPortStr + "/" + rtpMaxPortStr;
+ Log.v(LOG_TAG, "set system property " + RTP_PORTS_PROPERTY_NAME + " : " + propertyValue);
+ SystemProperties.set(RTP_PORTS_PROPERTY_NAME, propertyValue);
+ }
+
+ private void enableBufferSetting() {
+ final String bufferSizeStr = mPref.getString(PREFERENCE_BUFFER_SIZE,
+ Integer.toString(DEFAULT_CACHE_MAX_SIZE));
+ final int cacheMaxSize;
+ final String ACTION_NAME = "org.codeaurora.gallery3d.video.STREAMING_SETTINGS_ENABLER";
+ try {
+ cacheMaxSize = Integer.valueOf(bufferSizeStr);
+ } catch (NumberFormatException e) {
+ Log.e(LOG_TAG, "Failed to parse cache max size");
+ return;
+ }
+ // System property format: "minCacheSizeKB/maxCacheSizeKB/keepAliveIntervalSeconds"
+ final String propertyValue = (DEFAULT_CACHE_MIN_SIZE / 1024) + "/" +
+ (cacheMaxSize / 1024) + "/" + DEFAULT_KEEP_ALIVE_INTERVAL_SECOND;
+ Log.v(LOG_TAG, "set system property " + CACHE_PROPERTY_NAME + " : " + propertyValue);
+ SystemProperties.set(CACHE_PROPERTY_NAME, propertyValue);
+ }
+
+ private void setPreferenceListener(final int which, final EditTextPreference etp) {
+
+ final String DIGITS_ACCEPTABLE = "0123456789";
+ String summaryStr = "";
+ String preferStr = "";
+
+ switch (which) {
+ case RTP_MIN_PORT:
+ preferStr = mPref.getString(PREFERENCE_RTP_MINPORT,
+ Integer.toString(DEFAULT_RTP_MINPORT));
+ summaryStr = "streaming_min_udp_port";
+ break;
+ case RTP_MAX_PORT:
+ preferStr = mPref.getString(PREFERENCE_RTP_MAXPORT,
+ Integer.toString(DEFAULT_RTP_MAXPORT));
+ summaryStr = "streaming_max_udp_port";
+ break;
+ case BUFFER_SIZE:
+ preferStr = mPref.getString(PREFERENCE_BUFFER_SIZE,
+ Integer.toString(DEFAULT_CACHE_MAX_SIZE));
+ break;
+ default:
+ return;
+
+ }
+
+ final String summaryString = summaryStr;
+ etp.getEditText().setKeyListener(DigitsKeyListener.getInstance(DIGITS_ACCEPTABLE));
+ etp.setSummary(preferStr);
+ etp.setText(preferStr);
+ etp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final String summary = newValue.toString();
+ final int value;
+ try {
+ value = Integer.valueOf(summary);
+ } catch (NumberFormatException e) {
+ Log.e(LOG_TAG, "NumberFormatException");
+ return false;
+ }
+ etp.setSummary(summary);
+ etp.setText(summary);
+ Log.d(LOG_TAG, "z66/z82 summary = " + summary);
+ if(which == RTP_MIN_PORT || which == RTP_MAX_PORT) {
+ System.putString(getContentResolver(), summaryString, summary);
+ enableRtpPortSetting();
+ } else {
+ enableBufferSetting();
+ }
+ return true;
+ }
+ });
+
+ }
+
+ private void setApnListener() {
+ final String SUBSCRIPTION_KEY = "subscription";
+ mApn.setSummary(getDefaultApnName());
+ mApn.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent(Settings.ACTION_APN_SETTINGS);
+ int subscription = 0;
+ try {
+ subscription = Settings.Global.getInt(SettingsActivity.this.getContentResolver(),
+ Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION);
+ } catch (Exception e) {
+ Log.d("SettingActivity", "Can't get subscription for Exception: " + e);
+ } finally {
+ intent.putExtra(SUBSCRIPTION_KEY, subscription);
+ }
+ startActivityForResult(intent, SELECT_APN);
+ return true;
+ }
+ });
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/SpeakerHooker.java b/src/org/codeaurora/gallery3d/video/SpeakerHooker.java
new file mode 100644
index 000000000..9bf534872
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/SpeakerHooker.java
@@ -0,0 +1,210 @@
+/*
+Copyright (c) 2014, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+package org.codeaurora.gallery3d.video;
+
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import android.bluetooth.BluetoothClass;
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.media.AudioSystem;
+import android.os.Bundle;
+
+import com.android.gallery3d.R;
+
+public class SpeakerHooker extends MovieHooker {
+
+ private static final int MENU_SPEAKER = 1;
+
+ private AudioManager mAudioManager;
+
+ private MenuItem mMenuSpeakerButton;
+
+ private boolean mIsHeadsetOn = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ initAudioManager();
+ }
+
+ private void initAudioManager() {
+ if (mAudioManager == null) {
+ mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ turnSpeakerOff();
+ super.onDestroy();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ registerHeadSetReceiver();
+ }
+
+ private void registerHeadSetReceiver() {
+ final IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
+ intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
+ intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
+ intentFilter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
+ getContext().registerReceiver(mHeadSetReceiver, intentFilter);
+ }
+
+ @Override
+ public void onPause() {
+ unregisterHeadSetReceiver();
+ super.onPause();
+ }
+
+ private void unregisterHeadSetReceiver() {
+ try {
+ getContext().unregisterReceiver(mHeadSetReceiver);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private final BroadcastReceiver mHeadSetReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (mAudioManager == null) {
+ initAudioManager();
+ }
+ if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
+ mIsHeadsetOn = (intent.getIntExtra("state", 0) == 1)
+ || mAudioManager.isBluetoothA2dpOn();
+ } else if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)
+ || action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
+ final int deviceClass = ((BluetoothDevice)
+ intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE))
+ .getBluetoothClass().getDeviceClass();
+ if ((deviceClass == BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES)
+ || (deviceClass == BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET)) {
+ mIsHeadsetOn = action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)
+ || mAudioManager.isWiredHeadsetOn();
+ }
+ } else if (action.equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
+ mIsHeadsetOn = false;
+ }
+ updateSpeakerButton();
+ if (!mIsHeadsetOn) {
+ turnSpeakerOff();
+ }
+ }
+ };
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuSpeakerButton = menu.add(0, getMenuActivityId(MENU_SPEAKER), 0, R.string.speaker_on);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch (getMenuOriginalId(item.getItemId())) {
+ case MENU_SPEAKER:
+ changeSpeakerState();
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private void changeSpeakerState() {
+ if (isSpeakerOn()) {
+ turnSpeakerOff();
+ } else {
+ if (mIsHeadsetOn) {
+ turnSpeakerOn();
+ } else {
+ Toast.makeText(getContext(), getContext().getString(R.string.speaker_need_headset),
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+ updateSpeakerButton();
+ }
+
+ private void turnSpeakerOn() {
+ if (mAudioManager == null) {
+ initAudioManager();
+ }
+ mAudioManager.setSpeakerphoneOn(true);
+ AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,
+ AudioSystem.FORCE_SPEAKER);
+ }
+
+ private void turnSpeakerOff() {
+ if (mAudioManager == null) {
+ initAudioManager();
+ }
+ AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,
+ AudioSystem.FORCE_NONE);
+ mAudioManager.setSpeakerphoneOn(false);
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ updateSpeakerButton();
+ return true;
+ }
+
+ private void updateSpeakerButton() {
+ if (mMenuSpeakerButton != null) {
+ if (isSpeakerOn()) {
+ mMenuSpeakerButton.setTitle(R.string.speaker_off);
+ } else {
+ mMenuSpeakerButton.setTitle(R.string.speaker_on);
+ }
+ }
+ }
+
+ private boolean isSpeakerOn() {
+ boolean isSpeakerOn = false;
+ if (mAudioManager == null) {
+ initAudioManager();
+ }
+ isSpeakerOn = mAudioManager.isSpeakerphoneOn();
+ return isSpeakerOn;
+ }
+
+}
diff --git a/src/org/codeaurora/gallery3d/video/StepOptionDialogFragment.java b/src/org/codeaurora/gallery3d/video/StepOptionDialogFragment.java
new file mode 100644
index 000000000..50bd8a669
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/StepOptionDialogFragment.java
@@ -0,0 +1,83 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+/** M: use DialogFragment to show Dialog */
+public class StepOptionDialogFragment extends DialogFragment implements
+ DialogInterface.OnClickListener{
+
+ private static final String KEY_ITEM_ARRAY = "itemArray";
+ private static final String KEY_TITLE = "title";
+ private static final String KEY_DEFAULT_SELECT = "nowSelect";
+ private DialogInterface.OnClickListener mClickListener = null;
+
+ /**
+ * M: create a instance of SelectDialogFragment
+ *
+ * @param itemArrayID
+ * the resource id array of strings that show in list
+ * @param sufffixArray
+ * the suffix array at the right of list item
+ * @param titleID
+ * the resource id of title string
+ * @param nowSelect
+ * the current select item index
+ * @return the instance of SelectDialogFragment
+ */
+ public static StepOptionDialogFragment newInstance(int[] itemArrayID,
+ int titleID, int nowSelect) {
+ StepOptionDialogFragment frag = new StepOptionDialogFragment();
+ Bundle args = new Bundle();
+ args.putIntArray(KEY_ITEM_ARRAY, itemArrayID);
+ args.putInt(KEY_TITLE, titleID);
+ args.putInt(KEY_DEFAULT_SELECT, nowSelect);
+ frag.setArguments(args);
+ return frag;
+ }
+
+ @Override
+ /**
+ * M: create a select dialog
+ */
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Bundle args = getArguments();
+ final String title = getString(args.getInt(KEY_TITLE));
+ final int[] itemArrayID = args.getIntArray(KEY_ITEM_ARRAY);
+ int arraySize = itemArrayID.length;
+ CharSequence[] itemArray = new CharSequence[arraySize];
+ for (int i = 0; i < arraySize; i++) {
+ itemArray[i] = getString(itemArrayID[i]);
+ }
+
+ AlertDialog.Builder builder = null;
+ int nowSelect = args.getInt(KEY_DEFAULT_SELECT);
+ builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(title).setSingleChoiceItems(itemArray, nowSelect, this)
+ .setNegativeButton(getString(android.R.string.cancel), null);
+ return builder.create();
+ }
+
+ @Override
+ /**
+ * M: the process of select an item
+ */
+ public void onClick(DialogInterface arg0, int arg1) {
+ if (null != mClickListener) {
+ mClickListener.onClick(arg0, arg1);
+ }
+ }
+
+ /**
+ * M: set listener of click items
+ *
+ * @param listener
+ * the listener to be set
+ */
+ public void setOnClickListener(DialogInterface.OnClickListener listener) {
+ mClickListener = listener;
+ }
+} \ No newline at end of file
diff --git a/src/org/codeaurora/gallery3d/video/StepOptionSettingsHooker.java b/src/org/codeaurora/gallery3d/video/StepOptionSettingsHooker.java
new file mode 100644
index 000000000..eff8057bd
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/StepOptionSettingsHooker.java
@@ -0,0 +1,41 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.app.MovieActivity;
+import org.codeaurora.gallery3d.ext.ActivityHooker;
+import org.codeaurora.gallery3d.video.VideoSettingsActivity;
+
+public class StepOptionSettingsHooker extends ActivityHooker {
+ private static final int MENU_STEP_OPTION_SETTING = 1;
+ private MenuItem mMenuStepOption;
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuStepOption = menu.add(0, getMenuActivityId(MENU_STEP_OPTION_SETTING), 0, R.string.settings);
+ return true;
+ }
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ return true;
+ }
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch(getMenuOriginalId(item.getItemId())) {
+ case MENU_STEP_OPTION_SETTING:
+ //start activity
+ Intent mIntent = new Intent();
+ mIntent.setClass(getContext(), VideoSettingsActivity.class);
+ getContext().startActivity(mIntent);
+ return true;
+ default:
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java b/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java
new file mode 100755
index 000000000..cbf2f357a
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/StereoAudioHooker.java
@@ -0,0 +1,118 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.gallery3d.R;
+
+public class StereoAudioHooker extends MovieHooker {
+ private static final String TAG = "StereoAudioHooker";
+ private static final boolean LOG = false;
+
+ private static final int MENU_STEREO_AUDIO = 1;
+ private MenuItem mMenuStereoAudio;
+
+ private static final String KEY_STEREO = "EnableStereoOutput";
+ private boolean mSystemStereoAudio;
+ private boolean mCurrentStereoAudio;
+ private boolean mIsInitedStereoAudio;
+ private AudioManager mAudioManager;
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ enableStereoAudio();
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ restoreStereoAudio();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ mMenuStereoAudio = menu.add(0, getMenuActivityId(MENU_STEREO_AUDIO), 0,
+ R.string.single_track);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ updateStereoAudioIcon();
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ if(getMenuOriginalId(item.getItemId()) == MENU_STEREO_AUDIO) {
+ mCurrentStereoAudio = !mCurrentStereoAudio;
+ setStereoAudio(mCurrentStereoAudio);
+ return true;
+ }
+ return false;
+ }
+
+ private boolean getStereoAudio() {
+ boolean isstereo = false;
+ if (mAudioManager == null) {
+ mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ }
+ final String stereo = mAudioManager.getParameters(KEY_STEREO);
+ final String key = KEY_STEREO + "=1";
+ if (stereo != null && stereo.indexOf(key) > -1) {
+ isstereo = true;
+ } else {
+ isstereo = false;
+ }
+ if (LOG) {
+ Log.v(TAG, "getStereoAudio() isstereo=" + isstereo + ", stereo=" + stereo
+ + ", key=" + key);
+ }
+ return isstereo;
+ }
+
+ private void setStereoAudio(final boolean flag) {
+ final String value = KEY_STEREO + "=" + (flag ? "1" : "0");
+ if (mAudioManager == null) {
+ mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ }
+ mAudioManager.setParameters(value);
+ if (LOG) {
+ Log.v(TAG, "setStereoAudio(" + flag + ") value=" + value);
+ }
+ }
+
+ private void updateStereoAudioIcon() {
+ if (mMenuStereoAudio != null) {
+ mMenuStereoAudio.setTitle(mCurrentStereoAudio?R.string.single_track:R.string.stereo);
+ mMenuStereoAudio.setIcon(mCurrentStereoAudio?R.drawable.ic_menu_single_track:R.drawable.ic_menu_stereo);
+ }
+ }
+
+ private void enableStereoAudio() {
+ if (LOG) {
+ Log.v(TAG, "enableStereoAudio() mIsInitedStereoAudio=" + mIsInitedStereoAudio
+ + ", mCurrentStereoAudio=" + mCurrentStereoAudio);
+ }
+ mSystemStereoAudio = getStereoAudio();
+ if (!mIsInitedStereoAudio) {
+ mCurrentStereoAudio = mSystemStereoAudio;
+ mIsInitedStereoAudio = true;
+ } else {
+ // restore old stereo type
+ setStereoAudio(mCurrentStereoAudio);
+ }
+ updateStereoAudioIcon();
+ }
+
+ private void restoreStereoAudio() {
+ setStereoAudio(mSystemStereoAudio);
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/StreamingHooker.java b/src/org/codeaurora/gallery3d/video/StreamingHooker.java
new file mode 100755
index 000000000..55735f44c
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/StreamingHooker.java
@@ -0,0 +1,86 @@
+package org.codeaurora.gallery3d.video;
+
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.Browser;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import com.android.gallery3d.R;
+import org.codeaurora.gallery3d.ext.MovieUtils;
+
+public class StreamingHooker extends MovieHooker {
+ private static final String TAG = "StreamingHooker";
+ private static final boolean LOG = false;
+
+ private static final String ACTION_STREAMING = "org.codeaurora.settings.streaming";
+ private static final int MENU_INPUT_URL = 1;
+ private static final int MENU_SETTINGS = 2;
+ private static final int MENU_DETAIL = 3;
+
+ public static final String KEY_LOGO_BITMAP = "logo-bitmap";
+
+ @Override
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ // when in rtsp streaming type, generally it only has one uri.
+ menu.add(0, getMenuActivityId(MENU_INPUT_URL), 0, R.string.input_url);
+ menu.add(0, getMenuActivityId(MENU_SETTINGS), 0, R.string.streaming_settings);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(final Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ super.onOptionsItemSelected(item);
+ switch (getMenuOriginalId(item.getItemId())) {
+ case MENU_INPUT_URL:
+ gotoInputUrl();
+ return true;
+ case MENU_SETTINGS:
+ gotoSettings();
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private void gotoInputUrl() {
+ final String APN_NAME = getClass().getName();
+ final String URI_STR = "about:blank";
+ final String EXTRA_NAME = "inputUrl";
+
+ final Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(URI_STR));
+ intent.putExtra(EXTRA_NAME, true);
+ intent.putExtra(Browser.EXTRA_APPLICATION_ID, APN_NAME);
+
+ try {
+ getContext().startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(getContext(),
+ R.string.fail_to_load, Toast.LENGTH_LONG).show();
+ }
+
+ if (LOG) {
+ Log.v(TAG, "gotoInputUrl() appName=" + APN_NAME);
+ }
+ }
+
+ private void gotoSettings() {
+ final Intent intent = new Intent(ACTION_STREAMING);
+ getContext().startActivity(intent);
+ if (LOG) {
+ Log.v(TAG, "gotoInputUrl()");
+ }
+ }
+}
diff --git a/src/org/codeaurora/gallery3d/video/VideoSettingsActivity.java b/src/org/codeaurora/gallery3d/video/VideoSettingsActivity.java
new file mode 100644
index 000000000..32ccfe70f
--- /dev/null
+++ b/src/org/codeaurora/gallery3d/video/VideoSettingsActivity.java
@@ -0,0 +1,182 @@
+package org.codeaurora.gallery3d.video;
+
+import android.app.ListActivity;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import com.android.gallery3d.R;
+
+public class VideoSettingsActivity extends ListActivity {
+ private String OPTION_NAME = "option_name";
+ private String OPTION_DESC = "option_desc";
+ private String DIALOG_TAG_SELECT_STEP_OPTION = "step_option_dialog";
+ private static int[] sStepOptionArray = null;
+ private static final int STEP_OPTION_THREE_SECOND = 0;
+ private static final int STEP_OPTION_SIX_SECOND = 1;
+ private static final String SELECTED_STEP_OPTION = "selected_step_option";
+ private static final String VIDEO_PLAYER_DATA = "video_player_data";
+ private int mSelectedStepOption = -1;
+ private SharedPreferences mPrefs = null;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ ActionBar actionBar = getActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setTitle(getResources().getString(R.string.settings));
+ setContentView(R.layout.setting_list);
+ ArrayList<HashMap<String, Object>> arrlist = new ArrayList<HashMap<String, Object>>(1);
+ HashMap<String, Object> map = new HashMap<String, Object>();
+ map.put(OPTION_NAME, getString(R.string.setp_option_name));
+ map.put(OPTION_DESC, getString(R.string.step_option_desc));
+ arrlist.add(map);
+ SimpleAdapter adapter = new SimpleAdapter(this, arrlist, android.R.layout.simple_expandable_list_item_2,
+ new String[] { OPTION_NAME, OPTION_DESC }, new int[] {
+ android.R.id.text1, android.R.id.text2});
+ setListAdapter(adapter);
+ restoreStepOptionSettings();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ storeStepOptionSettings();
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ restoreDialogFragment();
+ restoreStepOptionSettings();
+ }
+
+
+
+ @Override
+ protected void onDestroy() {
+ // TODO Auto-generated method stub
+ storeStepOptionSettings();
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3) {
+ switch (arg2) {
+ case 0:
+ DialogFragment newFragment = null;
+ FragmentManager fragmentManager = getFragmentManager();
+ removeOldFragmentByTag(DIALOG_TAG_SELECT_STEP_OPTION);
+ newFragment = StepOptionDialogFragment.newInstance(getStepOptionIDArray(),
+ R.string.setp_option_name, mSelectedStepOption);
+ ((StepOptionDialogFragment) newFragment).setOnClickListener(mStepOptionSelectedListener);
+ newFragment.show(fragmentManager, DIALOG_TAG_SELECT_STEP_OPTION);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private int[] getStepOptionIDArray() {
+ int[] stepOptionIDArray = new int[2];
+ stepOptionIDArray[STEP_OPTION_THREE_SECOND] = R.string.setp_option_three_second;
+ stepOptionIDArray[STEP_OPTION_SIX_SECOND] = R.string.setp_option_six_second;
+ sStepOptionArray = new int[2];
+ sStepOptionArray[0] = STEP_OPTION_THREE_SECOND;
+ sStepOptionArray[1] = STEP_OPTION_SIX_SECOND;
+ return stepOptionIDArray;
+ }
+
+ private DialogInterface.OnClickListener mStepOptionSelectedListener = new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int whichItemSelect) {
+ setSelectedStepOption(whichItemSelect);
+ dialog.dismiss();
+ }
+ };
+
+ public void setSelectedStepOption(int which) {
+ mSelectedStepOption = getSelectedStepOption(which);
+ }
+
+ static int getSelectedStepOption(int which) {
+ return sStepOptionArray[which];
+ }
+
+ /**
+ * remove old DialogFragment
+ *
+ * @param tag
+ * the tag of DialogFragment to be removed
+ */
+ private void removeOldFragmentByTag(String tag) {
+ FragmentManager fragmentManager = getFragmentManager();
+ DialogFragment oldFragment = (DialogFragment) fragmentManager.findFragmentByTag(tag);
+ if (null != oldFragment) {
+ oldFragment.dismissAllowingStateLoss();
+ }
+ }
+
+ private void restoreDialogFragment() {
+ FragmentManager fragmentManager = getFragmentManager();
+ Fragment fragment = fragmentManager.findFragmentByTag(DIALOG_TAG_SELECT_STEP_OPTION);
+ if (null != fragment) {
+ ((StepOptionDialogFragment) fragment).setOnClickListener(mStepOptionSelectedListener);
+ }
+ }
+
+ private void storeStepOptionSettings() {
+ if (null == mPrefs) {
+ mPrefs = getSharedPreferences(VIDEO_PLAYER_DATA, 0);
+ }
+ SharedPreferences.Editor ed = mPrefs.edit();
+ ed.clear();
+ ed.putInt(SELECTED_STEP_OPTION, mSelectedStepOption);
+ ed.commit();
+ }
+
+ private void restoreStepOptionSettings() {
+ if (null == mPrefs) {
+ mPrefs = getSharedPreferences(VIDEO_PLAYER_DATA, 0);
+ }
+ mSelectedStepOption = mPrefs.getInt(SELECTED_STEP_OPTION, STEP_OPTION_THREE_SECOND);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // The user clicked on the Messaging icon in the action bar. Take them back from
+ // wherever they came from
+ finish();
+ return true;
+ }
+ return false;
+ }
+}