You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by au...@vectorsoftware.ro on 2009/04/01 09:34:40 UTC

Re: Mobile Agents (Blackberry)

Hi Tadashi,
Thank you for your post . It's very helpful . But I have two 2 questions (I have more , but 2 is enough).
1. What simulators do you use ? I put you this question because I find very hard to use the ones from the blackberry . I read some times ago about an add on for mozilla for changing user-agent . Do you know more about this?
2. How I do tracing of my JSF applications ? I interested more about the 2 jars trinidad-api.jar and trinidad-impl.jar . I love to read logs . There I can see many JSF internals.
I am interested more in charting . This is area where I want to insist .
Of course I want everything you can share with me - documentation,articles,code samples
Thanks again.
Best Regards,
Aurel

--- Original Message ---
> Hi Aurel,
> 
> Trinidad groups BlackBerry devices to two major groups.
> BlackBerry 4.5.x 
> or lower (e.g. Curve and Pearl) or BlackBerry 4.6 (Bold) or
> higher 
> (Storm is 4.7).
> BlackBerry 4.5.x or lower does not support XMLHttpRequest
> (needed to run 
> Ajax) and some capabilities are more restrictive than BlackBerry
> 4.6 or 
> higher. The most significant restriction is the performance.
> Once 
> JavaScript is used on these devices, the page load will take
> much longer 
> and usability suffers from it. Not to mention the transfer
> time to 
> download Trinidad's large JavaScript file. (Though it is cached
> and it 
> is not a problem on subsequent page load, the initial page
> load will 
> give negative user experience.) It was our decision not to use
> 
> JavaScript fir BlackBerry 4.5.x or lower. (see 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#Basic_XHTML_Browser_Support,
> 
> and 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#BlackBerry_4.5_Lower)
> On the other hand, Blackberry 4.6 and higher has better
> performance. It 
> supports XMLHttpRequest. Its JavaScript and DOM support are
> good. So we 
> decided to enable JavaScript and Ajax partial page rendering.
> It is 
> basically as functional as iPhone or even desktop browsers.
> 
> There are some Trinidad renderer logic that is specific to
> BlackBerty in 
> order to supplement lack of JavaScript and CSS implementation
> in the 
> BlackBerry browsers, but they are transparent to the application.
> 
> I have created some sample demo apps to test Trinidad mobile
> support. I 
> did not need to do anything special, except for designing the
> UI to fit 
> in a small screen - that is always the case for mobile UI
> development. 
> There are some techniques/snippets that can be used for mobile
> web page 
> development I can share with you if you are interested.
> 
> Use of skinning for different device types is useful in mobile
> 
> development. See 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#Skinning
> for 
> more info.
> 
> General info is at http://myfaces.apache.org/trinidad/devguide/mobile.html.
> 
> I have developed some sample demo apps. There are some techniques
> that 
> may be useful in mobile application development. Below is an
> example of 
> it. If you are interested, I can share more, but let me know
> if you have 
> specific problem/areas you want to work on.
> 
> Thanks,
> Tadashi
> 
> Note that the table contains 1 column. In the column several
> fields are 
> rendered. This is one of the technique effective on small
> screen.
> 
> <?xml version='1.0' encoding='windows-1252'?>
> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
>           xmlns:f="http://java.sun.com/jsf/core"
>           xmlns:h="http://java.sun.com/jsf/html"
>           xmlns:trh="http://myfaces.apache.org/trinidad/html"
>           xmlns:tr="http://myfaces.apache.org/trinidad">
>   <jsp:output omit-xml-declaration="true" doctype-root-element="HTML"
>               doctype-system="http://www.w3.org/TR/html4/loose.dtd"
>               doctype-public="-//W3C//DTD HTML 4.01
> Transitional//EN"/>
>   <jsp:directive.page contentType="text/html;charset=windows-1252"/>
>   <f:view>
>     <trh:html>
>       <trh:head title="mybank Online">
>         <meta http-equiv="Content-Type"
>               content="text/html; charset=windows-1252"/>
>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
> 'BB4_6Family' ? 
> 'true' : 'false'}">
>             <meta name="viewport" content="width=device-width;
> 
> initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
>         </f:verbatim>
>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
> 'iphoneFamily' 
> ? 'true' : 'false'}">
>             <meta name="viewport" content="width=320;
> initial-scale=1.0; 
> maximum-scale=1.0; user-scalable=0;"/>
>         </f:verbatim>
>       </trh:head>
>       <trh:body>
>         <!--tr:messages/-->
>         <h:form>
>           <tr:image source="/images/mybankbandnarrow.gif"/>
>           <tr:panelHeader styleClass="toolbar" text="Accounts">
>             <tr:commandLink text="Sign Off" styleClass="button"
>                             action="signoff"></tr:commandLink>
>           </tr:panelHeader>
>           <div id="certlist" class="panelBase">
>             <tr:commandButton styleClass="button1" text="Transfer.."
>                               action="transfer"/>
>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                        height="5" width="15"/>
>             <tr:commandButton styleClass="button1" text="Billpay.."
>                               action="billpay"/>
>             
>             <tr:table value="#{bindings.AccountView1.collectionModel}"
>                       styleClass="multirowTable" 
> horizontalGridVisible="false"
>                       var="row" rows="5"
>                       emptyText="#{bindings.AccountView1.viewable
> ? 'No 
> data to display.' : 'Access Denied.'}"
>                       width="100%">
>               <tr:column>
>                 <tr:panelGroupLayout 
> layout="#{AgentUtil.phoneFamilyDebug=='minimalFamily' ?
> 'horizontal' : 
> 'vertical'}"
>                                      styleClass="listing">
>                   <tr:image styleClass="listingImage"
>                             
> source="#{row.bindings.TypeIconUrl.inputValue} != '' ? 
> #{row.bindings.TypeIconUrl.inputValue} : "/>
>                   <tr:commandLink text="#{row.bindings.Name.inputValue}"
>                                   action="detail"
> styleClass="listingLink">
>                     <tr:setActionListener 
> from="#{row.bindings.AccountId.inputValue}"
>                                           to="#{sessionScope.accountId}"/>
>                   </tr:commandLink>
>                   <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                              height="5" width="5"/>
>                   <tr:outputText value="#{row.bindings.Balance.inputValue}"
>                                  styleClass="listingDetails">
>                     <f:converter converterId="Bank10.amountConverter"/>
>                   </tr:outputText>
>                 </tr:panelGroupLayout>
>               </tr:column>
>             </tr:table>
>             <tr:separator/>
>             
>             <tr:commandButton styleClass="button1" text="Find
> ATM"
>                               action="ATM"/>
>             
>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                        height="5" width="15"/>
>             <tr:commandButton styleClass="button1" text="Find
> Branch"
>                               action="branches"/>
>           </div>
>           <tr:image source="/images/mybankbandnarrow.gif"/>
>         </h:form>
>       </trh:body>
>     </trh:html>
>   </f:view>
> </jsp:root>
> 
> AgentUtil.java
> import javax.faces.context.FacesContext;
> import javax.servlet.http.HttpServletRequest;
> 
> public class AgentUtil {
>     private String phoneFamily;
>     private String BLACKBERRY4_2_SKIN  = "BB4_2Family";
>     private String BLACKBERRY4_6_SKIN  = "BB4_6Family";
>     /* We will use common skin for both 4_6 and 4_7
>      */
>     private String BLACKBERRY4_7_SKIN  = "BB4_6Family";
>     private String IPHONE_SKIN         = "iphoneFamily";
>     private String WINDOWS_FAMILY      = "windowsFamily";
>     private String SYMBIAN_SKIN        = "symbianFamily";
>     private String FIREFOX_SKIN        = "firefoxFamily";
>     private String DEFAULT_SKIN        = "minimalFamily";
>     private String phoneFamilyDebug;
>     private boolean narrowScreen;
>     private boolean forceWideScreen = false;
>     private boolean supportsDVT_PNG;
>     private boolean needSpacer;
> 
>     public AgentUtil() {
>         phoneFamily = "";
>         phoneFamily=getPhoneFamily();
>         narrowScreen=getNarrowScreen();
>     }
> 
>     /**
>      * Used for skinning. Can be used in page definition for
>      * agent specific rendering.
>      */
>     public String getPhoneFamily() {
>         if (phoneFamily.isEmpty())
>         {
>             FacesContext fc = FacesContext.getCurrentInstance();
>             HttpServletRequest req =
>                 (HttpServletRequest)fc.getExternalContext().getRequest();
>             String agent = req.getHeader("User-Agent");
>             System.out.println(agent);
>            
>             if (agent != null && agent.indexOf("iPhone") > -1)
> {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("Symbian")
> > -1) {
>                 phoneFamily = SYMBIAN_SKIN;
>             } else if (agent != null && agent.indexOf("iPhone")
> > -1) {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("WebKit")
> > -1) {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry95")
> > 
> -1) {
>                 System.out.println("BlackBerry9x");
>                 phoneFamily = BLACKBERRY4_7_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry90")
> > 
> -1) {
>                 System.out.println("BlackBerry9x");
>                 phoneFamily = BLACKBERRY4_6_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry88")
> > 
> -1) {
>                 phoneFamily = DEFAULT_SKIN;
>                 forceWideScreen = true;
>             } else if (agent != null && agent.indexOf("BlackBerry83")
> > 
> -1) {
>                 phoneFamily = DEFAULT_SKIN;
>                 forceWideScreen = true;
>             } else if (agent != null && agent.indexOf("BlackBerry")
> > -1) {
>                 phoneFamily = DEFAULT_SKIN;
>             } else if (agent != null && agent.indexOf("Windows
> CE") > -1) {
>                 phoneFamily = WINDOWS_FAMILY;
>             } else if (agent != null && agent.indexOf("Firefox")
> > -1) {
>                 phoneFamily = FIREFOX_SKIN;
>             } else {
>                 phoneFamily = DEFAULT_SKIN;
>             }
>         }
>         System.out.println(phoneFamily);
>         return phoneFamily;
>     }
> 
>     public void setPhoneFamily(String phoneFamily) {
>         this.phoneFamily = phoneFamily;
>     }
> 
>     public void setPhoneFamilyDebug(String phoneFamilyDebug)
> {
>         this.phoneFamilyDebug = phoneFamilyDebug;
>     }
> 
>     /**
>      * @return
>      */
>     public String getPhoneFamilyDebug() {
>         String _phoneFamily = getPhoneFamily();
>         if (_phoneFamily.equals(FIREFOX_SKIN) || 
> (_phoneFamily.equals(DEFAULT_SKIN)))
>             return DEFAULT_SKIN;
>         else
>             return _phoneFamily;
>     }
> 
>     public void setNarrowScreen(boolean narrowScreen) {
>         this.narrowScreen = narrowScreen;
>     }
> 
>     public boolean getNarrowScreen() {
>         return (forceWideScreen==false && getPhoneFamily()==DEFAULT_SKIN);
>     }
> 
>     public void setSupportsDVT_PNG(boolean supportsDVT_PNG)
> {
>         this.supportsDVT_PNG = supportsDVT_PNG;
>     }
> 
>     public boolean getSupportsDVT_PNG() {
>         String _phoneFamily = getPhoneFamily();
>         if (_phoneFamily.equals(DEFAULT_SKIN)) {
>             return false;
>             }
>         return true;
>     }
> 
>     public void setNeedSpacer(boolean needSpacer) {
>         this.needSpacer = needSpacer;
>     }
> 
>     public boolean getNeedSpacer()
>     {
>         String _phoneFamily = getPhoneFamily();
> 
>         if ((_phoneFamily.equals(DEFAULT_SKIN)) &&
>                             !this.getNarrowScreen())
>         {
>             return true;
>         }
>         return false;
>     }
> }
> 
> 
> aurel.sandu@vectorsoftware.ro wrote:
> > Hello,
> > I have read about rendering Trinidad apps to blackberry devices. Can you give me some links to read about this (some examples , some fragments code from implementation maybe)?
> > Best regards,
> > Aurel
> >
> >   
> 


Re: Mobile Agents (Blackberry)

Posted by Tadashi Enomori <ta...@oracle.com>.
Hi Aurel,

I use the ones I download from BlackBerry 
(https://www.blackberry.com/Downloads/entry.do?code=060AD92489947D410D897474079C1477). 

Most of them works fine, but you need to run Email and MDS simulators 
4.1.4 (the version is very important) to run later model simulators.
You must go to 
http://na.blackberry.com/eng/developers/browserdev/devtoolsdownloads.jsp 
to find it.
Chart component does not work on BlackBerry.

Thanks,
Tadashi

aurel.sandu@vectorsoftware.ro wrote:
> Hi Tadashi,
> Thank you for your post . It's very helpful . But I have two 2 questions (I have more , but 2 is enough).
> 1. What simulators do you use ? I put you this question because I find very hard to use the ones from the blackberry . I read some times ago about an add on for mozilla for changing user-agent . Do you know more about this?
> 2. How I do tracing of my JSF applications ? I interested more about the 2 jars trinidad-api.jar and trinidad-impl.jar . I love to read logs . There I can see many JSF internals.
> I am interested more in charting . This is area where I want to insist .
> Of course I want everything you can share with me - documentation,articles,code samples
> Thanks again.
> Best Regards,
> Aurel
>
> --- Original Message ---
>   
>> Hi Aurel,
>>
>> Trinidad groups BlackBerry devices to two major groups.
>> BlackBerry 4.5.x 
>> or lower (e.g. Curve and Pearl) or BlackBerry 4.6 (Bold) or
>> higher 
>> (Storm is 4.7).
>> BlackBerry 4.5.x or lower does not support XMLHttpRequest
>> (needed to run 
>> Ajax) and some capabilities are more restrictive than BlackBerry
>> 4.6 or 
>> higher. The most significant restriction is the performance.
>> Once 
>> JavaScript is used on these devices, the page load will take
>> much longer 
>> and usability suffers from it. Not to mention the transfer
>> time to 
>> download Trinidad's large JavaScript file. (Though it is cached
>> and it 
>> is not a problem on subsequent page load, the initial page
>> load will 
>> give negative user experience.) It was our decision not to use
>>
>> JavaScript fir BlackBerry 4.5.x or lower. (see 
>> http://myfaces.apache.org/trinidad/devguide/mobile.html#Basic_XHTML_Browser_Support,
>>
>> and 
>> http://myfaces.apache.org/trinidad/devguide/mobile.html#BlackBerry_4.5_Lower)
>> On the other hand, Blackberry 4.6 and higher has better
>> performance. It 
>> supports XMLHttpRequest. Its JavaScript and DOM support are
>> good. So we 
>> decided to enable JavaScript and Ajax partial page rendering.
>> It is 
>> basically as functional as iPhone or even desktop browsers.
>>
>> There are some Trinidad renderer logic that is specific to
>> BlackBerty in 
>> order to supplement lack of JavaScript and CSS implementation
>> in the 
>> BlackBerry browsers, but they are transparent to the application.
>>
>> I have created some sample demo apps to test Trinidad mobile
>> support. I 
>> did not need to do anything special, except for designing the
>> UI to fit 
>> in a small screen - that is always the case for mobile UI
>> development. 
>> There are some techniques/snippets that can be used for mobile
>> web page 
>> development I can share with you if you are interested.
>>
>> Use of skinning for different device types is useful in mobile
>>
>> development. See 
>> http://myfaces.apache.org/trinidad/devguide/mobile.html#Skinning
>> for 
>> more info.
>>
>> General info is at http://myfaces.apache.org/trinidad/devguide/mobile.html.
>>
>> I have developed some sample demo apps. There are some techniques
>> that 
>> may be useful in mobile application development. Below is an
>> example of 
>> it. If you are interested, I can share more, but let me know
>> if you have 
>> specific problem/areas you want to work on.
>>
>> Thanks,
>> Tadashi
>>
>> Note that the table contains 1 column. In the column several
>> fields are 
>> rendered. This is one of the technique effective on small
>> screen.
>>
>> <?xml version='1.0' encoding='windows-1252'?>
>> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
>>           xmlns:f="http://java.sun.com/jsf/core"
>>           xmlns:h="http://java.sun.com/jsf/html"
>>           xmlns:trh="http://myfaces.apache.org/trinidad/html"
>>           xmlns:tr="http://myfaces.apache.org/trinidad">
>>   <jsp:output omit-xml-declaration="true" doctype-root-element="HTML"
>>               doctype-system="http://www.w3.org/TR/html4/loose.dtd"
>>               doctype-public="-//W3C//DTD HTML 4.01
>> Transitional//EN"/>
>>   <jsp:directive.page contentType="text/html;charset=windows-1252"/>
>>   <f:view>
>>     <trh:html>
>>       <trh:head title="mybank Online">
>>         <meta http-equiv="Content-Type"
>>               content="text/html; charset=windows-1252"/>
>>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
>> 'BB4_6Family' ? 
>> 'true' : 'false'}">
>>             <meta name="viewport" content="width=device-width;
>>
>> initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
>>         </f:verbatim>
>>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
>> 'iphoneFamily' 
>> ? 'true' : 'false'}">
>>             <meta name="viewport" content="width=320;
>> initial-scale=1.0; 
>> maximum-scale=1.0; user-scalable=0;"/>
>>         </f:verbatim>
>>       </trh:head>
>>       <trh:body>
>>         <!--tr:messages/-->
>>         <h:form>
>>           <tr:image source="/images/mybankbandnarrow.gif"/>
>>           <tr:panelHeader styleClass="toolbar" text="Accounts">
>>             <tr:commandLink text="Sign Off" styleClass="button"
>>                             action="signoff"></tr:commandLink>
>>           </tr:panelHeader>
>>           <div id="certlist" class="panelBase">
>>             <tr:commandButton styleClass="button1" text="Transfer.."
>>                               action="transfer"/>
>>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>>                        height="5" width="15"/>
>>             <tr:commandButton styleClass="button1" text="Billpay.."
>>                               action="billpay"/>
>>             
>>             <tr:table value="#{bindings.AccountView1.collectionModel}"
>>                       styleClass="multirowTable" 
>> horizontalGridVisible="false"
>>                       var="row" rows="5"
>>                       emptyText="#{bindings.AccountView1.viewable
>> ? 'No 
>> data to display.' : 'Access Denied.'}"
>>                       width="100%">
>>               <tr:column>
>>                 <tr:panelGroupLayout 
>> layout="#{AgentUtil.phoneFamilyDebug=='minimalFamily' ?
>> 'horizontal' : 
>> 'vertical'}"
>>                                      styleClass="listing">
>>                   <tr:image styleClass="listingImage"
>>                             
>> source="#{row.bindings.TypeIconUrl.inputValue} != '' ? 
>> #{row.bindings.TypeIconUrl.inputValue} : "/>
>>                   <tr:commandLink text="#{row.bindings.Name.inputValue}"
>>                                   action="detail"
>> styleClass="listingLink">
>>                     <tr:setActionListener 
>> from="#{row.bindings.AccountId.inputValue}"
>>                                           to="#{sessionScope.accountId}"/>
>>                   </tr:commandLink>
>>                   <tr:spacer rendered="#{AgentUtil.needSpacer}"
>>                              height="5" width="5"/>
>>                   <tr:outputText value="#{row.bindings.Balance.inputValue}"
>>                                  styleClass="listingDetails">
>>                     <f:converter converterId="Bank10.amountConverter"/>
>>                   </tr:outputText>
>>                 </tr:panelGroupLayout>
>>               </tr:column>
>>             </tr:table>
>>             <tr:separator/>
>>             
>>             <tr:commandButton styleClass="button1" text="Find
>> ATM"
>>                               action="ATM"/>
>>             
>>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>>                        height="5" width="15"/>
>>             <tr:commandButton styleClass="button1" text="Find
>> Branch"
>>                               action="branches"/>
>>           </div>
>>           <tr:image source="/images/mybankbandnarrow.gif"/>
>>         </h:form>
>>       </trh:body>
>>     </trh:html>
>>   </f:view>
>> </jsp:root>
>>
>> AgentUtil.java
>> import javax.faces.context.FacesContext;
>> import javax.servlet.http.HttpServletRequest;
>>
>> public class AgentUtil {
>>     private String phoneFamily;
>>     private String BLACKBERRY4_2_SKIN  = "BB4_2Family";
>>     private String BLACKBERRY4_6_SKIN  = "BB4_6Family";
>>     /* We will use common skin for both 4_6 and 4_7
>>      */
>>     private String BLACKBERRY4_7_SKIN  = "BB4_6Family";
>>     private String IPHONE_SKIN         = "iphoneFamily";
>>     private String WINDOWS_FAMILY      = "windowsFamily";
>>     private String SYMBIAN_SKIN        = "symbianFamily";
>>     private String FIREFOX_SKIN        = "firefoxFamily";
>>     private String DEFAULT_SKIN        = "minimalFamily";
>>     private String phoneFamilyDebug;
>>     private boolean narrowScreen;
>>     private boolean forceWideScreen = false;
>>     private boolean supportsDVT_PNG;
>>     private boolean needSpacer;
>>
>>     public AgentUtil() {
>>         phoneFamily = "";
>>         phoneFamily=getPhoneFamily();
>>         narrowScreen=getNarrowScreen();
>>     }
>>
>>     /**
>>      * Used for skinning. Can be used in page definition for
>>      * agent specific rendering.
>>      */
>>     public String getPhoneFamily() {
>>         if (phoneFamily.isEmpty())
>>         {
>>             FacesContext fc = FacesContext.getCurrentInstance();
>>             HttpServletRequest req =
>>                 (HttpServletRequest)fc.getExternalContext().getRequest();
>>             String agent = req.getHeader("User-Agent");
>>             System.out.println(agent);
>>            
>>             if (agent != null && agent.indexOf("iPhone") > -1)
>> {
>>                 phoneFamily = IPHONE_SKIN;
>>             } else if (agent != null && agent.indexOf("Symbian")
>>     
>>> -1) {
>>>       
>>                 phoneFamily = SYMBIAN_SKIN;
>>             } else if (agent != null && agent.indexOf("iPhone")
>>     
>>> -1) {
>>>       
>>                 phoneFamily = IPHONE_SKIN;
>>             } else if (agent != null && agent.indexOf("WebKit")
>>     
>>> -1) {
>>>       
>>                 phoneFamily = IPHONE_SKIN;
>>             } else if (agent != null && agent.indexOf("BlackBerry95")
>>     
>> -1) {
>>                 System.out.println("BlackBerry9x");
>>                 phoneFamily = BLACKBERRY4_7_SKIN;
>>             } else if (agent != null && agent.indexOf("BlackBerry90")
>>     
>> -1) {
>>                 System.out.println("BlackBerry9x");
>>                 phoneFamily = BLACKBERRY4_6_SKIN;
>>             } else if (agent != null && agent.indexOf("BlackBerry88")
>>     
>> -1) {
>>                 phoneFamily = DEFAULT_SKIN;
>>                 forceWideScreen = true;
>>             } else if (agent != null && agent.indexOf("BlackBerry83")
>>     
>> -1) {
>>                 phoneFamily = DEFAULT_SKIN;
>>                 forceWideScreen = true;
>>             } else if (agent != null && agent.indexOf("BlackBerry")
>>     
>>> -1) {
>>>       
>>                 phoneFamily = DEFAULT_SKIN;
>>             } else if (agent != null && agent.indexOf("Windows
>> CE") > -1) {
>>                 phoneFamily = WINDOWS_FAMILY;
>>             } else if (agent != null && agent.indexOf("Firefox")
>>     
>>> -1) {
>>>       
>>                 phoneFamily = FIREFOX_SKIN;
>>             } else {
>>                 phoneFamily = DEFAULT_SKIN;
>>             }
>>         }
>>         System.out.println(phoneFamily);
>>         return phoneFamily;
>>     }
>>
>>     public void setPhoneFamily(String phoneFamily) {
>>         this.phoneFamily = phoneFamily;
>>     }
>>
>>     public void setPhoneFamilyDebug(String phoneFamilyDebug)
>> {
>>         this.phoneFamilyDebug = phoneFamilyDebug;
>>     }
>>
>>     /**
>>      * @return
>>      */
>>     public String getPhoneFamilyDebug() {
>>         String _phoneFamily = getPhoneFamily();
>>         if (_phoneFamily.equals(FIREFOX_SKIN) || 
>> (_phoneFamily.equals(DEFAULT_SKIN)))
>>             return DEFAULT_SKIN;
>>         else
>>             return _phoneFamily;
>>     }
>>
>>     public void setNarrowScreen(boolean narrowScreen) {
>>         this.narrowScreen = narrowScreen;
>>     }
>>
>>     public boolean getNarrowScreen() {
>>         return (forceWideScreen==false && getPhoneFamily()==DEFAULT_SKIN);
>>     }
>>
>>     public void setSupportsDVT_PNG(boolean supportsDVT_PNG)
>> {
>>         this.supportsDVT_PNG = supportsDVT_PNG;
>>     }
>>
>>     public boolean getSupportsDVT_PNG() {
>>         String _phoneFamily = getPhoneFamily();
>>         if (_phoneFamily.equals(DEFAULT_SKIN)) {
>>             return false;
>>             }
>>         return true;
>>     }
>>
>>     public void setNeedSpacer(boolean needSpacer) {
>>         this.needSpacer = needSpacer;
>>     }
>>
>>     public boolean getNeedSpacer()
>>     {
>>         String _phoneFamily = getPhoneFamily();
>>
>>         if ((_phoneFamily.equals(DEFAULT_SKIN)) &&
>>                             !this.getNarrowScreen())
>>         {
>>             return true;
>>         }
>>         return false;
>>     }
>> }
>>
>>
>> aurel.sandu@vectorsoftware.ro wrote:
>>     
>>> Hello,
>>> I have read about rendering Trinidad apps to blackberry devices. Can you give me some links to read about this (some examples , some fragments code from implementation maybe)?
>>> Best regards,
>>> Aurel
>>>
>>>   
>>>       
>
>