Refactor & Add Scan Screen
This commit is contained in:
parent
cb0d908a5e
commit
741f9ac4c3
104
src/bitmessagekivy/baseclass/scan_screen.py
Normal file
104
src/bitmessagekivy/baseclass/scan_screen.py
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# pylint: disable=no-member, too-many-arguments, too-few-public-methods
|
||||||
|
# pylint: disable=no-name-in-module, unused-argument, arguments-differ
|
||||||
|
|
||||||
|
"""
|
||||||
|
QR code Scan Screen used in message composer to get recipient address
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import cv2
|
||||||
|
|
||||||
|
from kivy.clock import Clock
|
||||||
|
from kivy.lang import Builder
|
||||||
|
from kivy.properties import (
|
||||||
|
BooleanProperty,
|
||||||
|
ObjectProperty,
|
||||||
|
StringProperty
|
||||||
|
)
|
||||||
|
from kivy.uix.screenmanager import Screen
|
||||||
|
|
||||||
|
from bitmessagekivy.get_platform import platform
|
||||||
|
|
||||||
|
from debug import logger
|
||||||
|
|
||||||
|
|
||||||
|
class ScanScreen(Screen):
|
||||||
|
"""ScanScreen is for scaning Qr code"""
|
||||||
|
# pylint: disable=W0212
|
||||||
|
camera_avaialbe = BooleanProperty(False)
|
||||||
|
previous_open_screen = StringProperty()
|
||||||
|
pop_up_instance = ObjectProperty()
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
"""Getting AddressBook Details"""
|
||||||
|
super(ScanScreen, self).__init__(*args, **kwargs)
|
||||||
|
self.check_camera()
|
||||||
|
|
||||||
|
def check_camera(self):
|
||||||
|
"""This method is used for checking camera avaibility"""
|
||||||
|
if platform != "android":
|
||||||
|
cap = cv2.VideoCapture(0)
|
||||||
|
is_cam_open = cap.isOpened()
|
||||||
|
while is_cam_open:
|
||||||
|
logger.debug('Camera is available!')
|
||||||
|
self.camera_avaialbe = True
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
logger.debug("Camera is not available!")
|
||||||
|
self.camera_avaialbe = False
|
||||||
|
else:
|
||||||
|
self.camera_avaialbe = True
|
||||||
|
|
||||||
|
def get_screen(self, screen_name, instance=None):
|
||||||
|
"""This method is used for getting previous screen name"""
|
||||||
|
self.previous_open_screen = screen_name
|
||||||
|
if screen_name != 'composer':
|
||||||
|
self.pop_up_instance = instance
|
||||||
|
|
||||||
|
def on_pre_enter(self):
|
||||||
|
"""
|
||||||
|
on_pre_enter works little better on android
|
||||||
|
It affects screen transition on linux
|
||||||
|
"""
|
||||||
|
if not self.children:
|
||||||
|
tmp = Builder.load_file(
|
||||||
|
os.path.join(
|
||||||
|
os.path.dirname(os.path.dirname(__file__)), "kv", "{}.kv").format("scanner")
|
||||||
|
)
|
||||||
|
self.add_widget(tmp)
|
||||||
|
if platform == "android":
|
||||||
|
Clock.schedule_once(self.start_camera, 0)
|
||||||
|
|
||||||
|
def on_enter(self):
|
||||||
|
"""
|
||||||
|
on_enter works better on linux
|
||||||
|
It creates a black screen on android until camera gets loaded
|
||||||
|
"""
|
||||||
|
if platform != "android":
|
||||||
|
Clock.schedule_once(self.start_camera, 0)
|
||||||
|
|
||||||
|
def on_leave(self):
|
||||||
|
"""This method will call on leave"""
|
||||||
|
Clock.schedule_once(self.stop_camera, 0)
|
||||||
|
|
||||||
|
def start_camera(self, *args):
|
||||||
|
"""Its used for starting camera for scanning qrcode"""
|
||||||
|
# pylint: disable=attribute-defined-outside-init
|
||||||
|
self.xcam = self.children[0].ids.zbarcam.ids.xcamera
|
||||||
|
if platform == "android":
|
||||||
|
self.xcam.play = True
|
||||||
|
else:
|
||||||
|
Clock.schedule_once(self.open_cam, 0)
|
||||||
|
|
||||||
|
def stop_camera(self, *args):
|
||||||
|
"""Its used for stop the camera"""
|
||||||
|
self.xcam.play = False
|
||||||
|
if platform != "android":
|
||||||
|
self.xcam._camera._device.release()
|
||||||
|
|
||||||
|
def open_cam(self, *args):
|
||||||
|
"""It will open up the camera"""
|
||||||
|
if not self.xcam._camera._device.isOpened():
|
||||||
|
self.xcam._camera._device.open(self.xcam._camera._index)
|
||||||
|
self.xcam.play = True
|
Reference in New Issue
Block a user