
Since odoo/documentation#903, the guideline for the location of new resource (images, downloadable files, RST includes...) files is to place those inside the directory of the RST page that references them. For example, if `doc1.rst` has a reference to `image.png` and to `download.zip`, the file structure should look like this: ├── parent_doc/ │ └── doc1/ │ │ └── image.png │ │ └── download.zip │ └── doc1.rst │ └── doc2.rst ├── parent_doc.rst Before this commit, most of the resource files were still located inside 'media' directories holding all the resource files referenced by RST pages located at the same level as these directories. In the example above, a single 'media' directory would hold all the resource files referenced by both `doc1.rst` and `doc2.rst`. Doing so prevented us from figuring out easily which resource file was referenced by which RST page and, thus, lead to unused resource files piling up in the repository. It also made it more complicated to define codeowners regex rules because a team could not simply be assigned to `/some_page.*` but needed to be assigned to both `/some_page\.rst` and to the location of 'media'. In order to help new content writers figure out the guideline when taking examples from other RST pages, this commit retroactively applies the guideline to existing resource files and 'media' directories. The left-over resource files that are not referenced by any RST page are removed. task-2497965 Part-of: odoo/documentation#2064
212 lines
6.0 KiB
ReStructuredText
212 lines
6.0 KiB
ReStructuredText
|
|
.. _reference/mobile:
|
|
|
|
==================
|
|
Mobile JavaScript
|
|
==================
|
|
|
|
Introduction
|
|
============
|
|
|
|
In Odoo 10.0 we released a mobile app which allows you to access all **Odoo apps**
|
|
(even your customized modules).
|
|
|
|
The application is a combination of **Odoo Web** and **Native Mobile
|
|
components**. In other words it is a Odoo Web instance loaded inside a native, mobile, WebView container.
|
|
|
|
This page documents how you can access mobile native components like Camera,
|
|
Vibration, Notification and Toast through Odoo Web (via JavaScript). For this, you
|
|
do not need to be a mobile developer, if you know Odoo JavaScript API you can
|
|
access all available mobile features.
|
|
|
|
.. warning:: These features work with **Odoo Enterprise 10.0+** only
|
|
|
|
How does it work?
|
|
=================
|
|
|
|
Internal workings of the mobile application:
|
|
|
|
.. image:: mobile/mobile_working.jpg
|
|
|
|
Of course, it is a web page that loads on a Mobile Native Web container. But it
|
|
is integrated in such a way that you can access native resources from your web
|
|
JavaScript.
|
|
|
|
WebPages (Odoo Web) is on the top of each layer, where the second layer is a Bridge
|
|
between Odoo Web (JS) and the native mobile components.
|
|
|
|
When any call from JavaScript is triggered it passes through Bridge and Bridge
|
|
passes it to the native invoker to perform that action.
|
|
|
|
When the native component has done its work, it is passed to the Bridge again and
|
|
you get the output in JavaScript.
|
|
|
|
Process time taken by the Native component depends on what you are requesting
|
|
from the Native resources. For example the Camera or GPS Location.
|
|
|
|
How to use it?
|
|
==============
|
|
|
|
Just like the Odoo Web Framework, the Mobile API can be used anywhere by getting the object from
|
|
**web_mobile.rpc**
|
|
|
|
.. image:: mobile/odoo_mobile_api.png
|
|
|
|
The mobile RPC object provides a list of methods that are available (this only works with the mobile
|
|
app).
|
|
|
|
Check if the method is available and then execute it.
|
|
|
|
Methods
|
|
-------
|
|
|
|
.. note:: Each of the methods returns a JQuery Deferred object which returns
|
|
a data JSON dictionary
|
|
|
|
Show Toast in device
|
|
.....................
|
|
|
|
.. js:function:: showToast
|
|
|
|
:param object args: **message** text to display
|
|
|
|
A toast provides simple feedback about an operation in a small popup. It only
|
|
fills the amount of space required for the message and the current activity
|
|
remains visible and interactive.
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.methods.showToast({'message': 'Message sent'});
|
|
|
|
.. image:: mobile/toast.png
|
|
|
|
|
|
Vibrating device
|
|
................
|
|
|
|
|
|
.. js:function:: vibrate
|
|
|
|
:param object args: Vibrates constantly for the specified period of time
|
|
(in milliseconds).
|
|
|
|
Vibrate mobile device with given duration.
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.methods.vibrate({'duration': 100});
|
|
|
|
Show snackbar with action
|
|
.........................
|
|
|
|
.. js:function:: showSnackBar
|
|
|
|
:param object args: (*required*) **Message** to show in snackbar and action **button label** in Snackbar (optional)
|
|
:returns: ``True`` if the user clicks on the Action button, ``False`` if SnackBar auto dismissed after some time.
|
|
|
|
Snackbars provide lightweight feedback about an operation. They show a brief
|
|
message at the bottom of the screen on mobile or in the lower left corner on larger devices.
|
|
Snackbars appear above all the other elements on the screen and only one can be
|
|
displayed at a time.
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.methods.showSnackBar({'message': 'Message is deleted', 'btn_text': 'Undo'}).then(function(result){
|
|
if(result){
|
|
// Do undo operation
|
|
}else{
|
|
// Snack Bar dismissed
|
|
}
|
|
});
|
|
|
|
.. image:: mobile/snackbar.png
|
|
|
|
Showing notification
|
|
.....................
|
|
|
|
.. js:function:: showNotification
|
|
|
|
:param object args: **title** (first row) of the notification, **message** (second row) of the notification, in a standard notification.
|
|
|
|
A notification is a message you can display to the user outside of your
|
|
application's normal UI. When you tell the system to issue a notification, it
|
|
first appears as an icon in the notification area. To see the details of the
|
|
notification, the user opens the notification drawer. Both the notification
|
|
area and the notification drawer are system-controlled areas that the user can
|
|
view at any time.
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.showNotification({'title': 'Simple Notification', 'message': 'This is a test for a simple notification'})
|
|
|
|
.. image:: mobile/mobile_notification.png
|
|
|
|
|
|
Create contact in device
|
|
.........................
|
|
|
|
.. js:function:: addContact
|
|
|
|
:param object args: Dictionary with contact details. Possible keys (name, mobile, phone, fax, email, website, street, street2, country_id, state_id, city, zip, parent_id, function and image)
|
|
|
|
Create a new device contact with the given contact details.
|
|
|
|
.. code-block:: javascript
|
|
|
|
var contact = {
|
|
'name': 'Michel Fletcher',
|
|
'mobile': '9999999999',
|
|
'phone': '7954856587',
|
|
'fax': '765898745',
|
|
'email': 'michel.fletcher@agrolait.example.com',
|
|
'website': 'http://www.agrolait.com',
|
|
'street': '69 rue de Namur',
|
|
'street2': false,
|
|
'country_id': [21, 'Belgium'],
|
|
'state_id': false,
|
|
'city': 'Wavre',
|
|
'zip': '1300',
|
|
'parent_id': [8, 'Agrolait'],
|
|
'function': 'Analyst',
|
|
'image': '<<BASE 64 Image Data>>'
|
|
}
|
|
|
|
mobile.methods.addContact(contact);
|
|
|
|
.. image:: mobile/mobile_contact_create.png
|
|
|
|
Scanning barcodes
|
|
..................
|
|
|
|
.. js:function:: scanBarcode
|
|
|
|
:returns: Scanned ``code`` from any barcode
|
|
|
|
The barcode API detects barcodes in real-time, on the device, in any orientation.
|
|
|
|
The barcode API can read the following barcode formats:
|
|
|
|
* 1D barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar
|
|
* 2D barcodes: QR Code, Data Matrix, PDF-417, AZTEC
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.methods.scanBarcode().then(function(code){
|
|
if(code){
|
|
// Perform operation with the scanned code
|
|
}
|
|
});
|
|
|
|
Switching account in device
|
|
...........................
|
|
|
|
.. js:function:: switchAccount
|
|
|
|
Use switchAccount to switch from one account to another on the device.
|
|
|
|
.. code-block:: javascript
|
|
|
|
mobile.methods.switchAccount();
|
|
|
|
.. image:: mobile/mobile_switch_account.png
|