Ejemplo n.º 1
0
    def onCreate(self):
        vlayout = LinearLayout(self._activity)
        vlayout.setOrientation(LinearLayout.VERTICAL)

        self.entry = EditText(self._activity)
        self.entry.setInputType(0x00000002 | 0x00002000 | 0x00001000)
        # set input class and flags
        # see https://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
        self.entry.setGravity(Gravity.CENTER)
        vlayout.addView(self.entry)

        hlayout = LinearLayout(self._activity)
        hlayout.setOrientation(LinearLayout.HORIZONTAL)
        hlayout.setGravity(Gravity.CENTER)

        self.convert_to_fahrenheit = Button(self._activity)
        self.convert_to_fahrenheit.setOnClickListener(ButtonClick(self.to_fahrenheit))
        self.convert_to_fahrenheit.setText('To Fahrenheit')
        hlayout.addView(self.convert_to_fahrenheit)

        self.convert_to_celsius = Button(self._activity)
        self.convert_to_celsius.setOnClickListener(ButtonClick(self.to_celsius))
        self.convert_to_celsius.setText('To Celsius')
        hlayout.addView(self.convert_to_celsius)

        vlayout.addView(hlayout)

        self.result = TextView(self._activity)
        self.result.setTextSize(26)
        self.result.setText('Convert units')
        self.result.setGravity(Gravity.CENTER)
        vlayout.addView(self.result)

        self._activity.setContentView(vlayout)
Ejemplo n.º 2
0
    def onCreate(self):
        self.vlayout = LinearLayout(self._activity)
        self.vlayout.setOrientation(LinearLayout.VERTICAL)

        self.entrytext = EditText(self._activity)
        self.entrytext.setHint('Write a url to request')
        self.vlayout.addView(self.entrytext)

        button_send = Button(self._activity)
        button_send.setText('Request GET')
        button_send.setOnClickListener(OnClick(self.send_request))
        self.vlayout.addView(button_send)

        self.result = TextView(self._activity)
        self.result.setText('Waiting a request')
        self.vlayout.addView(self.result)

        self._activity.setContentView(self.vlayout)
Ejemplo n.º 3
0
    def onCreate(self):
        print('Starting TodoApp')
        self.dbitems = self.db.fetch_items()

        if not self.dbitems:
            print('populating DB')
            self._populate_db()
            self.dbitems = self.db.fetch_items()

        print('dbitems', self.dbitems)

        hlayout = LinearLayout(self._activity)
        hlayout.setOrientation(LinearLayout.HORIZONTAL)

        self.entry_text = EditText(self._activity)
        self.entry_text.setHint('Enter a new item...')
        hlayout.addView(self.entry_text)

        button_create = Button(self._activity)
        button_create.setText('Add')
        button_create.setOnClickListener(OnClick(self.create_item))

        rlayout = RelativeLayout(self._activity)
        rlayout.addView(button_create, _create_layout_params())
        hlayout.addView(rlayout)

        vlayout = LinearLayout(self._activity)
        vlayout.setOrientation(LinearLayout.VERTICAL)
        vlayout.addView(hlayout)

        self.adapter = ListAdapter(self._activity,
                                   self.dbitems,
                                   listener=self._dispatch_event)
        self.listView = ListView(self._activity)
        self.listView.setAdapter(self.adapter)

        vlayout.addView(self.listView)

        self._activity.setContentView(vlayout)
Ejemplo n.º 4
0
class TextInput(Widget):
    def __init__(self,
                 initial=None,
                 placeholder=None,
                 readonly=False,
                 **style):
        default_style = {'margin': 8}
        default_style.update(style)
        super(TextInput, self).__init__(**default_style)
        self.placeholder = placeholder

        self.startup()

        self.value = initial
        # self.readonly = readonly

    def startup(self):
        self._impl = EditText(App._impl)
        if self.placeholder:
            self._impl.setHint(self.placeholder)

    @property
    def readonly(self):
        return self._readonly

    @readonly.setter
    def readonly(self, value):
        self._readonly = value
        # self._impl.setEditable_(not self._readonly)

    @property
    def value(self):
        return self._impl.getText().toString()

    @value.setter
    def value(self, value):
        if value:
            self._impl.setText(value)
Ejemplo n.º 5
0
class MainApp:
    def __init__(self):
        self._activity = android.PythonActivity.setListener(self)
        self.queue = Volley.newRequestQueue(self._activity)

    def onCreate(self):
        self.vlayout = LinearLayout(self._activity)
        self.vlayout.setOrientation(LinearLayout.VERTICAL)

        self.entrytext = EditText(self._activity)
        self.entrytext.setHint('Write a url to request')
        self.vlayout.addView(self.entrytext)

        button_send = Button(self._activity)
        button_send.setText('Request GET')
        button_send.setOnClickListener(OnClick(self.send_request))
        self.vlayout.addView(button_send)

        self.result = TextView(self._activity)
        self.result.setText('Waiting a request')
        self.vlayout.addView(self.result)

        self._activity.setContentView(self.vlayout)

    def listener(self, response):
        response = str(response)
        self.result.setText("Response is: " + response[0:200])

    def listener_error(self, error):
        self.result.setText('Request failed, error: ' + error.getMessage())

    def send_request(self):
        self.result.setText('Loading request')
        url = str(self.entrytext.getText())
        stringRequest = toolbox.StringRequest(url, OnResponse(self.listener),
                                              OnError(self.listener_error))
        self.queue.add(stringRequest)
Ejemplo n.º 6
0
    def onCreate(self):
        self.vlayout = LinearLayout(self._activity)
        self.vlayout.setOrientation(LinearLayout.VERTICAL)

        self.textbox = EditText(self._activity)
        self.vlayout.addView(self.textbox)

        self.update_text_button = Button(self._activity)
        self.update_text_button.setText('update text')
        self.update_text_button.setOnClickListener(
            ButtonClick(self.update_text))
        self.vlayout.addView(self.update_text_button)

        self.text_result = TextView(self._activity)
        self.text_result.setText('test')
        self.vlayout.addView(self.text_result)

        self.change_view_button = Button(self._activity)
        self.change_view_button.setText('change view')
        self.change_view_button.setOnClickListener(
            ButtonClick(self.change_view))
        self.vlayout.addView(self.change_view_button)

        self._activity.setContentView(self.vlayout)
Ejemplo n.º 7
0
class MainApp:
    def __init__(self):
        self._activity = android.PythonActivity.setListener(self)

    def onCreate(self):
        vlayout = LinearLayout(self._activity)
        vlayout.setOrientation(LinearLayout.VERTICAL)

        self.entry = EditText(self._activity)
        self.entry.setInputType(0x00000002 | 0x00002000 | 0x00001000)
        # set input class and flags
        # see https://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
        self.entry.setGravity(Gravity.CENTER)
        vlayout.addView(self.entry)

        hlayout = LinearLayout(self._activity)
        hlayout.setOrientation(LinearLayout.HORIZONTAL)
        hlayout.setGravity(Gravity.CENTER)

        self.convert_to_fahrenheit = Button(self._activity)
        self.convert_to_fahrenheit.setOnClickListener(ButtonClick(self.to_fahrenheit))
        self.convert_to_fahrenheit.setText('To Fahrenheit')
        hlayout.addView(self.convert_to_fahrenheit)

        self.convert_to_celsius = Button(self._activity)
        self.convert_to_celsius.setOnClickListener(ButtonClick(self.to_celsius))
        self.convert_to_celsius.setText('To Celsius')
        hlayout.addView(self.convert_to_celsius)

        vlayout.addView(hlayout)

        self.result = TextView(self._activity)
        self.result.setTextSize(26)
        self.result.setText('Convert units')
        self.result.setGravity(Gravity.CENTER)
        vlayout.addView(self.result)

        self._activity.setContentView(vlayout)

    def to_celsius(self):
        fahrenheit = str(self.entry.getText()) # capture entry_text and transform it into string
        if len(fahrenheit) == 0:
            self.result.setText('Please enter a valid number!')
            return
        fahrenheit = float(fahrenheit)
        celsius = (fahrenheit-32.0) / 1.8
        self.result.setText('Celsius: %.2f'%(celsius))

    def to_fahrenheit(self):
        celsius = str(self.entry.getText()) # capture entry_text and transform it into string
        if len(celsius) == 0:
            self.result.setText('Please enter a valid number!')
            return
        celsius = float(celsius)
        fahrenheit = celsius * 1.8 + 32.0
        self.result.setText('Fahrenheit: %.2f'%(fahrenheit))
Ejemplo n.º 8
0
    def create_sale_view(self):
        self.vlayout.removeAllViews()

        self.sale_person = EditText(self._activity)
        self.sale_person.setHint('Client')
        self.vlayout.addView(self.sale_person)

        horizontalProducts = LinearLayout(self._activity)
        horizontalProducts.setOrientation(LinearLayout.HORIZONTAL)

        productsText = TextView(self._activity)
        productsText.setText('See products || quantity || value: ')
        horizontalProducts.addView(productsText)

        productSpinner = Spinner(self._activity)
        RawProducts = list(self.db.fetch_products())
        products = [(product['name'] + ' || ' + str(product['quantity']) +
                     ' || ' + str(product['value']))
                    for product in RawProducts]
        ProductsAdapter = ArrayAdapter(self._activity, 0x01090008, products)
        ProductsAdapter.setDropDownViewResource(0x01090009)
        productSpinner.setAdapter(ProductsAdapter)
        horizontalProducts.addView(productSpinner)

        self.sale_description = EditText(self._activity)
        self.sale_description.setHint('product:quantity')
        self.vlayout.addView(self.sale_description)

        self.sale_value = EditText(self._activity)
        self.sale_value.setInputType(0x00000002 | 0x00002000)
        self.sale_value.setHint('Value')
        self.vlayout.addView(self.sale_value)

        hlayout = LinearLayout(self._activity)

        text = TextView(self._activity)
        text.setText('Paid')
        text.setTextSize(22)
        hlayout.addView(text)
        self.sale_paid = CheckBox(self._activity)
        hlayout.addView(self.sale_paid)
        self.vlayout.addView(hlayout)

        generate_price_button = Button(self._activity)
        generate_price_button.setOnClickListener(
            ButtonClick(self.generate_price))
        generate_price_button.setText('Generate price')
        self.vlayout.addView(generate_price_button)

        create_button = Button(self._activity)
        create_button.setText('Sale')
        self.vlayout.addView(create_button)

        self.add_error_text()
        self.add_return_button('main', flayout=False)
Ejemplo n.º 9
0
class MainApp:
    def __init__(self):
        self._activity = android.PythonActivity.setListener(self)

    def onCreate(self):
        self.vlayout = LinearLayout(self._activity)
        self.vlayout.setOrientation(LinearLayout.VERTICAL)

        self.textbox = EditText(self._activity)
        self.vlayout.addView(self.textbox)

        self.update_text_button = Button(self._activity)
        self.update_text_button.setText('update text')
        self.update_text_button.setOnClickListener(
            ButtonClick(self.update_text))
        self.vlayout.addView(self.update_text_button)

        self.text_result = TextView(self._activity)
        self.text_result.setText('test')
        self.vlayout.addView(self.text_result)

        self.change_view_button = Button(self._activity)
        self.change_view_button.setText('change view')
        self.change_view_button.setOnClickListener(
            ButtonClick(self.change_view))
        self.vlayout.addView(self.change_view_button)

        self._activity.setContentView(self.vlayout)

    def update_text(self):
        text = self.textbox.getText()
        self.text_result.setText(text)

    def change_view(self):
        self.vlayout.removeAllViews()
        self.vlayout.addView(self.text_result)
        calendar = Calendar.getInstance()
        dateformat = SimpleDateFormat('yyyy / MM / dd')
        now = dateformat.format(calendar.getTime())
        self.text_result.setText(now)
Ejemplo n.º 10
0
    def create_product_view(self):
        self.vlayout.removeAllViews()

        self.product_name = EditText(self._activity)
        self.product_name.setHint('Product name')
        self.vlayout.addView(self.product_name)

        self.product_quantity = EditText(self._activity)
        self.product_quantity.setHint('Product quantity')
        self.product_quantity.setInputType(0x00000002)
        self.vlayout.addView(self.product_quantity)

        self.product_price = EditText(self._activity)
        self.product_price.setHint('Product price')
        self.product_price.setInputType(0x00000002 | 0x00002000)
        self.vlayout.addView(self.product_price)

        create_button = Button(self._activity)
        create_button.setOnClickListener(ButtonClick(self.create_product))
        create_button.setText('Create product')
        self.vlayout.addView(create_button)

        self.add_error_text()
        self.add_return_button('main', flayout=False)
Ejemplo n.º 11
0
class MainApp:
    def __init__(self):
        self._activity = android.PythonActivity.setListener(self)
        self.db = TodoDB(self._activity)

    def _populate_db(self):
        self.db.add_item("get ice cream", finished=True)
        self.db.add_item("call mom", finished=False)
        self.db.add_item("buy plane tickets", finished=False)
        self.db.add_item("reserve hotel", finished=False)

    def onCreate(self):
        print('Starting TodoApp')
        self.dbitems = self.db.fetch_items()

        if not self.dbitems:
            print('populating DB')
            self._populate_db()
            self.dbitems = self.db.fetch_items()

        print('dbitems', self.dbitems)

        hlayout = LinearLayout(self._activity)
        hlayout.setOrientation(LinearLayout.HORIZONTAL)

        self.entry_text = EditText(self._activity)
        self.entry_text.setHint('Enter a new item...')
        hlayout.addView(self.entry_text)

        button_create = Button(self._activity)
        button_create.setText('Add')
        button_create.setOnClickListener(OnClick(self.create_item))

        rlayout = RelativeLayout(self._activity)
        rlayout.addView(button_create, _create_layout_params())
        hlayout.addView(rlayout)

        vlayout = LinearLayout(self._activity)
        vlayout.setOrientation(LinearLayout.VERTICAL)
        vlayout.addView(hlayout)

        self.adapter = ListAdapter(self._activity,
                                   self.dbitems,
                                   listener=self._dispatch_event)
        self.listView = ListView(self._activity)
        self.listView.setAdapter(self.adapter)

        vlayout.addView(self.listView)

        self._activity.setContentView(vlayout)

    def _dispatch_event(self, event, value):
        if event == 'update':
            self.update_item(value)
        elif event == 'delete':
            self.delete_item(value)
        else:
            raise ValueError('oops: got unkwnown event %s from %s' %
                             (event, value))

    def update_item(self, value):
        self.db.update_item(value)

    def create_item(self):
        new_item_text = str(self.entry_text.getText())
        self.db.add_item(new_item_text, finished=False)
        self.dbitems = self.db.fetch_items()
        self.adapter.values = list(self.dbitems)
        self.listView.setAdapter(self.adapter)
        self.entry_text.setText('')

    def delete_item(self, value):
        self.db.delete_item(value)
        self.dbitems = self.db.fetch_items()
        self.adapter.values = list(self.dbitems)
        self.listView.setAdapter(self.adapter)
Ejemplo n.º 12
0
 def startup(self):
     self._impl = EditText(App._impl)
     if self.placeholder:
         self._impl.setHint(self.placeholder)
Ejemplo n.º 13
0
    def onCreate(self, savedInstanceState: android.os.Bundle) -> void:
        super().onCreate(savedInstanceState)

        r = self.getResources()

        # #********************************************************

        layout = LinearLayout(self)

        layout.setLayoutParams(
            LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                      LinearLayout.LayoutParams.MATCH_PARENT))

        layout.setPadding(
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
                                      r.getDisplayMetrics()),
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
                                      r.getDisplayMetrics()),
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
                                      r.getDisplayMetrics()),
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
                                      r.getDisplayMetrics()))
        layout.setOrientation(LinearLayout.VERTICAL)

        to_field = EditText(self)
        to_field.setLayoutParams(
            LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                      LinearLayout.LayoutParams.WRAP_CONTENT))
        to_field.setHint("To")

        subject_field = EditText(self)
        subject_field.setLayoutParams(
            LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                      LinearLayout.LayoutParams.WRAP_CONTENT))
        subject_field.setHint("Subject")

        message_field = EditText(self)
        message_field.setLayoutParams(
            LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                      0, 1.0))
        message_field.setGravity(Gravity.TOP)
        message_field.setHint("Message")

        send_button = Button(self)
        lp = LinearLayout.LayoutParams(
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100,
                                      r.getDisplayMetrics()),
            LinearLayout.LayoutParams.WRAP_CONTENT)
        lp.gravity = Gravity.RIGHT
        send_button.setLayoutParams(lp)

        send_button.setHint("Send")

        send_button.setOnClickListener(OnClickListener(message_field))

        layout.addView(to_field)
        layout.addView(subject_field)
        layout.addView(message_field)
        layout.addView(send_button)

        self.setContentView(layout)
Ejemplo n.º 14
0
class MainApp:
    def __init__(self):
        self._activity = android.PythonActivity.setListener(self)
        self.db = manamoneyDB(self._activity)

    def onCreate(self):
        self.vlayout = LinearLayout(self._activity)
        self.vlayout.setOrientation(LinearLayout.VERTICAL)
        self.flayout = FrameLayout(self._activity)
        self.vlayout.addView(self.flayout)
        self._activity.setContentView(self.vlayout)
        self.main_view()

    def main_view(self):
        self.vlayout.removeAllViews()
        self.flayout.removeAllViews()

        create_sale = Button(self._activity)
        create_sale.setText('Create sale')
        create_sale.setOnClickListener(ButtonClick(self.create_sale_view))
        self.vlayout.addView(create_sale)

        create_product = Button(self._activity)
        create_product.setText('Create product')
        create_product.setOnClickListener(ButtonClick(
            self.create_product_view))
        self.vlayout.addView(create_product)

        sales_view = Button(self._activity)
        sales_view.setText('View sales')
        sales_view.setOnClickListener(ButtonClick(self.sales_view))
        self.vlayout.addView(sales_view)

        products_view = Button(self._activity)
        products_view.setText('View products')
        products_view.setOnClickListener(ButtonClick(self.products_view))
        self.vlayout.addView(products_view)

        clients_view = Button(self._activity)
        clients_view.setText('View clients')
        clients_view.setOnClickListener(ButtonClick(self.clients_view))
        self.vlayout.addView(clients_view)

        hlayout = LinearLayout(self._activity)
        hlayout.setOrientation(LinearLayout.HORIZONTAL)
        relative_bottom = RelativeLayout(self._activity)
        relative_right = RelativeLayout(self._activity)

        received, to_receive = self.get_balance()
        received_view = TextView(self._activity)
        received_view.setText('Received %.2f' % (float(received)))
        received_view.setTextSize(18)
        to_receive_view = TextView(self._activity)
        to_receive_view.setText('To receive %.2f' % (float(to_receive)))
        to_receive_view.setTextSize(18)

        relative_right.addView(to_receive_view, _create_layout_params('right'))
        hlayout.addView(received_view)
        hlayout.addView(relative_right)
        relative_bottom.addView(hlayout, _create_layout_params('bottom'))
        self.vlayout.addView(relative_bottom)

    def create_product_view(self):
        self.vlayout.removeAllViews()

        self.product_name = EditText(self._activity)
        self.product_name.setHint('Product name')
        self.vlayout.addView(self.product_name)

        self.product_quantity = EditText(self._activity)
        self.product_quantity.setHint('Product quantity')
        self.product_quantity.setInputType(0x00000002)
        self.vlayout.addView(self.product_quantity)

        self.product_price = EditText(self._activity)
        self.product_price.setHint('Product price')
        self.product_price.setInputType(0x00000002 | 0x00002000)
        self.vlayout.addView(self.product_price)

        create_button = Button(self._activity)
        create_button.setOnClickListener(ButtonClick(self.create_product))
        create_button.setText('Create product')
        self.vlayout.addView(create_button)

        self.add_error_text()
        self.add_return_button('main', flayout=False)

    def create_sale_view(self):
        self.vlayout.removeAllViews()

        self.sale_person = EditText(self._activity)
        self.sale_person.setHint('Client')
        self.vlayout.addView(self.sale_person)

        horizontalProducts = LinearLayout(self._activity)
        horizontalProducts.setOrientation(LinearLayout.HORIZONTAL)

        productsText = TextView(self._activity)
        productsText.setText('See products || quantity || value: ')
        horizontalProducts.addView(productsText)

        productSpinner = Spinner(self._activity)
        RawProducts = list(self.db.fetch_products())
        products = [(product['name'] + ' || ' + str(product['quantity']) +
                     ' || ' + str(product['value']))
                    for product in RawProducts]
        ProductsAdapter = ArrayAdapter(self._activity, 0x01090008, products)
        ProductsAdapter.setDropDownViewResource(0x01090009)
        productSpinner.setAdapter(ProductsAdapter)
        horizontalProducts.addView(productSpinner)

        self.sale_description = EditText(self._activity)
        self.sale_description.setHint('product:quantity')
        self.vlayout.addView(self.sale_description)

        self.sale_value = EditText(self._activity)
        self.sale_value.setInputType(0x00000002 | 0x00002000)
        self.sale_value.setHint('Value')
        self.vlayout.addView(self.sale_value)

        hlayout = LinearLayout(self._activity)

        text = TextView(self._activity)
        text.setText('Paid')
        text.setTextSize(22)
        hlayout.addView(text)
        self.sale_paid = CheckBox(self._activity)
        hlayout.addView(self.sale_paid)
        self.vlayout.addView(hlayout)

        generate_price_button = Button(self._activity)
        generate_price_button.setOnClickListener(
            ButtonClick(self.generate_price))
        generate_price_button.setText('Generate price')
        self.vlayout.addView(generate_price_button)

        create_button = Button(self._activity)
        create_button.setText('Sale')
        self.vlayout.addView(create_button)

        self.add_error_text()
        self.add_return_button('main', flayout=False)

    def products_view(self):
        self.vlayout.removeAllViews()
        self.flayout.removeAllViews()
        self.vlayout.addView(self.flayout)

        self.productsItems = self.db.fetch_products()
        self.adapterProducts = ProductsListAdapter(
            self._activity, self.productsItems, listener=self._dispatch_event)
        self.listViewProducts = ListView(self._activity)
        self.listViewProducts.setAdapter(self.adapterProducts)
        self.flayout.addView(self.listViewProducts)

        self.add_return_button('main')

    def sales_view(self, sales=None, back=None):
        self.vlayout.removeAllViews()
        self.flayout.removeAllViews()
        self.vlayout.addView(self.flayout)

        if sales:
            self.salesItems = sales
        else:
            self.salesItems = self.db.fetch_sales()

        self.adapterSales = SalesListAdapter(self._activity,
                                             self.salesItems,
                                             listener=self._dispatch_event,
                                             back=back)
        self.listViewSales = ListView(self._activity)
        self.listViewSales.setAdapter(self.adapterSales)
        self.flayout.addView(self.listViewSales)

        if back:
            self.add_return_button('clients')
        else:
            self.add_return_button('main')

    def clients_view(self):
        self.vlayout.removeAllViews()
        self.flayout.removeAllViews()
        self.vlayout.addView(self.flayout)

        self.clientsItems = self.db.fetch_clients()
        self.adapterClients = ClientsListAdapter(self._activity,
                                                 self.clientsItems,
                                                 listener=self._dispatch_event)
        self.listViewClients = ListView(self._activity)
        self.listViewClients.setAdapter(self.adapterClients)

        self.flayout.addView(self.listViewClients)
        self.add_return_button('main')

    def details_sale_view(self, sale, back=None):
        self.vlayout.removeAllViews()

        person_text = TextView(self._activity)
        person_text.setText('Client: %s' % (sale['person']))
        person_text.setTextSize(22)
        self.vlayout.addView(person_text)

        value_text = TextView(self._activity)
        value_text.setText('\nValue: R$%.2f' % (sale['value']))
        value_text.setTextSize(22)
        self.vlayout.addView(value_text)

        discount_text = TextView(self._activity)
        total_price = self.db.get_price(sale['description'].replace(' ', '\n'))
        discount = total_price - sale['value']
        discount_p = discount * 100.0 / sale['value']
        discount_text.setText('\nDiscount: %.2f%% = R$%.2f' %
                              (discount_p, discount))
        discount_text.setTextSize(22)
        self.vlayout.addView(discount_text)

        description_text = TextView(self._activity)
        description_text.setText('\nDescription: %s' % (sale['description']))
        description_text.setTextSize(22)
        self.vlayout.addView(description_text)

        date_text = TextView(self._activity)
        date = sale['date'].replace(' ', '-')
        date_text.setText('\nDate: %s' % (date))
        date_text.setTextSize(22)
        self.vlayout.addView(date_text)

        if back:
            self.add_return_button('sales_client',
                                   value=sale['person'],
                                   flayout=False)
        else:
            self.add_return_button('sales_view', flayout=False)

    def create_product(self):
        product = {}
        product['name'] = str(self.product_name.getText())
        if len(product['name']) == 0:
            self.error_text.setText('Enter a valid name please')
            return

        try:
            product['quantity'] = int(str(self.product_quantity.getText()))
            product['price'] = float(str(self.product_price.getText()))
        except ValueError:
            self.error_text.setText('Enter a valid number please')
            return

        self.db.create_product(product)
        self.main_view()

    def create_sale(self):
        sale = {}
        sale['person'] = str(self.sale_person.getText())
        if len(sale['person']) == 0:
            self.error_text.setText('Enter a valid name please')
            return

        sale['description'] = str(self.sale_description.getText())
        if len(sale['description']) == 0:
            self.error_text.setText('Enter a valid description please')
            return

        try:
            sale['value'] = float(str(self.sale_value.getText()))
        except ValueError:
            self.error_text.setText('Enter a valid value please')
            return

        sale['paid'] = int(self.sale_paid.isChecked())

        self.db.create_sale(sale)
        self.main_view()

    def _dispatch_event(self, event, value, back=None):
        if event == 'update_sale':
            self.db.update_sale(sale=value)
        elif event == 'update_product':
            self.db.changeQuantity_product(sale=value)
        elif event == 'details_sale':
            self.details_sale_view(sale=value, back=back)
        elif event == 'sales_client':
            sales = self.db.fetch_sales(client=value)
            self.sales_view(sales=sales, back='sales_clients')
        elif event == 'clients':
            self.return_view('clients')

    def add_return_button(self, view, value=None, flayout=True):
        self.return_button = Button(self._activity)
        self.return_button.setOnClickListener(
            ButtonClick(self.return_view, view, value=value))
        self.return_button.setText('Return')
        self.relative_rb = RelativeLayout(self._activity)
        self.relative_rb.addView(self.return_button,
                                 _create_layout_params('bottom'))
        if flayout:
            self.flayout.addView(self.relative_rb)
        else:
            self.vlayout.addView(self.relative_rb)

    def add_error_text(self):
        self.error_text = TextView(self._activity)
        self.vlayout.addView(self.error_text)

    def return_view(self, view, value=None):
        if view == 'main':
            self.main_view()
        elif view == 'sales_view':
            self.sales_view()
        elif view == 'clients':
            self.clients_view()
        elif view == 'sales_client':
            self._dispatch_event('sales_client', back=view, value=value)

    def get_balance(self):
        return self.db.get_balance()

    def generate_price(self):
        description = str(self.sale_description.getText())
        value = self.db.get_price(description)
        if type(value) == str:
            self.error_text.setText(value)
            return
        value = '%.2f' % value
        self.sale_value.setText(value.replace(',', '.'))