class IVICamera(CameraTestBase): POWER_REALY = "power_relay" CAMERA_RELAY = "camera_relay" def __init__(self, cfg=None): if cfg == None: self.cfg = self.config.read(CameraCommon.DEFAULT_CONFIG_FILE, "multimedia_camera") else: self.cfg = cfg self.d = g_common_obj.get_device() self.camera_common = CameraCommon() self.logger = CameraLogger.instance() self.x = self.d.info["displayWidth"] self.y = self.d.info["displayHeight"] self.relay08_helper = Relay08Helper() self.waitStartCameraTime = 15 class IVICameraWidget: def __init__(self): self.d = g_common_obj.get_device() def homeLayout(self): ''' layout capture ''' return self.d(packageName="com.android.launcher") def lockLayout(self): ''' layout capture ''' return self.d(packageName="com.android.systemui") def cameraLayout(self): ''' layout capture ''' return self.d(packageName="com.intel.rvc") #============================================================= def checkCameraCrash(self): self.camera_common.checkCameraCrash() def isHomeLayoutExists(self): if self.d(text="Got it").exists: self.d(text="Got it").click.wait() if self.camera_common.isWidgetExists(self.IVICameraWidget().homeLayout()) == True: return True else: return self.camera_common.isWidgetExists(self.d(packageName="com.android.launcher3")) def isLockLayoutExists(self): return self.camera_common.isWidgetExists(self.IVICameraWidget().lockLayout()) def isCameraLayoutExists(self): return self.camera_common.isWidgetExists(self.IVICameraWidget().cameraLayout()) def swipeScreen(self, orientation="right"): # Don't need to implement pass #------------------------------------------------------------ # Interfaces' implementations are from here def clean_media_files(self): """ Used to clean the media files in some folders; eg. /mnt/sdcard/DCIM/Camera """ self.logger.debug("clean media files start") g_common_obj.stop_app_am(self.PACKAGE_NAME_ARCSOFTCAMERA) g_common_obj.adb_cmd("pm clear %s" % self.PACKAGE_NAME_ARCSOFTCAMERA) self.logger.debug("clean media files successfully") def reboot_device(self): self.pressPowerKey(10) time.sleep(5) self.pressPowerKey(2) # from testlib.common.common import g_common_obj2 # g_common_obj2.system_reboot(30) time.sleep(40) g_common_obj.root_on_device() # g_common_obj.remount_device() os.system("adb shell uiautomator dump /data/local/tmp/uidump.xml")#get layout, 20170822 has bug, can't find layout! self.camera_common.unlockScreen() self.backHome() self.check_home_or_lock_layout() def startCameraApp(self, check_success=1): """ Used to start the camera application """ self.logger.debug("launch ivi camera start") self.relay08_helper.set_relay_NO(IVICamera.CAMERA_RELAY) start = time.time() success = False if check_success == 1: while time.time() - start < self.waitStartCameraTime: if self.isCameraLayoutExists(): success = True break time.sleep(1) self.checkCameraCrash() if not success: scname = g_common_obj.get_user_log_dir() + "/assert.png" g_common_obj.take_screenshot(scname) assert False, "ivi camera launch fail,launch time is greater than " \ + str(self.waitStartCameraTime) + " seconds" self.logger.debug("launch ivi camera successfully") else: self.logger.debug("launch ivi camera, skip check function") def stopCameraApp(self): """ Used to stop the camera application """ self.relay08_helper.set_relay_NC(IVICamera.CAMERA_RELAY) self.logger.debug("stop ivi camera app successfully") def pressPowerKey(self, duration=4): self.logger.debug("press power key start") self.relay08_helper.set_relay_NO(IVICamera.POWER_REALY) time.sleep(duration) self.relay08_helper.set_relay_NC(IVICamera.POWER_REALY) def backHome(self): self.d.press.home() def skipAccountLoginLyout(self): pass def check_home_or_lock_layout(self, check_exist=True): assert self.isHomeLayoutExists() or self.isLockLayoutExists(), "Home or Lock layout not exist!"
class RefCamCamera(CameraAppInterface, CameraTestBase): PACKAGE_NAME_REFCAMCAMERA = "com.intel.refcam" ACTIVITY_NAME_REFCAMCAMERA = ".CameraActivity" PERMISSION_LIST = [ "android.permission.ACCESS_FINE_LOCATION", "android.permission.CAMERA", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.RECORD_AUDIO" ] def __init__(self, cfg=None): if cfg == None: self.cfg = self.config.read(CameraCommon.DEFAULT_CONFIG_FILE, "multimedia_camera") else: self.cfg = cfg self.d = g_common_obj.get_device() self.logger = CameraLogger.instance() self.x = self.d.info["displayWidth"] self.y = self.d.info["displayHeight"] self.camera_widget = self.CameraWidget() self.camera_common = CameraCommon() self.multimedia_setting = MultiMediaSetting( self.camera_common.DEFAULT_CONFIG_FILE) self.multimedia_setting.install_apk("ref_camera_1_apk") self.camera_common.grantPermission(self.PACKAGE_NAME_REFCAMCAMERA, self.PERMISSION_LIST) class CameraWidget: def __init__(self): self.d = g_common_obj.get_device() def frontback(self): ''' front back button ''' return self.d(resourceId="com.intel.refcam:id/switch_frontback") def itemChildMenu(self): ''' item clild menu ''' return self.d( resourceId="com.intel.refcam:id/setting_item_child_menu_text") def seekBar(self): ''' menu seek bar ''' return self.d( resourceId="com.intel.refcam:id/setting_item_child_menu_seekbar" ) def shutterBtn(self): ''' shutter button ''' return self.d(resourceId="com.intel.refcam:id/shutter") def shotlist(self): ''' front back button ''' return self.d(resourceId="com.intel.refcam:id/open_shot_list") def settingsBtn(self): ''' settings ''' return self.d(resourceId="com.intel.refcam:id/setting") def text(self, _text): ''' page text ''' return self.d(textContains=_text) def itemChildMenuText(self, _text): ''' page text ''' return self.d( resourceId="com.intel.refcam:id/setting_item_child_menu_text", textContains=_text) def zoomLayer(self): ''' zoom layer ''' return self.d(resourceId="com.intel.refcam:id/zoom_layer") #============================================================= def clickScreen(self): d = g_common_obj.get_device() x = d.info["displayWidth"] self.camera_common.clickBtn(x - 100, 300) def isShutterBtnExists(self): return self.camera_common.isWidgetExists( self.camera_widget.shutterBtn()) def setCaptureMode(self, value): self.camera_common.waitForWidgetToAppear(self.camera_widget.shotlist(), "mode button") self.camera_widget.shotlist().click.wait() self.camera_widget.text(value).click.wait() self.logger.debug("set capture mode to %s successfully" % value) self.camera_common.clickScreenCenter() #------------------------------------------------------------ # Interfaces' implementations are from here def cleanMediaFiles(self): """ Used to clean the media files in some folders; eg. /mnt/sdcard/DCIM/Camera """ self.logger.debug("clean media files start") g_common_obj.stop_app_am(self.PACKAGE_NAME_REFCAMCAMERA) g_common_obj.adb_cmd("pm clear %s" % self.PACKAGE_NAME_REFCAMCAMERA) self.logger.debug("clean media files successfully") def startCameraApp(self): """ Used to start the camera application """ self.camera_common.unlockScreen() self.logger.debug("launch refcam2 camera start") os.system( "adb shell am start -S %s/%s" % (self.PACKAGE_NAME_REFCAMCAMERA, self.ACTIVITY_NAME_REFCAMCAMERA)) time_left = 0 start = time.time() success = False while time_left < self.camera_common.waitStartAppTime + 15: if self.isShutterBtnExists() or self.camera_widget.shotlist( ).exists: success = True break if self.camera_widget.text( "Allow").exists or self.camera_widget.text("ALLOW").exists: self.camera_common.checkGuide() if self.camera_common.getAndroidVersion() == "N": self.stopCameraApp() os.system("adb shell am start -S %s/%s" % (self.PACKAGE_NAME_REFCAMCAMERA, self.ACTIVITY_NAME_REFCAMCAMERA)) time_left = time.time() - start time.sleep(0.5) self.camera_common.checkCameraCrash() if (not success ) or time_left > self.camera_common.waitStartAppTime + 15: scname = g_common_obj.get_user_log_dir() + "/assert.png" g_common_obj.take_screenshot(scname) assert False, "refcam2 camera launch fail,launch time is greater than " \ + str(self.camera_common.waitStartAppTime + 15) + " seconds" self.logger.debug("launch refcam2 camera successfully") def stopCameraApp(self): """ Used to stop the camera application """ g_common_obj.stop_app_am(self.PACKAGE_NAME_REFCAMCAMERA) self.logger.debug("stop arcsoft camera app successfully") def selectMode(self, mode="Camera"): """ Used to select a mode such as camera, video, panorama, lens blur, photo sphere and so on... """ self.camera_common.waitForWidgetToAppear( self.camera_widget.shutterBtn(), "shutter button") self.camera_widget.shotlist().click.wait() self.camera_widget.text(mode).click.wait() self.camera_common.clickScreenCenter() self.logger.debug("Change to %s mode" % mode) def switchRearOrFront(self, lens="Back"): """ Used to switch rear or front camera lens = Back / Front """ self.camera_common.waitForWidgetToAppear( self.camera_widget.shutterBtn(), "shutter button") if lens == "Front": self.camera_widget.frontback().click.wait() self.logger.debug("change to " + str(lens) + " camera") if lens == "Back" or lens == "Rear": self.logger.debug("change to " + str(lens) + " camera") time.sleep(2) def setExposure(self, value): pass def setFlash(self, flash="off"): """ Used to control the flash; on, off, auto """ pass def setGrid(self, grid="off"): """ Used to control the grid; on, off """ pass def setTimer(self, timer="off"): """ Used to control the timer value: off/2s/3s/10s """ pass def getAllVideoResolutions(self, lens): """ Return all of the video resolutions """ pass def setVideoResolution(self, resolution, lens): """ Used to control the video resolution, used with the getAllVideoResolutions """ pass def getAllCameraMode(self): pass def getAllPhotoResolutions(self, lens, type="Capture Size (JPEG)"): """ Return all of the photo resolutions """ self.camera_common.waitForWidgetToAppear( self.camera_widget.settingsBtn(), "setting button") self.camera_widget.settingsBtn().click.wait() if not self.camera_widget.text(type).exists: self.d(scrollable=True).scroll.vert.to(textContains=type) self.camera_common.waitForWidgetToAppear(self.camera_widget.text(type), "capture size button") self.camera_widget.text(type).click.wait() mCount = self.camera_widget.itemChildMenu().count mList = [] for i in range(mCount): mList.append(self.camera_widget.itemChildMenu()[i].info["text"]) self.clickScreen() self.logger.debug("mList=%s" % mList) if mList == []: self.logger.debug( "can't find photo resolutions with \"%s\" type!" % type) return [], -1, -1 else: return mList, mList[0], mList[mCount - 1] def setSettingsButton(self, main_click_button, sub_click_button): self.camera_common.waitForWidgetToAppear( self.camera_widget.settingsBtn(), "setting button") self.camera_widget.settingsBtn().click.wait() if not self.camera_widget.text(main_click_button).exists: self.d(scrollable=True).scroll.vert.to( textContains=main_click_button) self.camera_common.waitForWidgetToAppear( self.camera_widget.text(main_click_button), "click main button: %s" % main_click_button) self.camera_widget.text(main_click_button).click.wait() self.camera_widget.itemChildMenuText(sub_click_button).click.wait() self.logger.debug("click sub button: %s" % sub_click_button) self.clickScreen() def setPhotoResolution(self, resolution, lens, type="Capture Size (JPEG)"): """ Used to control the photo resolution, used with the getAllPhotoResolutions """ self.camera_common.waitForWidgetToAppear( self.camera_widget.settingsBtn(), "setting button") self.camera_widget.settingsBtn().click.wait() if not self.camera_widget.text(type).exists: self.d(scrollable=True).scroll.vert.to(textContains=type) self.camera_common.waitForWidgetToAppear(self.camera_widget.text(type), "capture size button") self.camera_widget.text(type).click.wait() self.camera_widget.itemChildMenuText(resolution).click.wait() self.logger.debug("set resolution to " + resolution) self.clickScreen() def capturePhoto(self, num=1, generated=True): """ Used to capture num photos """ self.camera_common.waitForWidgetToAppear( self.camera_widget.shutterBtn(), "shutter button") for i in range(int(num)): if self.camera_widget.shutterBtn().exists: self.camera_widget.shutterBtn().click.wait() self.logger.debug("capture photo %d" % (i + 1)) if generated: self.camera_common.waitForTheFilesAreGenerated() time.sleep(1.5) else: self.camera_common.checkCameraCrash() def reviewPhoto(self, num=1): """ Used to review num photos """ pass def reviewPhotoAndVideo(self, num=1, timeout=10): """ Used to review num photos """ pass def recordVideo(self, videoNum=1, duration=5): """ Used to capture num duration videos """ pass def reviewVideo(self, num=1, duration=1): """ Used to review num duration videos """ pass def snapShotDuringVideo(self, videoNum=1, duration=5, snapShotNum=1): """ Used to snapshot num pictures during a duration videos """ pass
class IVICameraO(IVICamera): HOME_PACKAGE_NAME = "com.android.car.mapsplaceholder" HOME_ACTIVITY_NAME = ".MapsPlaceholderActivity" CAMERA_CANBOX_0_SENDID = "000" CAMERA_CANBOX_0_SENDMESSAGE = "%s#00" % CAMERA_CANBOX_0_SENDID CAMERA_CANBOX_C_SENDID = "00C" CAMERA_CANBOX_C_SENDMESSAGE = "%s#00" % CAMERA_CANBOX_C_SENDID def __init__(self, cfg=None): super(IVICameraO, self).__init__(cfg) self.camera_common = CameraCommon() self.host_path = self.camera_common.getTmpDir() self.multimedia_canbox_helper = MultiMediaCanboxHelper() self.multimedia_checkiq_helper = MultiMediaCheckiqHelper( self.host_path) user_log_dir = g_common_obj.get_user_log_dir() self.before_screen_0_file_path = os.path.join( user_log_dir, "before_enter_camera_0_screenshot.png") self.after_screen_0_file_path = os.path.join( user_log_dir, "after_enter_camera_0_screenshot.png") self.before_screen_c_file_path = os.path.join( user_log_dir, "before_enter_camera_c_screenshot.png") self.after_screen_c_file_path = os.path.join( user_log_dir, "after_enter_camera_c_screenshot.png") self.now_camera_0_event = 0 self.camera_0_event_array = [("GEAR_NEUTRAL", 0), ("GEAR_DRIVE", 0), ("GEAR_REVERSE", 1), ("GEAR_PARK", 2), ("GEAR_LOW", 0)] self.now_camera_c_event = 0 self.camera_c_event_array = [("NONE", 0), ("EMERGENCY", 0), ("RIGHT", 1), ("LEFT", 1)] self.init_camera_with_canbox() class IVICameraWidget: def __init__(self): self.d = g_common_obj.get_device() def homeLayout(self): ''' layout capture ''' return self.d(packageName="com.android.car.dialer") def homeLayout_2(self): ''' layout capture ''' return self.d(packageName="com.android.car.overview") def homeLayout_3(self): ''' layout capture ''' return self.d(packageName="com.android.car.mapsplaceholder") def lockLayout(self): ''' layout capture ''' return self.d(packageName="com.google.android.apps.maps") def cameraLayout(self): ''' layout capture ''' return self.d(packageName="com.intel.rvc") def isHomeLayoutExists(self): if self.d(text="Got it").exists: self.d(text="Got it").click.wait() self.skipAccountLoginLyout() t_result = self.camera_common.isWidgetExists( self.IVICameraWidget().homeLayout()) if not t_result: t_result = self.camera_common.isWidgetExists( self.IVICameraWidget().homeLayout_2()) if not t_result: t_result = self.camera_common.isWidgetExists( self.IVICameraWidget().homeLayout_3()) return t_result def isLockLayoutExists(self): return self.camera_common.isWidgetExists( self.IVICameraWidget().lockLayout()) def change_canbox_0_event(self): self.now_camera_0_event += 1 if self.now_camera_0_event >= len(self.camera_0_event_array): self.now_camera_0_event = 0 self.multimedia_canbox_helper.cansend( IVICameraO.CAMERA_CANBOX_0_SENDMESSAGE) def change_canbox_c_event(self): self.now_camera_c_event += 1 if self.now_camera_c_event >= len(self.camera_c_event_array): self.now_camera_c_event = 0 self.multimedia_canbox_helper.cansend( IVICameraO.CAMERA_CANBOX_C_SENDMESSAGE) def get_screenshot(self, file_path): time.sleep(1) file_folder, file_name = os.path.split(file_path) self.camera_common.getScreenshotAndPullToHost(file_name, file_folder) def get_screenshot_and_compare_picture_similarity(self, expect_file_path, actual_file_path, expect_percent=0.8): self.get_screenshot(actual_file_path) t_percent = self.multimedia_checkiq_helper.compare_picture_similarity( expect_file_path, actual_file_path) self.logger.debug( "get_screenshot_and_compare_picture_similarity t_percent=%s" % str(t_percent)) return t_percent > expect_percent def reboot_device(self): self.pressPowerKey(10) time.sleep(5) self.pressPowerKey(2) time.sleep(40) g_common_obj.root_on_device() g_common_obj.remount_device() os.system("adb shell uiautomator dump /data/local/tmp/uidump.xml" ) #get layout, 20170822 has bug, can't find layout! g_common_obj.adb_cmd("setprop evs.state 0") self.backHome() self.check_home_or_lock_layout() def init_camera_with_canbox(self): self.logger.debug("init_camera_with_canbox start") self.reboot_device() # self.init_camera_c_with_canbox() # self.get_screenshot(self.before_screen_file_path) # self.camera_event_array[-1] # for i in range(self.camera_event_count): # self.change_canbox_0_event() # time.sleep(1) # t_result = self.get_screenshot_and_compare_picture_similarity(self.before_screen_file_path, self.after_screen_file_path) # self.camera_event_array[self.now_camera_event] = (0 if t_result else 1) # self.logger.debug("camera_event_array=%s" % str(self.camera_event_array)) # if sum(self.camera_event_array) > self.camera_event_count / 2: # for i in range(self.camera_event_count): # self.camera_event_array[i] = (0 if self.camera_event_array[i]==1 else 1) # self.logger.debug("camera_event_array=%s" % str(self.camera_event_array)) # assert sum(self.camera_event_array) <= 2, "fail init_camera_with_canbox!" def init_camera_c_with_canbox(self): self.logger.debug("init_camera_c_with_canbox start") cmd_list = [ "stop evs_app", "stop evs_manager", "stop evs-hal-1-0", "start evs-hal-1-0", "start evs_manager", "start evs_app" ] for cmd in cmd_list: g_common_obj.adb_cmd(cmd) time.sleep(0.5) def change_camera_0_status(self, need_camera_0_status, check_success=1): self.logger.debug("change_camera_0_status need_camera_0_status=%s" % need_camera_0_status) if check_success == 1: before_screen_0_status = self.camera_0_event_array[ self.now_camera_0_event][1] self.get_screenshot(self.before_screen_0_file_path) i = 0 while need_camera_0_status != self.camera_0_event_array[ self.now_camera_0_event][0]: i += 1 if i >= len(self.camera_0_event_array): break self.change_canbox_0_event() time.sleep(1) if i == 0: self.logger.debug("skip change camera 0 status!") if check_success == 1: time.sleep(1) after_screen_0_status = self.camera_0_event_array[ self.now_camera_0_event][1] need_status = 1 if before_screen_0_status == after_screen_0_status else 0 t_result = self.get_screenshot_and_compare_picture_similarity( self.before_screen_0_file_path, self.after_screen_0_file_path) assert t_result == need_status, "change_camera_0_status failed!" def change_camera_c_status(self, need_camera_c_status, check_success=1): self.logger.debug("change_camera_c_status need_camera_c_status=%s" % need_camera_c_status) if check_success == 1: before_screen_c_status = self.camera_c_event_array[ self.now_camera_c_event][1] self.get_screenshot(self.before_screen_c_file_path) i = 0 while need_camera_c_status != self.camera_c_event_array[ self.now_camera_c_event][0]: i += 1 if i >= len(self.camera_c_event_array): break self.change_canbox_c_event() time.sleep(1) if i == 0: self.logger.debug("skip change camera c status!") if check_success == 1: time.sleep(1) after_screen_c_status = self.camera_c_event_array[ self.now_camera_c_event][1] need_status = 1 if before_screen_c_status == after_screen_c_status else 0 t_result = self.get_screenshot_and_compare_picture_similarity( self.before_screen_c_file_path, self.after_screen_c_file_path) assert t_result == need_status, "change_camera_c_status failed!" def startCameraApp(self, check_success=1): """ Used to start the camera application """ self.logger.debug("launch ivi camera start") self.change_camera_0_status("GEAR_REVERSE", check_success) if check_success == 1: self.logger.debug("launch ivi camera successfully") else: self.logger.debug("launch ivi camera, skip check function") def stopCameraApp(self): """ Used to stop the camera application """ self.change_camera_0_status("GEAR_NEUTRAL") self.logger.debug("stop ivi camera app successfully") def skipAccountLoginLyout(self): if self.d(textContains="Drive safely").exists: self.d(text="Owner").click() time.sleep(3) def check_home_or_lock_layout(self, check_exist=True): assert self.isHomeLayoutExists() or self.isLockLayoutExists( ), "Home or Lock layout not exist!"