1
1
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2
# Copyright 2012 Canonical
2
# Copyright 2012-2015 Canonical
4
4
# This program is free software: you can redistribute it and/or modify it
5
5
# under the terms of the GNU General Public License version 3, as published
6
6
# by the Free Software Foundation.
8
from gallery_utils import GalleryUtils
10
import autopilot.logging
11
import ubuntuuitoolkit
13
from gallery_app.emulators import main_screen
14
from gallery_app.emulators.gallery_utils import(
20
logger = logging.getLogger(__name__)
23
class PopupPhotoViewer(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
25
@autopilot.logging.log_action(logger.info)
26
def delete_current_photo(self, confirm=True):
27
header = self.get_root_instance().select_single(
28
main_screen.MainScreen).get_header()
29
header.click_action_button("deleteButton")
31
self.confirm_delete_photo()
33
self.cancel_delete_photo()
35
@autopilot.logging.log_action(logger.debug)
36
def confirm_delete_photo(self):
37
self._click_delete_dialog_button("Yes")
39
def _click_delete_dialog_button(self, name):
40
delete_dialog = self._get_delete_dialog()
41
button = delete_dialog.wait_select_single(
42
"Button", objectName="deletePhotoDialog" + name, visible=True)
43
self.pointing_device.click_object(button)
44
delete_dialog.wait_until_destroyed()
46
def _get_delete_dialog(self):
47
delete_dialog = self.get_root_instance().wait_select_single(
48
objectName="deletePhotoDialog")
49
delete_dialog.visible.wait_for(True)
50
delete_dialog.opacity.wait_for(1)
53
@autopilot.logging.log_action(logger.debug)
54
def cancel_delete_photo(self):
55
self._click_delete_dialog_button('No')
11
58
class PhotoViewer(GalleryUtils):
13
60
def __init__(self, app):
61
super(PhotoViewer, self).__init__(self)
16
def get_delete_dialog(self):
17
"""Returns the photo viewer delete dialog."""
18
return self.app.wait_select_single("Dialog",
19
objectName="deletePhotoDialog")
21
def delete_dialog_shown(self):
22
dialog = self.app.select_many("Dialog",
23
objectName="deletePhotoDialog")
24
return len(dialog) >= 1
26
64
def get_popup_album_picker(self):
27
65
"""Returns the photo viewer album pickers."""
28
66
return self.app.wait_select_single("PopupAlbumPicker",
29
67
objectName="popupAlbumPicker")
31
def get_share_dialog(self):
32
"""Returns the photo viewer share dialog."""
33
return self.app.wait_select_single("SharePopover",
34
objectName="sharePopover")
36
def get_photo_edit_dialog(self):
69
def get_content_peer_picker_cancel_button(self):
70
"""Returns the ContentPeerPicker cancel button."""
71
return self.get_share_peer_picker().wait_select_single(
73
objectName="contentPeerPickerCancelButton",
76
def get_share_peer_picker(self):
77
"""Returns the photo viewer share picker."""
78
return self.app.wait_select_single("ContentPeerPicker10",
79
objectName="sharePicker",
82
def get_photo_editor(self):
37
83
"""Returns the photo edit dialog."""
38
return self.app.wait_select_single("EditPopover",
39
objectName="editPopover")
84
return self.app.wait_select_single("PhotoEditor")
86
def get_revert_to_original_dialog(self):
87
"""Returns the revert to original dialog."""
88
return self.app.wait_select_single("Dialog",
89
objectName="revertPromptDialog")
91
def get_cancel_revert_to_original_button(self):
92
"""Returns the revert to original cancel button."""
93
return self.get_revert_to_original_dialog().wait_select_single(
95
objectName="cancelRevertButton",
98
def get_confirm_revert_to_original_button(self):
99
"""Returns the revert to original confirm button."""
100
return self.get_revert_to_original_dialog().wait_select_single(
102
objectName="confirmRevertButton",
41
105
def get_photo_component(self):
42
106
# Was using a list index (lp:1247711). Still needs fixing, I'm not
43
107
# convinced this is a suitable way to select the correct item.
44
108
return self.app.wait_select_single(
45
"ZoomablePhotoComponent",
46
ownerName="photoViewerDelegate",
47
objectName="openedPhoto0"
110
objectName="openedMedia0"
50
113
def get_photos_list(self):
51
114
return self.app.wait_select_single("MediaListView")
53
def get_crop_menu_item(self):
116
def get_editor_actions_bar(self):
117
"""Returns the actions bar for the editor."""
118
return self.app.select_single("ActionsBar",
119
objectName="editorActionsBar")
121
def get_editor_action_button_by_text(self, button_text):
122
"""Returns the action button from the editor by text."""
123
actions_bar = self.get_editor_actions_bar()
124
buttons = actions_bar.select_many('AbstractButton')
125
for button in buttons:
126
if str(button.text) == button_text:
128
raise GalleryAppException(
129
'Editor action button {} could not be found'.format(button_text))
131
def get_crop_action_button(self):
54
132
"""Returns the crop item of the edit dialog."""
55
return self.app.select_single("Standard", objectName="cropListItem")
133
return self.get_editor_action_button_by_text("Crop")
57
def get_rotate_menu_item(self):
135
def get_rotate_action_button(self):
58
136
"""Returns the rotate item of the edit dialog."""
59
return self.app.select_single("Standard", objectName="rotateListItem")
137
return self.get_editor_action_button_by_text("Rotate")
61
139
def get_undo_menu_item(self):
62
140
"""Returns the undo item of the edit dialog."""
66
144
"""Returns the redo item of the edit dialog."""
67
145
return self.app.select_single("Standard", objectName="redoListItem")
69
def get_revert_menu_item(self):
147
def get_revert_action_button(self):
70
148
"""Returns the revert to original menu item in the edit dialog."""
71
return self.app.select_single("Standard", objectName="revertListItem")
149
return self.get_editor_action_button_by_text("Revert to Original")
73
151
def get_auto_enhance_menu_item(self):
74
152
"""Returns the 'auto enhance' menu item in the edit dialog."""
75
153
return self.app.select_single("Standard", objectName='enhanceListItem')
77
def get_delete_popover_delete_item(self):
78
"""Returns the delete button of the delete popover."""
79
return self.app.select_single("Button",
80
objectName="deletePhotoDialogYes",
83
155
def get_delete_popover_cancel_item(self):
84
156
"""Returns the cancel button of the delete popover."""
85
return self.app.select_single("Button",
86
objectName="deletePhotoDialogNo",
157
return self.app.wait_select_single("Button",
158
objectName="deletePhotoDialogNo",
89
161
def get_opened_photo(self):
90
162
"""Returns the first opened photo."""
91
return self.app.wait_select_single("ZoomablePhotoComponent",
92
objectName="openedPhoto0")
163
return self.app.wait_select_single("SingleMediaViewer",
164
objectName="openedMedia0")
94
166
def get_crop_interactor(self):
95
167
"""Returns the crop interactor."""
116
188
"""Returns the edit preview."""
117
189
return self.app.wait_select_single("EditPreview",
118
190
objectName="editPreview")
192
def _click_item(self, item):
193
self.pointing_device.click_object(item)
195
def click_rotate_button(self):
196
rotate_item = self.get_rotate_action_button()
197
self._click_item(rotate_item)
199
def click_crop_button(self):
200
crop_item = self.get_crop_action_button()
201
self._click_item(crop_item)
203
def click_undo_item(self):
204
undo_item = self.get_undo_menu_item()
205
self._click_item(undo_item)
207
def click_redo_item(self):
208
redo_item = self.get_redo_menu_item()
209
self._click_item(redo_item)
211
def click_revert_button(self):
212
revert_item = self.get_revert_action_button()
213
self._click_item(revert_item)
215
def click_cancel_revert_button(self):
216
cancel_item = self.get_cancel_revert_to_original_button()
217
self._click_item(cancel_item)
219
def click_confirm_revert_button(self):
220
confirm_item = self.get_confirm_revert_to_original_button()
221
self._click_item(confirm_item)
223
def click_enhance_item(self):
224
enhance_item = self.get_auto_enhance_menu_item()
225
self._click_item(enhance_item)