TakeNotes

Scrum es una metodología de trabajo que se usa para resolver proyectos, especialmente proyectos de desarrollo de software, en este foro se resolveran dudas sobre SCRUM
User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Sun Apr 07, 2019 9:43 pm

Sprint 10
Fecha inicio: 01-04-2019
Fecha fin: 08-04-2019


Actividades
Modificar la aplicación para que sea responsive. (4)
Mejorar los Burndown Charts de la presentación. (2)
Corregir el contraste de la presentación. (1)

Historias de usuario
Como cliente quisiera que la aplicación se ajustara al tamaño de la pantalla de mis 3 móviles.

Condiciones de Satisfacción
La aplicación será responsive.

Velocidad inicial: 7
Velocidad final: 7

¿Que se hizo?

  • Se mejoraron los Burndown Charts de la presentación de la pre entrega.

  • Se modificaron los archivos main.py y main.kv para hacer que la aplicación sea responsive.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase
    import speech_recognition as sr
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
        
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
    
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',
                      content=Label(text='Invalid username or password.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    
    def invalidForm():
        pop = Popup(title='Invalid Form',
                      content=Label(text='Please fill in all inputs with valid information.'),
                      size_hint=(None, None), size=(400, 400))
    
        pop.open()
    
    def existingAccount():
            pop = Popup(title='Existing account',
                          content=Label(text='Account already exists'),
                          size_hint=(None, None), size=(400, 400))
            pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    
    main.kv

    Code: Select all

    #: import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:include login.kv
    #:include options.kv
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        FloatLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                pos_hint: {"top":1,"bottom":0}
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            FloatLayout:
                pos_hint: {"top":0}
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Label:
                    pos_hint: {"top":.5}
                    id: my_label
                    text: 'Content'
            Button:
                pos_hint: {"top":0}
                text: 'Export'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_release: app.root.current = "options"
    
    <LoginScreen>:
        name: "login"
        email: usrname
        password:passw
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        FloatLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            FloatLayout:
                pos_hint: {"top":0}
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    pos_hint: {"top":0}
                    source: 'TakeNotes.png'
                Label:
                    pos_hint: {"top":0}
                    text: "Login"
            Label:
                pos_hint: {"top":0}
                text: "Username"
            TextInput:
                pos_hint: {"top":0}
                id: usrname
                hint_text: "Username"
                multiline: False
            Label:
                pos_hint: {"top":0}
                text: "Password"
            TextInput:
                pos_hint: {"top":0}
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                pos_hint: {"top":0}
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                #on_release:
                    #self.background_color = (1, 1, 1, 1)
                    #root.loginBtn()
                on_release: app.root.current = "options"
            Button:
                pos_hint: {"top":0}
                text: 'Create account'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.createBtn()
    
    <OptionsScreen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        FloatLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            FloatLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    pos_hint: {"top":0}
                    source: 'TakeNotes.png'
                Label:
                    pos_hint: {"top":0}
                    text: "Options"
            Label:
                pos_hint: {"top":0}
                text: "Choose one"
            Button:
                pos_hint: {"top":0}
                text: 'Reconsider Login'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
            Button:
                pos_hint: {"top":0}
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        FloatLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            Label:
                pos_hint: {"top":0}
                text: "Create an Account"
            Label:
                pos_hint: {"top":0}
                text: "Name: "
            TextInput:
                pos_hint: {"top":0}
                id: namee
                multiline: False
            Label:
                pos_hint: {"top":0}
                text: "Email: "
            TextInput:
                pos_hint: {"top":0}
                id: email
                multiline: False
            Label:
                pos_hint: {"top":0}
                text: "Password: "
            TextInput:
                pos_hint: {"top":0}
                id: passw
                multiline: False
                password: True
            Button:
                pos_hint: {"top":0}
                text: "Already have an Account? Log In"
                on_release:
                    root.manager.transition.direction = "left"
                    root.login()
            Button:
                pos_hint: {"top":0}
                text: "Submit"
                on_release:
                    root.manager.transition.direction = "left"
                    root.submit()
    Responsivee

    Image

    Sobre el contraste de la presentación...

    Image
Burndown Chart

Image

¿Que voy a hacer?
  • Planificar el Sprint 11.
¿Que problemas se han tenido?
No se presentaron problemas.

User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Apr 22, 2019 3:02 pm

Sprint 11
Fecha inicio: 22-04-2019
Fecha fin: 29-04-2019


Actividades
Error Logs y Troubleshooting de la versión actual del APK generada para Android. (2)
Continuar trabajando en la fabricación y las pruebas del APK. (2)
Consultar y comenzar a implementar el control del resultado del Speech dentro de la aplicación. (5)

Historias de usuario
Como cliente quisiera tener la capacidad de utilizar el resultado del Speech.

Condiciones de Satisfacción
La aplicación le permitirá al usuario hacerse con el control del resultado que genere el Speech.

Velocidad inicial: 9
Velocidad final: 9

¿Que se hizo?

  • Se programo Kenny Bell de funcionalidad en la aplicación, copiar en portapapeles.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase
    import speech_recognition as sr
    from kivy.config import Config
    
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
        
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
    
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',
                      content=Label(text='Invalid username or password.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    
    def invalidForm():
        pop = Popup(title='Invalid Form',
                      content=Label(text='Please fill in all inputs with valid information.'),
                      size_hint=(None, None), size=(400, 400))
    
        pop.open()
    
    def existingAccount():
            pop = Popup(title='Existing account',
                          content=Label(text='Account already exists'),
                          size_hint=(None, None), size=(400, 400))
            pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    main.kv

    Code: Select all

    #:import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:import Clipboard kivy.core.clipboard.Clipboard
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                ButtonLabel:
                    text: 'This is what I want you to see copied to the right'
                    on_press: Clipboard.copy(self.text)
                    on_release: self.background_color = (1, 1, 1, 1)
                TextInput:
                    hint_text: 'Paste'
            Button:
                text: 'Export'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_release: app.root.current = "options"
    
    <LoginScreen>:
        name: "login"
        email: usrname
        password:passw
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Login"
            Label:
                text: "Username"
            TextInput:
                id: usrname
                hint_text: "Username"
                multiline: False
            Label:
                text: "Password"
            TextInput:
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.loginBtn()
            Button:
                text: 'Create account'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.createBtn()
    
    <OptionsScreen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options"
            Label:
                text: "Choose one"
            Button:
                text: 'Reconsider Login'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            Label:
                text: "Create an Account"
            Label:
                text: "Name: "
            TextInput:
                id: namee
                multiline: False
            Label:
                text: "Email: "
            TextInput:
                id: email
                multiline: False
            Label:
                text: "Password: "
            TextInput:
                id: passw
                multiline: False
                password: True
            Button:
                text: "Already have an Account? Log In"
                on_release:
                    root.manager.transition.direction = "left"
                    root.login()
            Button:
                text: "Submit"
                on_release:
                    root.manager.transition.direction = "left"
                    root.submit()
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <ButtonLabel@ButtonBehavior+Label>:
        text_size: self.size
    Resultado

    Image
  • Se generó el log del APK actual y se buscó la forma de corregir los problemas, pero el log no detecta problemas y Buildozer no detecta el dispositivo móvil.

    Depuración

    Image

    Archivo de texto del Log

    Image
Burndown Chart

Image

Diagramas Actividad virtual:

Image

Image

Image

¿Que voy a hacer?
  • Planificar el Sprint 12.
¿Que problemas se han tenido?
  • Se presentaron problemas con la implementación de los FloatLayout en el Sprint pasado, fue necesario restaurar código.
Last edited by SamuelR on Mon Apr 29, 2019 12:25 am, edited 4 times in total.

User avatar
luisferub
Posts: 18
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by luisferub » Mon Apr 22, 2019 6:55 pm

Code Review:
  • Te recomendaría el uso de comentarios para que personas ajenas a tu proyecto puedan entender mejor el código.
  • Es importante el cuidado de datos sensibles como lo son los correos y contraseñas de los usuarios de tu app, para evitar problemas de seguridad.
  • El código está bien identado, las variables están escritas en un mismo idioma y son cortas y coherentes.
  • Se importan correctamente los módulos necesarios para el funcionamiento del programa.

User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Sun May 05, 2019 9:49 pm

Sprint 12
Fecha inicio: 29-04-2019
Fecha fin: 05-05-2019


Actividades
Mejorar los diagramas del proyecto. (3)
Consultar información para implementar la función de exportar los datos de salida de la aplicación. (2)
Continuar trabajando en la corrección de errores en la creación del APK para Android. (3)

Historias de usuario
Como cliente quisiera tener facilidad de utilizar el resultado del Speech.

Condiciones de Satisfacción
La aplicación le permitirá al usuario obtener externamente el resultado que genere el Speech.

Velocidad inicial: 8
Velocidad final: 5

¿Que se hizo?

  • Se mejoraron los diagramas del proyecto.

    Diagrama de Procesos

    Image

    Diagrama de Elementos?

    Image

    Diagrama de Casos de Uso

    Image
  • Se encontró información para implementar la función de exportación de la aplicación, se buscará su implementación en el siguiente Sprint.



Burndown Chart

Image

¿Que voy a hacer?

  • Planificar el Sprint 13.


¿Que problemas se han tenido?

  • Se presentaron problemas con la ejecución de la totalidad de las actividades de este Sprint por ausencia de tiempo.

User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Sun May 12, 2019 9:33 pm

Sprint 13
Fecha inicio: 06-05-2019
Fecha fin: 13-05-2019


Actividades
Implementar la función de exportar mediante correos a los usuarios. (5)
Instalar Genymotion y crear el log del deploy y el run de la aplicación en un dispositivo móvil. (3)

Historias de usuario
Como cliente quisiera tener acceso al resultado del Speech de forma externa.

Condiciones de Satisfacción
La aplicación le permitirá al usuario obtener externamente el resultado que genere el Speech.

Velocidad inicial: 8
Velocidad final: 8

Presentación



¿Que se hizo?

  • Se implementó la función de exportar correos electrónicos a través de la app.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase
    import speech_recognition as sr
    from kivy.config import Config
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
        def btn_mail(self, mail):
            userMail = 
            passw = 
            recvMail = 
            subject = 
            
            msg = MIMEMultipart()
            msg['From'] = userMail
            msg['To'] = recvMail
            msg['Subject'] = subject
    
            body = mail
            msg.attach(MIMEText(body,'plain'))
            text = msg.as_string()
            server = smtplib.SMTP('smtp.gmail.com',587)
            server.starttls()
            server.login(userMail,passw)
            server.sendmail(userMail,recvMail,text)
            server.quit()
    
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',
                      content=Label(text='Invalid username or password.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    
    def invalidForm():
        pop = Popup(title='Invalid Form',
                      content=Label(text='Please fill in all inputs with valid information.'),
                      size_hint=(None, None), size=(400, 400))
    
        pop.open()
    
    def existingAccount():
            pop = Popup(title='Existing account',
                          content=Label(text='Account already exists'),
                          size_hint=(None, None), size=(400, 400))
            pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    main.kv

    Code: Select all

    #:import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:import Clipboard kivy.core.clipboard.Clipboard
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                ButtonLabel:
                    id:labl
                    text: 'This is what I want you to see copied to the right or sent via email'
                    on_press: Clipboard.copy(self.text)
                    on_release: self.background_color = (1, 1, 1, 1)
                TextInput:
                    hint_text: 'Paste'
            Button:
                text: 'Export'
                on_press:root.btn_mail(labl.text)
                on_release: self.background_color = (1, 1, 1, 1)
    
    <LoginScreen>:
        name: "login"
        email: usrname
        password:passw
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Login"
            Label:
                text: "Username"
            TextInput:
                id: usrname
                hint_text: "Username"
                multiline: False
            Label:
                text: "Password"
            TextInput:
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.loginBtn()
            Button:
                text: 'Create account'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.createBtn()
    
    <OptionsScreen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options"
            Label:
                text: "Choose one"
            Button:
                text: 'Reconsider Login'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            Label:
                text: "Create an Account"
            Label:
                text: "Name: "
            TextInput:
                id: namee
                multiline: False
            Label:
                text: "Email: "
            TextInput:
                id: email
                multiline: False
            Label:
                text: "Password: "
            TextInput:
                id: passw
                multiline: False
                password: True
            Button:
                text: "Already have an Account? Log In"
                on_release:
                    root.manager.transition.direction = "left"
                    root.login()
            Button:
                text: "Submit"
                on_release:
                    root.manager.transition.direction = "left"
                    root.submit()
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <ButtonLabel@ButtonBehavior+Label>:
        text_size: self.size
    Resultado

    Image
  • Se instaló Genymotion pero no se pudo utilizar, se generó un archivo de texto con los datos del deploy y el run del APK.

    Image
Burndown Chart

Image

¿Que voy a hacer?
  • Planificar el Sprint 14.
¿Que problemas se han tenido?
  • Se presentó un problema de compatibilidad entre el dispositivo virtual y el sistema operativo virtual que lo aloja.

User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon May 20, 2019 1:38 pm

Sprint 14
Fecha inicio: 13-05-2019
Fecha fin: 20-05-2019


Actividades
Terminar de pulir la navegación dentro de la aplicación (2)
Implementar lo opción de omitir el inicio de sesión. (2)
Explorar el uso de hilos dentro de la aplicación. (3)

Historias de usuario
Como cliente quisiera tener acceso al resultado del Speech de forma externa.

Condiciones de Satisfacción
La aplicación le permitirá al usuario obtener externamente el resultado que genere el Speech.

Velocidad inicial: 7
Velocidad final: 7

¿Que se hizo?

  • Se aplicaron mejoras al código de navegación dentro de la aplicación y la opción de omitir el inicio de sesión.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase
    import speech_recognition as sr
    from kivy.config import Config
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    import threading
    
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                try:
                    self.lbl.text = 'Say something...'
                    audio = r.listen(source)
                    try:
                        self.lbl.text = 'You said: \n' + r.recognize_google(audio)
                    except:
                        pass
                except:
                    inputDevice()
                
        def btn_mail(self, mail):
            userMail = 
            passw = 
            recvMail = 
            subject = 'Thanks for using TakeNotes'
            
            msg = MIMEMultipart()
            msg['From'] = userMail
            msg['To'] = recvMail
            msg['Subject'] = subject
            body = mail
    
            msg.attach(MIMEText(body,'plain'))
            text = msg.as_string()
            server = smtplib.SMTP('smtp.gmail.com',587)
            server.starttls()
            server.login(userMail,passw)
            server.sendmail(userMail,recvMail,text)
            server.quit()
    
        def btn_mailTrig(self, mail):
            mailThread = btn_mail(mail)
            mailThread.start()
    
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',
                      content=Label(text='Invalid username or password.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    
    def invalidForm():
        pop = Popup(title='Invalid Form',
                      content=Label(text='Please fill in all inputs with valid information.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    def existingAccount():
        pop = Popup(title='Existing account',
                          content=Label(text='Account already exists'),
                          size_hint=(None, None), size=(400, 400))
        pop.open()
    
    def inputDevice():
        Popup(title='Error',
                    content=Label(text='Input device not recognized.'),
                    size_hint=(None, None), size=(400, 400))
        pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    main.kv

    Code: Select all

    #:import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:import Clipboard kivy.core.clipboard.Clipboard
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                ButtonLabel:
                    id:labl
                    text: 'This is what I want you to see copied to the right or sent via email'
                    on_press: Clipboard.copy(self.text)
                    on_release: self.background_color = (1, 1, 1, 1)
                TextInput:
                    hint_text: 'Paste'
            Button:
                text: 'Export'
                on_press:root.btn_mail(labl.text)
                on_release: self.background_color = (1, 1, 1, 1)
            Button:
                text: 'Return'
                on_press:app.root.current = "options"
                on_release: self.background_color = (1, 1, 1, 1)
    
    <LoginScreen>:
        name: "login"
        email: usrname
        password:passw
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Login"
            TextInput:
                id: usrname
                hint_text: "Username"
                multiline: False
            TextInput:
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.loginBtn()
            Button:
                text: 'Create account'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.createBtn()
            Button:
                text: 'Dismiss'
                on_press:app.root.current = "options"
                on_release: self.background_color = (1, 1, 1, 1)
    
    <OptionsScreen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options"
            Label:
                text: "Choose one"
            Button:
                text: 'Reconsider Login'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            Label:
                text: "Create an Account"
            Label:
                text: "Name: "
            TextInput:
                id: namee
                multiline: False
            Label:
                text: "Email: "
            TextInput:
                id: email
                multiline: False
            Label:
                text: "Password: "
            TextInput:
                id: passw
                multiline: False
                password: True
            Button:
                text: "Already have an Account? Log In"
                on_release:
                    root.manager.transition.direction = "left"
                    root.login()
            Button:
                text: "Submit"
                on_release:
                    root.manager.transition.direction = "left"
                    root.submit()
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <ButtonLabel@ButtonBehavior+Label>:
        text_size: self.size
    Resultado

    Image

    Image
Burndown Chart

Image

¿Que voy a hacer?
  • Planificar el Sprint 15.
¿Que problemas se han tenido?

No se presentaron problemas.

User avatar
SamuelR
Posts: 17
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon May 27, 2019 11:50 pm

Sprint 15
Fecha inicio: 20-05-2019
Fecha fin: 27-05-2019


Actividades
Implementar definitivamente la función del Speech. (4)
Implementar las diferencias entre el usuario registrado y el no registrado. (2)
Imprimir el Speech dentro de la aplicación. (3)
Agregar alertas adicionales para ciertas funciones de la aplicación. (2)

Historias de usuario
Como cliente quisiera tener acceso al resultado del Speech dentro de la aplicación.

Condiciones de Satisfacción
La aplicación le permitirá al usuario ver el resultado que genere el Speech dentro de la aplicación.

Velocidad inicial: 11
Velocidad final: 11

¿Que se hizo?

  • Se agregaron pantallas para las funciones sin inicio de sesión.
  • Se completo la implementacion del Speech y el resultado en pantalla.
  • Se agregaron alertas a para algunas funciones de la aplicación.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from kivy.uix.widget import Widget
    from database import DataBase
    import speech_recognition as sr
    from kivy.config import Config
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    import threading
    
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        tx = ObjectProperty()
        tx = "Here should be the result"
        def btnSpeech(self):
            self.ids.labl.text = "Please wait. Calibrating microphone..."
            r = sr.Recognizer()
            with sr.Microphone() as source:
                print("Please wait. Calibrating microphone...")
                
                # listen for 2 seconds and create the ambient noise energy level  
                r.adjust_for_ambient_noise(source, duration=2)
                print("Say something!")
                self.ids.labl.text = "Say something!"
                audio = r.listen(source)
            
            try:
                print(r.recognize_google(audio))
                self.ids.labl.text = r.recognize_google(audio)
            except sr.UnknownValueError:
                print("Google Speech Recognition could not understand audio")
                self.ids.labl.text = "Google Speech Recognition could not understand audio"
            except sr.RequestError as e:
                print("Could not request results from Google Speech Recognition service; {0}".format(e))
                self.ids.labl.text = "Could not request results from Google Speech Recognition service; {0}".format(e)
                        
        def btnMail(self, mail):
            userMail = 
            passw = 
            recvMail = 
            subject = 'Thanks for using TakeNotes'
            
            msg = MIMEMultipart()
            msg['From'] = userMail
            msg['To'] = recvMail
            msg['Subject'] = subject
            body = mail
    
            msg.attach(MIMEText(body,'plain'))
            text = msg.as_string()
            server = smtplib.SMTP('smtp.gmail.com',587)
            server.starttls()
            server.login(userMail,passw)
            server.sendmail(userMail,recvMail,text)
            server.quit()
            pop = Popup(title='Success!',content=Label(text='Mail delivered succesfully.'),size_hint=(None, None), size=(400, 400))
            pop.open()
    
        def copyPop(self):
            pop = Popup(title='Clipboard',content=Label(text='Copied.'),size_hint=(None, None), size=(200, 200))
            pop.open()
    
    class urMainScreen(Screen):
        urtx = ObjectProperty()
        urtx = "Here should be the result (UR)"
        def btnSpeech(self):
            self.ids.urlabl.text = "Please wait. Calibrating microphone..."
            r = sr.Recognizer()
            with sr.Microphone() as source:
                print("Please wait. Calibrating microphone...")
                
                # listen for 2 seconds and create the ambient noise energy level  
                r.adjust_for_ambient_noise(source, duration=2)
                print("Say something!")
                self.ids.urlabl.text = "Say something!"
                audio = r.listen(source)
            
            try:
                print(r.recognize_google(audio))
                self.ids.urlabl.text = r.recognize_google(audio)
            except sr.UnknownValueError:
                print("Google Speech Recognition could not understand audio")
                self.ids.urlabl.text = "Google Speech Recognition could not understand audio"
            except sr.RequestError as e:
                print("Could not request results from Google Speech Recognition service; {0}".format(e))
                self.ids.urlabl.text = "Could not request results from Google Speech Recognition service; {0}".format(e)
    
        def btnMail(self):
            pop = Popup(title='Unregistered',content=Label(text='Log in to use this function.'),size_hint=(None, None), size=(200, 200))
            pop.open()
    
        def copyPop(self):
            pop = Popup(title='Clipboard',content=Label(text='Copied.'),size_hint=(None, None), size=(200, 200))
            pop.open()
            
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class urOptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',content=Label(text='Invalid username or password.'),size_hint=(None, None), size=(400, 400))
        pop.open()
    
    def invalidForm():
        pop = Popup(title='Invalid Form',content=Label(text='Please fill in all inputs with valid information.'),size_hint=(None, None), size=(400, 400))
        pop.open()
    
    def existingAccount():
        pop = Popup(title='Existing account',content=Label(text='Account already exists'),size_hint=(None, None), size=(400, 400))
        pop.open()
    
    def inputDevice():
        pop = Popup(title='Error',content=Label(text='Input device not recognized.'),size_hint=(None, None), size=(400, 400))
        pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main"),urMainScreen(name="urmain"),urOptionsScreen(name="uroptions")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    main.kv

    Code: Select all

    #:import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:import Clipboard kivy.core.clipboard.Clipboard
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btnSpeech()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                ButtonLabel:
                    id:labl
                    text: root.tx
                    halign: 'center'
                    valign: 'middle'
                    on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                    on_press:
                        Clipboard.copy(self.text)
                        root.copyPop()
                    on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Button:
                    text: 'Export'
                    on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                    on_press:root.btnMail(labl.text)
                    on_release: self.background_color = (1, 1, 1, 1)
                Button:
                    text: 'Return'
                    on_press:
                        self.background_color = (0.1, 0.1, 0.1, 1)
                        app.root.current = "options"
                    on_release: self.background_color = (1, 1, 1, 1)
    
    <urMainScreen>:
        name: "urmain"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btnSpeech()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                ButtonLabel:
                    id:urlabl
                    text: root.urtx
                    halign: 'center'
                    valign: 'middle'
                    on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                    on_press:
                        Clipboard.copy(self.text)
                        root.copyPop()
                    on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Button:
                    text: 'Export'
                    on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                    on_press:root.btnMail()
                    on_release: self.background_color = (1, 1, 1, 1)
                Button:
                    text: 'Return'
                    on_press:
                        self.background_color = (0.1, 0.1, 0.1, 1)
                        app.root.current = "uroptions"
                    on_release: self.background_color = (1, 1, 1, 1)
    
    <LoginScreen>:
        name: "login"
        email: usrname
        password:passw
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Login"
            TextInput:
                id: usrname
                hint_text: "Username"
                multiline: False
            TextInput:
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.loginBtn()
            Button:
                text: 'Create account'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release:
                    self.background_color = (1, 1, 1, 1)
                    root.createBtn()
            Button:
                text: 'Dismiss'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_press:app.root.current = "uroptions"
                on_release: self.background_color = (1, 1, 1, 1)
    
    <OptionsScreen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options"
            Label:
                text: "Choose one"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
            Button:
                text: 'Log in again'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
    
    <urOptionsScreen>:
        name: "uroptions"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options (UR)"
            Label:
                text: "Choose one"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "urmain"
            Button:
                text: 'Log in again'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        BoxLayout:
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            Label:
                text: "Create an Account"
            TextInput:
                id: namee
                hint_text: "Name"
                multiline: False
            TextInput:
                id: email
                hint_text: "Email"
                multiline: False
            TextInput:
                id: passw
                hint_text: "Password"
                multiline: False
                password: True
            Button:
                text: "Already have an Account? Log In"
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_press:
                    app.root.current = "login"
                    root.login()
            Button:
                text: "Submit"
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_press:
                    app.root.current = "login"
                    root.submit()
                on_release: self.background_color = (1, 1, 1, 1)
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <ButtonLabel@ButtonBehavior+Label>:
        text_size: self.size
    Resultado

    Image

    Image

    Image

    Image
Burndown Chart

Image

¿Que voy a hacer?
  • Planificar la entrega del proyecto.
¿Que problemas se han tenido?

No se presentaron problemas.

Post Reply