SlideShare a Scribd company logo
Real Life 
Oracle Mobile Application Framework 
Things that you don't get from the developer guide 
Oracle Open World, San Francisco, September 28th 2014
Who Am I 
• Luc Bors 
• Principal Consultant 
• AMIS, Netherlands 
• Friends of Oracle & Java 
• Oracle Partner 
• Oracle Specialized Partner of 
the year 2014 
Middleware - EMEA
Before we start 
• Let’s look at some basic terms related to MAF and Mobile 
– Springboard 
– Gestures 
– Feature 
– Push Notifications
MAF Architecture Overview 
Device 
Native 
Container 
SQLite 
Database 
Java 
VM 
Configuration 
Server 
Business 
Logic 
Model 
JDBC 
Apache 
Cordova 
SQLite 
Web 
View 
Server 
HTML 
HTML5 
and 
Javascript 
Presentation 
AMX 
View 
Local 
HTML 
Controller 
Push 
Handler 
Server 
Generated 
HTML 
APN/GCM 
Push 
Services 
SOAP 
and 
REST 
Services 
Device 
Services 
App 
Config 
Credential 
Management 
SSO 
and 
Access 
Control
Todays Topics 
• Navigation and Application Control 
• Device Interaction 
• Gestures 
• Push Notifications
Springboard & navigationbar 
• Springboard configuration in maf-application.xml
The Default Springboard
The Custom SpringBoard
Springboard Toggle 
• Default button on bottom left 
• Custom button such as Top Right 
• Create this yourself 
• Note: No show / hide available 
• Note: No “isSpringboard” visible property available. 
• You need to create this yourself 
<amx:commandLink 
actionListener="#{bindings.gotoSpringboard.execute}" 
id="cl1” styleClass="custom-springboard-link”> 
<amx:image inlineStyle="width:30px;height:30px” 
source="/images/springboard.png" id="i1"/> 
</amx:commandLink>
Feature Archives 
• Feature Archives can be reused 
• Deploy MAF app as FAR 
• Add to ‘Consumer’ 
• Use features from FAR in other apps
Features 
can 
be 
taskflows 
• Can contain multiple activities 
• Navigation between activities is 
possible 
• Information exchange is possible
List to Detail 
• Navigate from List to Detail 
• If List and Detail use the same iterator, correct details will show up 
automatically 
List View 
1 Name….. 
2 Name….. 
3 Name….. 
4 Name….. 
Detail View 
#3. 
Name 
State 
Country 
Example: If you select List item #3, 
and that will become the current item 
in the iterator the list is based on.
Navigation 
• Declarative Navigation 
– Button/Link/ListItem 
<amx:listItem id="li1" action="detail" showLinkIcon="true” 
selectedRowKeys="#{Collection.collectionModel.selectedRow}”" 
selectionListener="#{Collection.collectionModel.makeCurrent}"" 
…." 
…" 
>"
List to Detail (+) 
• What if you don’t want to GET all detail data for every List item ? 
• Simply use an (extra) service call to get the detail Data 
Service 
call 
List View 
1 Name….. 
2 Name….. 
3 Name….. 
4 Name….. 
Detail View 
#3. 
Name 
State 
Country 
Image: 
Example: If you select List item #3, and that will become 
the current item in the iterator the list is based on. You can 
use the Identifier of that list item to call the service
Navigation 
• Declarative Navigation 
– Button/Link/ListItem 
<amx:listItem id="li1" action="detail" showLinkIcon="true">" 
<amx:setPropertyListener id="x" from="#{row.rowKey}” 
to="#{pageFlowScope.myBean.currentStadium}" " 
type="action"/>"
Programmatic Navigation 
• Programmatic Navigation 
– JavaCode 
AdfmfContainerUtilities.invokeContainerJavaScriptFunction(" 
AdfmfJavaUtilities.getFeatureName(), " 
"adf.mf.api.amx.doNavigation", " 
new Object[] { ”detail" }); 
} "
Programmatic Navigation 
• Drawback 
– No access to setPropertyListener 
• Solution if you need that functionality: 
– Set the value in java Code 
ValueExpression ve =" 
AdfmfJavaUtilities.getValueExpression(" 
"#{pageFlowScope.myBean.currentStadium}”" 
, String.class);" 
" 
ve.setValue(AdfmfJavaUtilities.getAdfELContext()" 
, getCurrentStadium());"
Todays Topics 
• Navigation and Application Control 
• Device Interaction 
• Gestures 
• Push Notifications
All day example 
• Twitter or Whatsapp and images 
• What if you embed an image in a message ? 
• Two options: 
• Use exisiting image from gallery or 
• Create a new one with camera. 
• Where is the catch ?
Device Interaction (Declarative) 
• The Device Datacontrol 
• Drag n Drop support 
• Attributes as fields 
• Operations as buttons
Camera interaction (from Java) 
• Take a picture …………… 
import oracle.adf.model.datacontrols.device; 
DeviceManagerFactory.getDeviceManager().getPicture( 
100, 
DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI, 
DeviceManager.CAMERA_SOURCETYPE_CAMERA, false, 
DeviceManager.CAMERA_ENCODINGTYPE_PNG, 
200, 
200); 
• …… or get one from the Library 
DeviceManager.CAMERA_SOURCETYPE_PHOTOLIBRARY
Smart Camera Interaction 
• Or how to prevent your app from crashing … 
• DESTINATIONTYPE_DATA_URL you will get the image as base64 encoded 
string 
• Camera’s are very good and picture quality is amazing. 
– Encoding such images as base64 causes memory issues 
• Don’t blow up your app. 
– iOS you should set quality parameter to a value less then 50 to avoid memory 
issues 
– On Android out-of-memory can be caused with default image settings. Make 
image smaller by setting targetWidth and targetHeight 
• Small sized images can be uploaded using web services.
Even smarter… 
• Determine network connection 
#{hardware.networkStatus} 
Combined with 
#{device.os} 
To tweak size and quality parameters based on connectivity 
• Always be aware of the other side….. 
– Does the recipient have the same Connectivity….
Todays Topics 
• Navigation and Application Control 
• Device Interaction 
• Gestures 
• Push Notifications
Gestures ( and UX ) 
• Gestures can be 
used from: 
– Buttons 
– Links 
– List Item 
<amx:showPopupBehavior popupid="pop1" 
type="tapHold“ />
Gesture Abuse 
• .. Or how to confuse your app user… 
<amx:showPopupBehavior popupid="pop1" 
type=”swipeLeft“ /> 
<amx:actionListener binding="#{mybean.deleteRow}" 
type=”swipeDown"/>
What Apple did (iOS6 à iOS7) 
• They changed delete swipe from right to left……. 
• I rest my case…… 
• Make sure to be aware 
of the right standard: 
– For Device 
– For OS 
– For version
This is helpfull
Use case example
Ingredients 
• A (Web) service and datacontrol 
• A Page with Listview 
• An ActionListener with type 
SwipeDown 
• Smart Java Code to call service 
(conditionally) 
<amx:listView var="row”" 
value="#{bindings.allLocations.collectionModel}" " 
fetchSize="#{bindings.allLocations.rangeSize}”" 
id="lv1"> " 
<amx:listItem id="li1"> " 
<amx:actionListener type="swipeDown” " 
binding="#{pageFlowScope.locationsBackingBean.checkForUpdates}”>" 
"
Example
Todays Topics 
• Navigation and Application Control 
• Device Interaction 
• Gestures 
• Push Notifications
Push Notifications 
• Subscribe to GCM 
• Receive token 
• Register with Enterprise app 
• Enterprise app Pushes message to 
GCM 
• GCM delegates message to 
device(s)
Working with Payload 
• “Pusher” knows the mobile app 
• “Pusher” knows how app can respond 
• App knows “ Pusher” 
• App knows what to expect from “Pusher” 
• “Pusher” pushes info to determine the Feature and optionally a Key 
• App Navigates to correct Feature based on this information and calls 
Service with the key to fetch information
Server side message 
• Example: 
private Message createMessage(String msg) { 
String sound = "default"; 
Message message = 
new Message.Builder() 
.delayWhileIdle(true) 
.addData("alert", msg) 
.addData("sound",sound) 
.addData("FeatureName", "Sessions") 
.addData("SessionId", "12") 
.build(); 
return message; 
}
In the MAF App 
onMessage Deserialize 
Payload 
PushNotification Listener 
Call Feature
When Notified (onMessage) 
• Application Push Notification Listener 
• onMessage(Event event) 
• Deserialize Payload and work with it 
PayloadServiceResponse serviceResponse = 
(PayloadServiceResponse)jsonHelper.fromJSON( 
PayloadServiceResponse.class, event.getPayload()); 
ValueExpression notificationPayloadBinding = 
AdfmfJavaUtilities.getValueExpression( 
"#{applicationScope.notificationSessionId}", String.class); 
notificationPayloadBinding.setValue( 
AdfmfJavaUtilities.getAdfELContext(), 
serviceResponse.getSessionId()); 
ValueExpression ve = 
AdfmfJavaUtilities.getValueExpression( 
"#{applicationScope.notified}", Boolean.class); 
ve.setValue(AdfmfJavaUtilities.getAdfELContext(), Boolean.TRUE);
…. Finally … 
• Change badge and go to the Feature. 
// also, lets decrease the application icon badge by one 
int currentBadge = 
AdfmfContainerUtilities.getApplicationIconBadgeNumber(); 
if (currentBadge > 0) { 
AdfmfContainerUtilities.setApplicationIconBadgeNumber( 
currentBadge - 1); 
} 
AdfmfContainerUtilities.gotoFeature( 
"com.tamcapp.mobilebook.ses.ConferenceSessions");
In the MAF Feature 
FeatureLifeCycle Listener 
onActivate() 
Do 
Something 
Navigate
In the Feature 
• Feature LifeCycle Listener 
– In the onActivate() method respond to notification 
if(notified.booleanValue()){ 
AdfmfContainerUtilities.invokeContainerJavaScriptFunction( 
AdfmfJavaUtilities.getFeatureName() 
,"adf.mf.api.amx.doNavigation” 
,new Object[] { "featureActivated" }); 
}
The taskflow behind the scenes 
• Wildcard activity 
– featureActivated 
• To Router 
– Determine if Notified 
– If so, handle the Notification 
• HandleNotification 
– Call Service to get info, or do 
whatever is needed to handle the 
notification
Summary 
• Don’t take anything for granted 
• Start simple, renew fast. 
• (Re-) Consider default behavior 
• Users First !!!! 
• Think about proper Use cases for every thing you do 
• Use the wiki: 
– https://wikis.oracle.com/display/ADFMobileDesign/Home 
• Tip: Read a good MAF book and go to many session during #oow14
Book launch 
ISBN no’s: 0071830855 / 9780071830850 
Regular price: $60 
Oracle OpenWorld Bookstore: 
Moscone South, Upper Lobby. 
20% discount for OOW visitors 
Meet the author: 
Meet me in the Oracle 
OpenWorld bookstore on 
Monday from 1 to 1:30 
p.m.
More mobile at OOW14 
• Monday 
• Tuesday
More mobile at OOW14 
• Wednesday
More mobile at OOW14 
• Thursday 
• Don’t miss the HOL
Luc Bors, AMIS, The Netherlands 
Luc.Bors@amis.nl 
LucBors@gmail.com 
Follow me on : @lucb_

More Related Content

What's hot

Scaling with Automation
Scaling with AutomationScaling with Automation
Scaling with Automation
Uchit Vyas ☁
 
React native introduction
React native introductionReact native introduction
React native introduction
InnerFood
 
React Native: Introduction
React Native: IntroductionReact Native: Introduction
React Native: Introduction
InnerFood
 
StrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & CustomizationStrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & Customization
jguerrero999
 
Salesforce Lightning Tips & Tricks
Salesforce Lightning Tips & Tricks Salesforce Lightning Tips & Tricks
Salesforce Lightning Tips & Tricks
Thinqloud
 
Serverless Apps with AWS Step Functions
Serverless Apps with AWS Step FunctionsServerless Apps with AWS Step Functions
Serverless Apps with AWS Step Functions
Amanda Mackay (she/her)
 
Supercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence EditorSupercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence Editor
Atlassian
 
Sling Models Overview
Sling Models OverviewSling Models Overview
Sling Models Overview
Justin Edelson
 
Effectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby ConfEffectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby Conf
neal_kemp
 
"Design First" APIs with Swagger
"Design First" APIs with Swagger"Design First" APIs with Swagger
"Design First" APIs with Swagger
scolestock
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth
Peter Friese
 
Session 210 _accessibility_for_ios
Session 210 _accessibility_for_iosSession 210 _accessibility_for_ios
Session 210 _accessibility_for_ioscheinyeanlim
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
Peter Friese
 
Lecture 11. Microsoft mobile services
Lecture 11. Microsoft mobile servicesLecture 11. Microsoft mobile services
Lecture 11. Microsoft mobile services
Maksym Davydov
 
Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 seriesopenbala
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
Antonio Peric-Mazar
 
Authenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIsAuthenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIs
Jimmy Guerrero
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
Michael Peacock
 
Creating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure FunctionsCreating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure Functions
Murray Fife
 

What's hot (20)

Scaling with Automation
Scaling with AutomationScaling with Automation
Scaling with Automation
 
React native introduction
React native introductionReact native introduction
React native introduction
 
React Native: Introduction
React Native: IntroductionReact Native: Introduction
React Native: Introduction
 
StrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & CustomizationStrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & Customization
 
Salesforce Lightning Tips & Tricks
Salesforce Lightning Tips & Tricks Salesforce Lightning Tips & Tricks
Salesforce Lightning Tips & Tricks
 
Serverless Apps with AWS Step Functions
Serverless Apps with AWS Step FunctionsServerless Apps with AWS Step Functions
Serverless Apps with AWS Step Functions
 
Supercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence EditorSupercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence Editor
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Sling Models Overview
Sling Models OverviewSling Models Overview
Sling Models Overview
 
Effectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby ConfEffectively Testing Services - Burlington Ruby Conf
Effectively Testing Services - Burlington Ruby Conf
 
"Design First" APIs with Swagger
"Design First" APIs with Swagger"Design First" APIs with Swagger
"Design First" APIs with Swagger
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth
 
Session 210 _accessibility_for_ios
Session 210 _accessibility_for_iosSession 210 _accessibility_for_ios
Session 210 _accessibility_for_ios
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
Lecture 11. Microsoft mobile services
Lecture 11. Microsoft mobile servicesLecture 11. Microsoft mobile services
Lecture 11. Microsoft mobile services
 
Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 series
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
Authenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIsAuthenticating and Securing Node.js APIs
Authenticating and Securing Node.js APIs
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
 
Creating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure FunctionsCreating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure Functions
 

Similar to Oracle MAF real life OOW.pptx

ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc BorsADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
Getting value from IoT, Integration and Data Analytics
 
ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
Luc Bors
 
Windows Phone 8 - 3 Building WP8 Applications
Windows Phone 8 - 3 Building WP8 ApplicationsWindows Phone 8 - 3 Building WP8 Applications
Windows Phone 8 - 3 Building WP8 ApplicationsOliver Scheer
 
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
ILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterpriseILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterprise
René Winkelmeyer
 
Developing maintainable Cordova applications
Developing maintainable Cordova applicationsDeveloping maintainable Cordova applications
Developing maintainable Cordova applications
Ivano Malavolta
 
Practical Dynamic Actions - Intro
Practical Dynamic Actions - IntroPractical Dynamic Actions - Intro
Practical Dynamic Actions - Intro
Jorge Rimblas
 
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
Getting value from IoT, Integration and Data Analytics
 
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
Luc Bors
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
jimmyatmedium
 
Leture5 exercise onactivities
Leture5 exercise onactivitiesLeture5 exercise onactivities
Leture5 exercise onactivities
maamir farooq
 
Lecture exercise on activities
Lecture exercise on activitiesLecture exercise on activities
Lecture exercise on activities
maamir farooq
 
The Magic of WPF & MVVM
The Magic of WPF & MVVMThe Magic of WPF & MVVM
The Magic of WPF & MVVM
Abhishek Sur
 
XPages Mobile, #dd13
XPages Mobile, #dd13XPages Mobile, #dd13
ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017
Lucas Jellema
 
Silverlight week2
Silverlight week2Silverlight week2
Silverlight week2iedotnetug
 
Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android Development
Reto Meier
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScript
franksvalli
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
fpatton
 

Similar to Oracle MAF real life OOW.pptx (20)

ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc BorsADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
 
ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
 
Windows Phone 8 - 3 Building WP8 Applications
Windows Phone 8 - 3 Building WP8 ApplicationsWindows Phone 8 - 3 Building WP8 Applications
Windows Phone 8 - 3 Building WP8 Applications
 
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
ILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterpriseILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterprise
 
Developing maintainable Cordova applications
Developing maintainable Cordova applicationsDeveloping maintainable Cordova applications
Developing maintainable Cordova applications
 
Practical Dynamic Actions - Intro
Practical Dynamic Actions - IntroPractical Dynamic Actions - Intro
Practical Dynamic Actions - Intro
 
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
ADF Mobile: Best Practices for Developing Applications with Oracle ADF Mobile...
 
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
 
Leture5 exercise onactivities
Leture5 exercise onactivitiesLeture5 exercise onactivities
Leture5 exercise onactivities
 
Lecture exercise on activities
Lecture exercise on activitiesLecture exercise on activities
Lecture exercise on activities
 
The Magic of WPF & MVVM
The Magic of WPF & MVVMThe Magic of WPF & MVVM
The Magic of WPF & MVVM
 
XPages Mobile, #dd13
XPages Mobile, #dd13XPages Mobile, #dd13
XPages Mobile, #dd13
 
ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017ADF and JavaScript - AMIS SIG, July 2017
ADF and JavaScript - AMIS SIG, July 2017
 
Silverlight week2
Silverlight week2Silverlight week2
Silverlight week2
 
Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android Development
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScript
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 

More from Luc Bors

Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular Chatbot
Luc Bors
 
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development KitExtending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Luc Bors
 
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud ServiceNO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
Luc Bors
 
Real life-maf-2015-k scope-final
Real life-maf-2015-k scope-finalReal life-maf-2015-k scope-final
Real life-maf-2015-k scope-final
Luc Bors
 
ADF Essentials (KScope14)
ADF Essentials (KScope14)ADF Essentials (KScope14)
ADF Essentials (KScope14)
Luc Bors
 
OgH Data Visualization Special Part III
OgH Data Visualization Special Part IIIOgH Data Visualization Special Part III
OgH Data Visualization Special Part III
Luc Bors
 
OgH Data Visualization Special Part II
OgH Data Visualization Special Part IIOgH Data Visualization Special Part II
OgH Data Visualization Special Part II
Luc Bors
 
OgH Data Visualization Special Part I
OgH Data Visualization Special Part IOgH Data Visualization Special Part I
OgH Data Visualization Special Part I
Luc Bors
 
Doag wysiwyg
Doag wysiwygDoag wysiwyg
Doag wysiwyg
Luc Bors
 
Oracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-caseOracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-case
Luc Bors
 
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
Luc Bors
 
oow2013-adf-mo-bi-le
oow2013-adf-mo-bi-leoow2013-adf-mo-bi-le
oow2013-adf-mo-bi-le
Luc Bors
 
Goodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating LayoutsGoodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating Layouts
Luc Bors
 
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADFDont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Luc Bors
 
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Luc Bors
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
Luc Bors
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
Luc Bors
 
An ADF Special Report
An ADF Special Report An ADF Special Report
An ADF Special Report
Luc Bors
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappearedLuc Bors
 
Odtug2011 adf developers make the database work for you
Odtug2011 adf developers make the database work for youOdtug2011 adf developers make the database work for you
Odtug2011 adf developers make the database work for youLuc Bors
 

More from Luc Bors (20)

Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular Chatbot
 
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development KitExtending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
 
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud ServiceNO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
 
Real life-maf-2015-k scope-final
Real life-maf-2015-k scope-finalReal life-maf-2015-k scope-final
Real life-maf-2015-k scope-final
 
ADF Essentials (KScope14)
ADF Essentials (KScope14)ADF Essentials (KScope14)
ADF Essentials (KScope14)
 
OgH Data Visualization Special Part III
OgH Data Visualization Special Part IIIOgH Data Visualization Special Part III
OgH Data Visualization Special Part III
 
OgH Data Visualization Special Part II
OgH Data Visualization Special Part IIOgH Data Visualization Special Part II
OgH Data Visualization Special Part II
 
OgH Data Visualization Special Part I
OgH Data Visualization Special Part IOgH Data Visualization Special Part I
OgH Data Visualization Special Part I
 
Doag wysiwyg
Doag wysiwygDoag wysiwyg
Doag wysiwyg
 
Oracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-caseOracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-case
 
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
 
oow2013-adf-mo-bi-le
oow2013-adf-mo-bi-leoow2013-adf-mo-bi-le
oow2013-adf-mo-bi-le
 
Goodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating LayoutsGoodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating Layouts
 
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADFDont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
 
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
 
An ADF Special Report
An ADF Special Report An ADF Special Report
An ADF Special Report
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappeared
 
Odtug2011 adf developers make the database work for you
Odtug2011 adf developers make the database work for youOdtug2011 adf developers make the database work for you
Odtug2011 adf developers make the database work for you
 

Recently uploaded

From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 

Recently uploaded (20)

From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 

Oracle MAF real life OOW.pptx

  • 1. Real Life Oracle Mobile Application Framework Things that you don't get from the developer guide Oracle Open World, San Francisco, September 28th 2014
  • 2. Who Am I • Luc Bors • Principal Consultant • AMIS, Netherlands • Friends of Oracle & Java • Oracle Partner • Oracle Specialized Partner of the year 2014 Middleware - EMEA
  • 3. Before we start • Let’s look at some basic terms related to MAF and Mobile – Springboard – Gestures – Feature – Push Notifications
  • 4. MAF Architecture Overview Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  • 5. Todays Topics • Navigation and Application Control • Device Interaction • Gestures • Push Notifications
  • 6. Springboard & navigationbar • Springboard configuration in maf-application.xml
  • 9. Springboard Toggle • Default button on bottom left • Custom button such as Top Right • Create this yourself • Note: No show / hide available • Note: No “isSpringboard” visible property available. • You need to create this yourself <amx:commandLink actionListener="#{bindings.gotoSpringboard.execute}" id="cl1” styleClass="custom-springboard-link”> <amx:image inlineStyle="width:30px;height:30px” source="/images/springboard.png" id="i1"/> </amx:commandLink>
  • 10. Feature Archives • Feature Archives can be reused • Deploy MAF app as FAR • Add to ‘Consumer’ • Use features from FAR in other apps
  • 11. Features can be taskflows • Can contain multiple activities • Navigation between activities is possible • Information exchange is possible
  • 12. List to Detail • Navigate from List to Detail • If List and Detail use the same iterator, correct details will show up automatically List View 1 Name….. 2 Name….. 3 Name….. 4 Name….. Detail View #3. Name State Country Example: If you select List item #3, and that will become the current item in the iterator the list is based on.
  • 13. Navigation • Declarative Navigation – Button/Link/ListItem <amx:listItem id="li1" action="detail" showLinkIcon="true” selectedRowKeys="#{Collection.collectionModel.selectedRow}”" selectionListener="#{Collection.collectionModel.makeCurrent}"" …." …" >"
  • 14. List to Detail (+) • What if you don’t want to GET all detail data for every List item ? • Simply use an (extra) service call to get the detail Data Service call List View 1 Name….. 2 Name….. 3 Name….. 4 Name….. Detail View #3. Name State Country Image: Example: If you select List item #3, and that will become the current item in the iterator the list is based on. You can use the Identifier of that list item to call the service
  • 15. Navigation • Declarative Navigation – Button/Link/ListItem <amx:listItem id="li1" action="detail" showLinkIcon="true">" <amx:setPropertyListener id="x" from="#{row.rowKey}” to="#{pageFlowScope.myBean.currentStadium}" " type="action"/>"
  • 16. Programmatic Navigation • Programmatic Navigation – JavaCode AdfmfContainerUtilities.invokeContainerJavaScriptFunction(" AdfmfJavaUtilities.getFeatureName(), " "adf.mf.api.amx.doNavigation", " new Object[] { ”detail" }); } "
  • 17. Programmatic Navigation • Drawback – No access to setPropertyListener • Solution if you need that functionality: – Set the value in java Code ValueExpression ve =" AdfmfJavaUtilities.getValueExpression(" "#{pageFlowScope.myBean.currentStadium}”" , String.class);" " ve.setValue(AdfmfJavaUtilities.getAdfELContext()" , getCurrentStadium());"
  • 18. Todays Topics • Navigation and Application Control • Device Interaction • Gestures • Push Notifications
  • 19. All day example • Twitter or Whatsapp and images • What if you embed an image in a message ? • Two options: • Use exisiting image from gallery or • Create a new one with camera. • Where is the catch ?
  • 20. Device Interaction (Declarative) • The Device Datacontrol • Drag n Drop support • Attributes as fields • Operations as buttons
  • 21. Camera interaction (from Java) • Take a picture …………… import oracle.adf.model.datacontrols.device; DeviceManagerFactory.getDeviceManager().getPicture( 100, DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI, DeviceManager.CAMERA_SOURCETYPE_CAMERA, false, DeviceManager.CAMERA_ENCODINGTYPE_PNG, 200, 200); • …… or get one from the Library DeviceManager.CAMERA_SOURCETYPE_PHOTOLIBRARY
  • 22. Smart Camera Interaction • Or how to prevent your app from crashing … • DESTINATIONTYPE_DATA_URL you will get the image as base64 encoded string • Camera’s are very good and picture quality is amazing. – Encoding such images as base64 causes memory issues • Don’t blow up your app. – iOS you should set quality parameter to a value less then 50 to avoid memory issues – On Android out-of-memory can be caused with default image settings. Make image smaller by setting targetWidth and targetHeight • Small sized images can be uploaded using web services.
  • 23. Even smarter… • Determine network connection #{hardware.networkStatus} Combined with #{device.os} To tweak size and quality parameters based on connectivity • Always be aware of the other side….. – Does the recipient have the same Connectivity….
  • 24. Todays Topics • Navigation and Application Control • Device Interaction • Gestures • Push Notifications
  • 25. Gestures ( and UX ) • Gestures can be used from: – Buttons – Links – List Item <amx:showPopupBehavior popupid="pop1" type="tapHold“ />
  • 26. Gesture Abuse • .. Or how to confuse your app user… <amx:showPopupBehavior popupid="pop1" type=”swipeLeft“ /> <amx:actionListener binding="#{mybean.deleteRow}" type=”swipeDown"/>
  • 27. What Apple did (iOS6 à iOS7) • They changed delete swipe from right to left……. • I rest my case…… • Make sure to be aware of the right standard: – For Device – For OS – For version
  • 30. Ingredients • A (Web) service and datacontrol • A Page with Listview • An ActionListener with type SwipeDown • Smart Java Code to call service (conditionally) <amx:listView var="row”" value="#{bindings.allLocations.collectionModel}" " fetchSize="#{bindings.allLocations.rangeSize}”" id="lv1"> " <amx:listItem id="li1"> " <amx:actionListener type="swipeDown” " binding="#{pageFlowScope.locationsBackingBean.checkForUpdates}”>" "
  • 32. Todays Topics • Navigation and Application Control • Device Interaction • Gestures • Push Notifications
  • 33. Push Notifications • Subscribe to GCM • Receive token • Register with Enterprise app • Enterprise app Pushes message to GCM • GCM delegates message to device(s)
  • 34. Working with Payload • “Pusher” knows the mobile app • “Pusher” knows how app can respond • App knows “ Pusher” • App knows what to expect from “Pusher” • “Pusher” pushes info to determine the Feature and optionally a Key • App Navigates to correct Feature based on this information and calls Service with the key to fetch information
  • 35. Server side message • Example: private Message createMessage(String msg) { String sound = "default"; Message message = new Message.Builder() .delayWhileIdle(true) .addData("alert", msg) .addData("sound",sound) .addData("FeatureName", "Sessions") .addData("SessionId", "12") .build(); return message; }
  • 36. In the MAF App onMessage Deserialize Payload PushNotification Listener Call Feature
  • 37. When Notified (onMessage) • Application Push Notification Listener • onMessage(Event event) • Deserialize Payload and work with it PayloadServiceResponse serviceResponse = (PayloadServiceResponse)jsonHelper.fromJSON( PayloadServiceResponse.class, event.getPayload()); ValueExpression notificationPayloadBinding = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.notificationSessionId}", String.class); notificationPayloadBinding.setValue( AdfmfJavaUtilities.getAdfELContext(), serviceResponse.getSessionId()); ValueExpression ve = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.notified}", Boolean.class); ve.setValue(AdfmfJavaUtilities.getAdfELContext(), Boolean.TRUE);
  • 38. …. Finally … • Change badge and go to the Feature. // also, lets decrease the application icon badge by one int currentBadge = AdfmfContainerUtilities.getApplicationIconBadgeNumber(); if (currentBadge > 0) { AdfmfContainerUtilities.setApplicationIconBadgeNumber( currentBadge - 1); } AdfmfContainerUtilities.gotoFeature( "com.tamcapp.mobilebook.ses.ConferenceSessions");
  • 39. In the MAF Feature FeatureLifeCycle Listener onActivate() Do Something Navigate
  • 40. In the Feature • Feature LifeCycle Listener – In the onActivate() method respond to notification if(notified.booleanValue()){ AdfmfContainerUtilities.invokeContainerJavaScriptFunction( AdfmfJavaUtilities.getFeatureName() ,"adf.mf.api.amx.doNavigation” ,new Object[] { "featureActivated" }); }
  • 41. The taskflow behind the scenes • Wildcard activity – featureActivated • To Router – Determine if Notified – If so, handle the Notification • HandleNotification – Call Service to get info, or do whatever is needed to handle the notification
  • 42. Summary • Don’t take anything for granted • Start simple, renew fast. • (Re-) Consider default behavior • Users First !!!! • Think about proper Use cases for every thing you do • Use the wiki: – https://wikis.oracle.com/display/ADFMobileDesign/Home • Tip: Read a good MAF book and go to many session during #oow14
  • 43. Book launch ISBN no’s: 0071830855 / 9780071830850 Regular price: $60 Oracle OpenWorld Bookstore: Moscone South, Upper Lobby. 20% discount for OOW visitors Meet the author: Meet me in the Oracle OpenWorld bookstore on Monday from 1 to 1:30 p.m.
  • 44. More mobile at OOW14 • Monday • Tuesday
  • 45. More mobile at OOW14 • Wednesday
  • 46. More mobile at OOW14 • Thursday • Don’t miss the HOL
  • 47. Luc Bors, AMIS, The Netherlands Luc.Bors@amis.nl LucBors@gmail.com Follow me on : @lucb_