Exemple #1
0
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!"
Exemple #2
0
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
Exemple #3
0
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!"