Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,109 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from marionette_driver import expected, By, Wait
from gaiatest.apps.base import Base
from gaiatest.apps.base import PageRegion
import gaiatest.apps.camera.app
class Gallery(Base):
name = 'Gallery'
_gallery_items_locator = (By.CSS_SELECTOR, 'div.thumbnail')
_overlay_locator = (By.ID, 'overlay')
_empty_gallery_title_locator = (By.ID, 'overlay-title')
_empty_gallery_text_locator = (By.ID, 'overlay-text')
_progress_bar_locator = (By.ID, 'progress')
_thumbnail_list_view_locator = (By.CSS_SELECTOR, '#thumbnail-views > footer.thumbnails-list')
_switch_to_camera_button_locator = (By.ID, 'thumbnails-camera-button')
_switch_to_multiple_selection_view_locator = (By.ID, 'thumbnails-select-button')
def launch(self, empty=False):
Base.launch(self)
if empty:
self.wait_for_overlay_to_show()
else:
self.wait_for_thumbnail_view_to_load()
def wait_for_thumbnail_view_to_load(self):
Wait(self.marionette).until(expected.element_displayed(*self._thumbnail_list_view_locator))
def wait_for_overlay_to_show(self):
Wait(self.marionette).until(expected.element_displayed(*self._overlay_locator))
def wait_for_files_to_load(self, files_number):
Wait(self.marionette).until(lambda m: m.execute_script(
'return window.wrappedJSObject.files.length;') == files_number)
def wait_for_thumbnails_to_load(self):
Wait(self.marionette).until(expected.element_displayed(*self._gallery_items_locator))
@property
def gallery_items_number(self):
return len(self.thumbnails)
def tap_first_gallery_item(self):
first_gallery_item = self.thumbnails[0]
if self.is_element_displayed(*self._thumbnail_list_view_locator):
from gaiatest.apps.gallery.regions.fullscreen_image import FullscreenImage as NextView
else:
from gaiatest.apps.gallery.regions.crop_view import CropView as NextView
first_gallery_item.tap()
return NextView(self.marionette)
@property
def empty_gallery_title(self):
return self.marionette.find_element(*self._empty_gallery_title_locator).text
@property
def empty_gallery_text(self):
return self.marionette.find_element(*self._empty_gallery_text_locator).text
@property
def are_gallery_items_displayed(self):
return self.is_element_displayed(*self._gallery_items_locator)
@property
def thumbnails(self):
if self.are_gallery_items_displayed:
return [self.Thumbnail(self.marionette, thumbnail, index)
for index, thumbnail in enumerate(self.marionette.find_elements(*self._gallery_items_locator))]
else:
return []
def switch_to_camera(self):
switch_to_camera_button = self.marionette.find_element(*self._switch_to_camera_button_locator)
switch_to_camera_button.tap()
camera_app = gaiatest.apps.camera.app.Camera(self.marionette)
camera_app.wait_to_be_displayed()
self.apps.switch_to_displayed_app()
return camera_app
def switch_to_multiple_selection_view(self):
self.marionette.find_element(*self._switch_to_multiple_selection_view_locator).tap()
from gaiatest.apps.gallery.regions.multiple_selection_view import MultipleSelectionView
return MultipleSelectionView(self.marionette)
class Thumbnail(PageRegion):
def __init__(self, marionette, element, index):
self.root_element = element
# Save the index of the element so we can match it to the js files object
self.index = index
Base.__init__(self, marionette)
@property
def absolute_image_size(self):
'''
The dimensions of the image on disk, is drawn from the image's metadata
'''
return {"height": self.marionette.execute_script('return window.wrappedJSObject.files[%s].metadata.height' % self.index),
"width": self.marionette.execute_script('return window.wrappedJSObject.files[%s].metadata.width' % self.index)}
def tap(self):
self.root_element.tap()