Distincion Dispositivo Browser
De MorfeoWiki
Tabla de contenidos |
[editar]
Tareas
- Resolver que capacidades son inherentes del dispositivo y cuales del browser.
- Ejemplo: rows para dispositivo y javascript_support para browser. Esto es evidente, lo que no es tanto es el soporte de jpg ó gif por ejemplo . Lo soporta el dispositivo o implementa el browser esos formatos??
- Dar de alta en el wurfl_patch
- generic_mobile_browser (hacer que el operamini herede de este y éste a su vez del generic).
- Los temas de Pocket PC iemobile esta entremezclado dispositivo browser.
- Minimo devuelve el user agent del dispositivo donde esta instalado :(
- El NetFront ocurre algo peor aún, lo detecta como el dispositivo , el cual al final hereda del netfront y finalmente éste a su vez de generic_web_browser
- Obtener dispositivo donde esta instalado el browser.
- Para OperaMini es facil, se mira en el HTTP Header X-OperaMini-Phone-UA
- Minimo imposible devuelve el dispositivo
- Con el NetFront tampoco es necesario porque le detectamos como el dispositivo, por ejemplo: <device user_agent="SAMSUNG-SGH-E770" actual_device_root="true" fall_back="netfront_ver3" id="samsung_e770_ver1">
- Y las PocketPC idem de lienzo, dijimos que las dejariamos tal cual están. Porque están entremezclado browser-dispositivo.
- Implementación
- El DeviceManager reconoce el dispositivo que realiza la request. Este instancia un objecto Device, el cual se corresponde o bien con el dispositivo en concreto o con el browser, ejemplo caso del OperaMini.
- Si este Device se corresponde con un dispositivo, tema resuelto, como hasta ahora.
- Por el contrario si este objeto se corresponde con un browser , se necesita conocer el user_agent o id del dispositivo donde esta instalado el navegador. Para ello cada caso será una historia, como sabemos para el OperaMini es mirando un cabecera,etc.
- [NO] La solución que propongo sería tener un miembro con un identificador de dispositivo, este sera null si el Device instanciado es un dispositivo o será seteado con el identificador del dispositivo donde este instalado si es un Browser. Así, para el caso del OperaMini por ejemplo, el Device instanciado tendra el id del dispositivo donde este instalado, y cuando le vayamos a preguntar sobre una capacidad al objecto Device en contexto, este sabrá resolver si esa capacidad es inherente al navegador o al dispositivo. En código el DeviceImpl cuando le preguntas por una capacidad delega al DeviceManager.getCapability("capacidad","idDisposivo"); Antes el idDisposivo era un getId(), pero ahora aquí le pasamos o bien el id del browser o del dispositivo donde este instalado según convenga. Si este último es null se hará como siempre, ya que el Device de contexto se corresponderá con un dispositivo y no con un navegador.
- [SI] Otra solución más intuitiva sería que si el objeto Device que detecta el DevMgt es un browser darle el cambiazo a sus capacidades inherentes de dispositivo y listo. Es decir, detecto que es un OperaMini, pues cuando se crea el Device del OperaMini meto al rows la filas del dispositivo donde esta instalado por ejemplo, asi cuando hagamos el getCapability al Device de contexto ya estaran los valores de las capacidades seteados correctamente y no habra que andar haciendo comprobaciones si la capacidad sobre la que nos preguntan es del navegador o del dispositivo. Me gusta mas esta forma , a ti?
[editar]
¿Cómo saber si estamos ante un dispositivo o browser?
- Pseudocapacidad: device_description_type. Valores: browser, device y device_and_browser. Esta capacidad pertenecerá al grupo: 'metadata'.
[editar]
Capacidades inherentes de dispositivo
- Group product_info
- Group display: resolution_width, resolution_height, columns, rows, max_image_width y max_image_height.
- Adoptamos browser se extiende toda la resolución del dispositivo.
- Group image_format
- Adoptamos que si un dispositivo dice que no soporta un determinado tipo de formato de imagen y el browser si la soporta, tomamos el valor de dicha capacidad anunciada por el dispositivo.
[editar]
