Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

removed wurfl from core project due to license incompatibility

  • Loading branch information...
commit ca81c6c20f1a9e524b0150e14dab20b020676e0b 1 parent abc836b
Keith Donald authored
Showing with 5 additions and 1,879 deletions.
  1. +0 −5 build.gradle
  2. +4 −0 docs/src/info/changelog.txt
  3. +0 −49 docs/src/reference/docbook/device.xml
  4. +0 −48 spring-mobile-device/src/ant/upload-dist.xml
  5. +0 −47 spring-mobile-device/src/assembly/distribution.xml
  6. +1 −3 spring-mobile-device/src/main/java/org/springframework/mobile/device/LiteDeviceResolver.java
  7. +0 −32 spring-mobile-device/src/main/java/org/springframework/mobile/device/config/DeviceNamespaceHandler.java
  8. +0 −47 ...-device/src/main/java/org/springframework/mobile/device/config/WurflDeviceResolverBeanDefinitionParser.java
  9. +0 −4 spring-mobile-device/src/main/java/org/springframework/mobile/device/config/package-info.java
  10. +0 −80 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/WurflDevice.java
  11. +0 −61 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/WurflDeviceResolver.java
  12. +0 −112 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/WurflManagerFactoryBean.java
  13. +0 −5 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/package-info.java
  14. +0 −56 ...ng-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/BufferedHttpServletResponse.java
  15. +0 −110 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/WngView.java
  16. +0 −41 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/WngViewResolver.java
  17. +0 −5 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/package-info.java
  18. BIN  spring-mobile-device/src/main/javadoc/doc-files/th-background.png
  19. +0 −178 spring-mobile-device/src/main/javadoc/spring-javadoc.css
  20. +0 −1  spring-mobile-device/src/main/resources/META-INF/spring.handlers
  21. +0 −1  spring-mobile-device/src/main/resources/META-INF/spring.schemas
  22. +0 −42 spring-mobile-device/src/main/resources/org/springframework/mobile/device/config/spring-mobile-device-1.0.xsd
  23. +0 −25 spring-mobile-device/src/test/java/org/springframework/mobile/device/config/DeviceNamespaceHandlerTest.java
  24. +0 −60 ...g-mobile-device/src/test/java/org/springframework/mobile/device/wurfl/WurflDeviceResolutionServiceTest.java
  25. +0 −25 spring-mobile-device/src/test/java/org/springframework/mobile/device/wurfl/WurflManagerFactoryBeanTest.java
  26. +0 −4 spring-mobile-device/src/test/resources/log4j.xml
  27. +0 −19 spring-mobile-device/src/test/resources/org/springframework/mobile/device/config/device.xml
  28. +0 −13 spring-mobile-device/src/test/resources/org/springframework/mobile/device/wurfl/test-wurfl-patch.xml
  29. +0 −806 spring-mobile-device/src/test/resources/org/springframework/mobile/device/wurfl/test-wurfl.xml
View
5 build.gradle
@@ -125,11 +125,6 @@ project('spring-mobile-device') {
dependencies {
compile "org.springframework:spring-webmvc:$springVersion"
compile ("javax.servlet:servlet-api:2.5") { provided = true }
- compile ("net.sourceforge.wurfl:wurfl:1.2.2") { optional = true }
- compile ("net.sourceforge.wurfl:wng:1.0.1-rc2") {
- optional = true
- exclude group: 'org.slf4j', module: 'jcl-over-slf4j'
- }
}
}
View
4 docs/src/info/changelog.txt
@@ -1,6 +1,10 @@
Spring Mobile Changelog
=======================
+1.0.0.M4 (2011.07.26)
+=======================
+* Split out Spring Mobile's WURFL integration into a separate project licensed under the same terms as the Wurfl Java API (AGPL3)
+
1.0.0.M3 (2011.02.03)
=======================
* Extracted SitePreferenceHandler from SiteSwitcher to allow for standalone site preference management independent of site switcher usage. See SitePreferenceHandlerInterceptor to enable in Spring MVC.
View
49 docs/src/reference/docbook/device.xml
@@ -145,7 +145,6 @@ public class HomeController {
<para>
Spring Mobile ships two distinct DeviceResolver implementations that offer varying levels of resolution capability.
The first, and the default, is a <emphasis>LiteDeviceResolver</emphasis> that detects the presence of a mobile device but does not detect specific capabilities.
- The second is a <emphasis>WurflDeviceResolver</emphasis> that uses the WURFL Java API and device repository to identify a wide range of device capabilities.
</para>
<section id="spring-mobile-device-resolvers-lite">
<title>LiteDeviceResolver</title>
@@ -155,54 +154,6 @@ public class HomeController {
No special configuration is required to enable this resolver, simply configure a default DeviceResolverHandlerInterceptor and it will be enabled for you.
</para>
</section>
- <section id="spring-mobile-device-resolvers-wurfl">
- <title>WurflDeviceResolver</title>
- <para>
- Spring Mobile ships an alternative DeviceResolver implementation that delegates to WURFL.
- WURFL provides a Java API as well as a large database of devices and their capabilities.
- It is useful when you need to know more about the Device that originated the request, such as its specific screen size, manufacturer, model, preferred markup, or other capabilities.
- </para>
- <para>
- To use, first make sure the WURFL Java API is in your classpath:
- <programlisting language="xml"><![CDATA[
-<dependency>
- <groupId>net.sourceforge.wurfl</groupId>
- <artifactId>wurfl</artifactId>
- <version>${net.sourceforge.wurfl-version}</version>
-</dependency>]]>
- </programlisting>
- </para>
- <para>
- Then include the spring-mobile-device XML namespace and use the wurfl-device-resolver tag:
- <programlisting language="xml"><![CDATA[
-<?xml version="1.0" encoding="UTF-8"?>
-<beans:beans xmlns="http://www.springframework.org/schema/mvc"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:device="http://www.springframework.org/schema/mobile/device"
- xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/mobile/device http://www.springframework.org/schema/mobile/device/spring-mobile-device-1.0.xsd">
-
- <interceptors>
- <!-- On pre-handle, use WURFL to detect the device that originated the web request -->
- <beans:bean class="org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor">
- <beans:constructor-arg>
- <!-- Inject a WurflDeviceResolver that populates its device repository from the specified file locations -->
- <device:wurfl-device-resolver root-location="/WEB-INF/wurfl/wurfl-2.0.28.zip" patch-locations="/WEB-INF/wurfl/web_browsers_patch.xml" />
- </beans:constructor-arg>
- </beans:bean>
- </interceptors>
-
-</beans:beans>]]>
- </programlisting>
- </para>
- <para>
- Read more about WURFL at <ulink url="http://wurfl.sourceforge.net">http://wurfl.sourceforge.net</ulink>.
- Checkout the <ulink url="https://github.com/SpringSource/spring-mobile-samples">wurfl-showcase</ulink> for a live demonstration.
- This sample illustrates WURFL-based device detection as well as the use of the WNG tag library to perform multi-serving from common page markup.
- </para>
- </section>
</section>
</section>
View
48 spring-mobile-device/src/ant/upload-dist.xml
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<project name="upload-dist-tasks">
-
-<!-- can be run independent of maven as follows
- - classpath must be uncommented below. when run from maven,
- - the classpath is set up for you
-
-ant -f src/ant/upload-dist.xml \
- -Ddist.id=spring-mobile \
- -Ddist.name='Spring MOBILE' \
- -Ddist.key=MOBILE \
- -Ddist.releaseType=milestone \
- -Ddist.accessKey=<access key> \
- -Ddist.secretKey=<secret key> \
- -Ddist.bucketName=dist.springframework.org \
- -Ddist.fileName=spring-mobile-1.0.0.M1.zip \
- -Ddist.filePath=../../spring-mobile-1.0.0.M1.zip \
- -Ddist.version=1.0.0.M1 \
- upload-dist
--->
-
- <taskdef resource="org/springframework/build/aws/ant/antlib.xml">
- <!-- see comment above
- <classpath>
- <pathelement location="/Users/cbeams/Desktop/org.springframework.build.aws.ant-3.0.5.RELEASE.jar"/>
- <pathelement location="/Users/cbeams/.m2/repository/net/java/dev/jets3t/jets3t/0.7.2/jets3t-0.7.2.jar"/>
- <pathelement location="/Users/cbeams/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/>
- <pathelement location="/Users/cbeams/.m2/repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar"/>
- <pathelement location="/Users/cbeams/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar"/>
- </classpath>
- -->
- </taskdef>
- <target name="upload-dist">
- <checksum file="${dist.filePath}" algorithm="sha1"/>
- <s3 accessKey="${dist.accessKey}" secretKey="${dist.secretKey}">
- <upload bucketName="${dist.bucketName}" file="${dist.filePath}"
- toFile="${dist.releaseType}/${dist.key}/${dist.fileName}" publicRead="true">
- <metadata name="project.name" value="${dist.name}"/>
- <metadata name="release.type" value="${dist.releaseType}"/>
- <metadata name="bundle.version" value="${dist.version}"/>
- <metadata name="package.file.name" value="${dist.fileName}"/>
- </upload>
- <upload bucketName="${dist.bucketName}" file="${dist.filePath}.sha1"
- toFile="${dist.releaseType}/${dist.key}/${dist.fileName}.sha1" publicRead="true">
- </upload>
- </s3>
- </target>
-</project>
View
47 spring-mobile-device/src/assembly/distribution.xml
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<assembly>
- <!-- distribution assembly descriptor. packages up jars, source jars, documentation,
- dependencies and other resources into a single archive suitable for download and
- standalone use.
- see pom.xml 'maven-assembly-plugin' declaration
- see src/main/scripts/build-distribution.sh
- see http://www.sonatype.com/books/mvnref-book/reference/assemblies-set-dist-assemblies.html -->
- <id>distribution</id>
- <formats>
- <format>zip</format>
- </formats>
- <includeBaseDirectory>true</includeBaseDirectory>
- <fileSets>
- <fileSet>
- <!-- adds readme and other textfiles to the root of the distribution archive -->
- <directory>src/main/resources</directory>
- <includes>
- <include>apache-license.txt</include>
- <include>notice.txt</include>
- <include>changelog.txt</include>
- </includes>
- <outputDirectory/>
- <lineEnding>dos</lineEnding>
- </fileSet>
- <fileSet>
- <!-- adds reference manual (html and pdf) to the distribution archive under the
- 'docs/reference' directory
- see pom.xml 'maven-javadoc-plugin' declaration -->
- <directory>target/site/reference</directory>
- <outputDirectory>docs/reference</outputDirectory>
- </fileSet>
- <fileSet>
- <!-- adds javadoc html to the distribution archive under the 'docs/javadoc' directory
- see pom.xml 'maven-javadoc-plugin' declaration -->
- <directory>target/site/apidocs</directory>
- <outputDirectory>docs/javadoc</outputDirectory>
- </fileSet>
- <fileSet>
- <directory>${project.build.directory}</directory>
- <includes>
- <include>*.jar</include>
- </includes>
- <outputDirectory>dist</outputDirectory>
- </fileSet>
- </fileSets>
-</assembly>
View
4 spring-mobile-device/src/main/java/org/springframework/mobile/device/LiteDeviceResolver.java
@@ -22,12 +22,10 @@
import javax.servlet.http.HttpServletRequest;
-import org.springframework.mobile.device.wurfl.WurflDeviceResolver;
-
/**
* A "lightweight" device resolver algorithm based on Wordpress's Mobile pack.
* Detects the presence of a mobile device and works for a large percentage of mobile browsers.
- * Does not perform any device capability mapping, if you need that consider {@link WurflDeviceResolver}.
+ * Does not perform any device capability mapping, if you need that consider WURFL.
*
* The code is based primarily on a list of approximately 90 well-known mobile browser UA string snippets,
* with a couple of special cases for Opera Mini, the W3C default delivery context and certain other Windows browsers.
View
32 ...device/src/main/java/org/springframework/mobile/device/config/DeviceNamespaceHandler.java
@@ -1,32 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.config;
-
-import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
-
-/**
- * Registers bean-definition parsers for the device XML configuration namespace.
- * See org/springframework/mobile/device/config/spring-mobile-device.xsd for the definition of the namespace.
- * @author Keith Donald
- */
-public class DeviceNamespaceHandler extends NamespaceHandlerSupport {
-
- public void init() {
- registerBeanDefinitionParser("wurfl-device-resolver", new WurflDeviceResolverBeanDefinitionParser());
- }
-
-}
-
View
47 ...ava/org/springframework/mobile/device/config/WurflDeviceResolverBeanDefinitionParser.java
@@ -1,47 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.config;
-
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
-import org.springframework.beans.factory.xml.ParserContext;
-import org.springframework.mobile.device.wurfl.WurflDeviceResolver;
-import org.springframework.mobile.device.wurfl.WurflManagerFactoryBean;
-import org.w3c.dom.Element;
-
-class WurflDeviceResolverBeanDefinitionParser extends AbstractBeanDefinitionParser {
-
- protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
- Object source = parserContext.extractSource(element);
- RootBeanDefinition serviceDef = new RootBeanDefinition(WurflDeviceResolver.class);
- serviceDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
- serviceDef.setSource(source);
-
- RootBeanDefinition managerDef = new RootBeanDefinition(WurflManagerFactoryBean.class);
- managerDef.getConstructorArgumentValues().addIndexedArgumentValue(0, element.getAttribute("root-location"));
- if (element.hasAttribute("patch-locations")) {
- managerDef.getPropertyValues().add("patchLocations", element.getAttribute("patch-locations"));
- }
- managerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
- managerDef.setSource(source);
-
- serviceDef.getConstructorArgumentValues().addIndexedArgumentValue(0, managerDef);
- return serviceDef;
- }
-
-}
View
4 ...ng-mobile-device/src/main/java/org/springframework/mobile/device/config/package-info.java
@@ -1,4 +0,0 @@
-/**
- * spring-mobile-device XML configuration namespace definition.
- */
-package org.springframework.mobile.device.config;
View
80 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/WurflDevice.java
@@ -1,80 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl;
-
-import java.util.Map;
-
-import net.sourceforge.wurfl.core.CapabilityNotDefinedException;
-import net.sourceforge.wurfl.core.MarkUp;
-
-import org.springframework.mobile.device.Device;
-
-/**
- * WURFL-based {@link Device} implementation.
- * Also implements net.sourceforge.wurfl.core.Device, exposing the full capabilities of the WURFL API.
- * @author Keith Donald
- */
-public class WurflDevice implements Device, net.sourceforge.wurfl.core.Device {
-
- private final net.sourceforge.wurfl.core.Device device;
-
- public WurflDevice(net.sourceforge.wurfl.core.Device device) {
- this.device = device;
- }
-
- // implementing our Device interface
-
- public boolean isMobile() {
- String capability = getCapability("is_wireless_device");
- return capability != null && capability.length() > 0 && Boolean.valueOf(capability);
- }
-
- // implementing Wurfl Device
-
- public String getId() {
- return device.getId();
- }
-
- public String getUserAgent() {
- return device.getUserAgent();
- }
-
- public String getCapability(String name) throws CapabilityNotDefinedException {
- return device.getCapability(name);
- }
-
- @SuppressWarnings("rawtypes")
- public Map getCapabilities() {
- return device.getCapabilities();
- }
-
- public MarkUp getMarkUp() {
- return device.getMarkUp();
- }
-
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("[WurflDevice ");
- builder.append("mobile").append("=").append(isMobile()).append(", ");
- builder.append("id").append("=").append(getId()).append(", ");
- builder.append("userAgent").append("=").append(getUserAgent()).append(", ");
- builder.append("capabilities").append("=").append(getCapabilities()).append(", ");
- builder.append("markup").append("=").append(getMarkUp());
- builder.append("]");
- return builder.toString();
- }
-
-}
View
61 ...ile-device/src/main/java/org/springframework/mobile/device/wurfl/WurflDeviceResolver.java
@@ -1,61 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl;
-
-import javax.servlet.http.HttpServletRequest;
-
-import net.sourceforge.wurfl.core.WURFLManager;
-import net.sourceforge.wurfl.core.request.DefaultWURFLRequestFactory;
-import net.sourceforge.wurfl.core.request.WURFLRequestFactory;
-
-import org.springframework.mobile.device.Device;
-import org.springframework.mobile.device.DeviceResolver;
-
-/**
- * WURFL-based device resolver.
- * WURL provides a comprehensive catalog of Devices and their capabilities.
- * See http://wurfl.sourceforge.net for more information.
- * @author Keith Donald
- */
-public class WurflDeviceResolver implements DeviceResolver {
-
- private final WURFLManager wurflManager;
-
- private final WURFLRequestFactory requestFactory;
-
- /**
- * Creates a new Wurfl-based device resolution service.
- * @param wurflManager the central WURFL manager object to delegate to.
- */
- public WurflDeviceResolver(WURFLManager wurflManager) {
- this(wurflManager, new DefaultWURFLRequestFactory());
- }
-
- /**
- * Creates a new Wurfl-based device resolution service.
- * @param wurflManager the central WURFL manager object to delegate to
- * @param requestFactory a custom WurflRequest factory
- */
- public WurflDeviceResolver(WURFLManager wurflManager, WURFLRequestFactory requestFactory) {
- this.wurflManager = wurflManager;
- this.requestFactory = requestFactory;
- }
-
- public Device resolveDevice(HttpServletRequest request) {
- return new WurflDevice(wurflManager.getDeviceForRequest(requestFactory.createRequest(request)));
- }
-
-}
View
112 ...device/src/main/java/org/springframework/mobile/device/wurfl/WurflManagerFactoryBean.java
@@ -1,112 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl;
-
-import java.util.List;
-
-import net.sourceforge.wurfl.core.DefaultDeviceProvider;
-import net.sourceforge.wurfl.core.DefaultWURFLManager;
-import net.sourceforge.wurfl.core.DefaultWURFLService;
-import net.sourceforge.wurfl.core.WURFLManager;
-import net.sourceforge.wurfl.core.handlers.matchers.MatcherManager;
-import net.sourceforge.wurfl.core.resource.DefaultWURFLModel;
-import net.sourceforge.wurfl.core.resource.SpringXMLResource;
-import net.sourceforge.wurfl.core.resource.WURFLResources;
-
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.io.Resource;
-import org.springframework.util.Assert;
-
-/**
- * Factory that constructs the central {@link WURFLManager} and exports it as a Spring bean that can be injected into other beans.
- * The specifics of this factory class are hidden when working with the wurfl-device-resolver tag in the spring-mobile-device XML namespace.
- * @author Keith Donald
- */
-public class WurflManagerFactoryBean implements FactoryBean<WURFLManager>, InitializingBean {
-
- private final Resource rootLocation;
-
- private List<? extends Resource> patchLocations;
-
- private WURFLManager manager;
-
- /**
- * Constructs a WurflManagerFactoryBean that loads the root Device model from the XML file at the specified resource path.
- * The specified resource must be resolvable to a file on the filesystem.
- * @param rootLocation the path to the root device model XML file
- */
- public WurflManagerFactoryBean(Resource rootLocation) {
- Assert.notNull(rootLocation, "The rootResource property cannot be null");
- this.rootLocation = rootLocation;
- }
-
- /**
- * Set additional resource paths for patches that should be applied atop the root model.
- * If not set, no patches will be applied.
- * The specified resources must be resolvable to files on the filesystem.
- * @param patchLocations the XML-based patch resources to apply
- */
- public void setPatchLocations(List<? extends Resource> patchLocations) {
- this.patchLocations = patchLocations;
- }
-
- // implementing InitializingBean
-
- public void afterPropertiesSet() throws Exception {
- this.manager = createWURFLManager();
- }
-
- // implementing FactoryBean
-
- public Class<?> getObjectType() {
- return WURFLManager.class;
- }
-
- public WURFLManager getObject() throws Exception {
- return manager;
- }
-
- public boolean isSingleton() {
- return true;
- }
-
- // internal helpers
-
- private WURFLManager createWURFLManager() {
- DefaultWURFLModel model = new DefaultWURFLModel(getRoot(), getPatches());
- MatcherManager matcherManager = new MatcherManager(model);
- DefaultDeviceProvider deviceProvider = new DefaultDeviceProvider(model);
- DefaultWURFLService service = new DefaultWURFLService(matcherManager, deviceProvider);
- return new DefaultWURFLManager(service);
- }
-
- private SpringXMLResource getRoot() {
- return new SpringXMLResource(rootLocation);
- }
-
- private WURFLResources getPatches() {
- if (patchLocations == null) {
- return null;
- }
- WURFLResources patches = new WURFLResources();
- for (Resource patch : patchLocations) {
- patches.add(new SpringXMLResource(patch));
- }
- return patches;
- }
-
-}
View
5 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/package-info.java
@@ -1,5 +0,0 @@
-/**
- * WURFL-based device resolver that performs mobile device detection with extensive capability mapping.
- */
-package org.springframework.mobile.device.wurfl;
-
View
56 ...rc/main/java/org/springframework/mobile/device/wurfl/wng/BufferedHttpServletResponse.java
@@ -1,56 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl.wng;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-class BufferedHttpServletResponse extends HttpServletResponseWrapper {
-
- private ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-
- private PrintWriter writer = new PrintWriter(new OutputStreamWriter(buffer));
-
- private ServletOutputStream outputStream = new ServletOutputStream(){
- public void write(int b) throws IOException {
- buffer.write(b);
- }
- };
-
- public BufferedHttpServletResponse(HttpServletResponse response) {
- super(response);
- }
-
- public PrintWriter getWriter() throws IOException {
- return writer;
- }
-
- public ServletOutputStream getOutputStream() throws IOException {
- return outputStream;
- }
-
- public void writeTo(OutputStream out) throws IOException {
- buffer.writeTo(out);
- }
-
-}
View
110 spring-mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/WngView.java
@@ -1,110 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl.wng;
-
-import java.io.IOException;
-import java.util.Map;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sourceforge.wurfl.core.Device;
-import net.sourceforge.wurfl.wng.Constants;
-import net.sourceforge.wurfl.wng.WNGDevice;
-import net.sourceforge.wurfl.wng.component.ComponentException;
-import net.sourceforge.wurfl.wng.component.Document;
-import net.sourceforge.wurfl.wng.component.StyleContainer;
-import net.sourceforge.wurfl.wng.component.ValidatorVisitor;
-import net.sourceforge.wurfl.wng.renderer.DefaultDocumentRenderer;
-import net.sourceforge.wurfl.wng.renderer.DefaultRendererGroupResolver;
-import net.sourceforge.wurfl.wng.renderer.DocumentRenderer;
-import net.sourceforge.wurfl.wng.renderer.RenderedDocument;
-import net.sourceforge.wurfl.wng.style.StyleOptimizerVisitor;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.functors.InstanceofPredicate;
-import org.springframework.mobile.device.DeviceUtils;
-import org.springframework.web.servlet.View;
-
-/**
- * A Spring MVC {@link View} that renders a WNG {@link Document}, if one has been set in the current request by a 'target' view this class delegates to.
- * WNG aims to allow the developer to control the rendering of markup by device type in a declarative manner without resorting to manual if/else logic in his or her JSP templates.
- * When a WNG-based JSP view renders itself, the view builds a component tree that contains a {@link Document} object as its root element--no response writing is performed at that time.
- * After view rendering completes, this decorator finishes WNG processing by rendering the assembled Document.
- * That action triggers the device markup to be generated and written to the response.
- * @author Keith Donald
- */
-public class WngView implements View {
-
- private final View target;
-
- private final DocumentRenderer documentRenderer;
-
- public WngView(View target) {
- this(target, new DefaultDocumentRenderer(new DefaultRendererGroupResolver()));
- }
-
- public WngView(View target, DocumentRenderer documentRenderer) {
- this.target = target;
- this.documentRenderer = documentRenderer;;
- }
-
- // implementing View
-
- public String getContentType() {
- return target.getContentType();
- }
-
- public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
- BufferedHttpServletResponse buffered = new BufferedHttpServletResponse(response);
- target.render(model, request, buffered);
- // logic adapted from WNGContextFilter which has the same responsibility
- if (isWngDocumentCreated(request)) {
- WNGDevice device = new WNGDevice((Device) DeviceUtils.getRequiredCurrentDevice(request));
- Document document = resolveDocument(request);
- StyleContainer styleContainer = (StyleContainer)CollectionUtils.find(document.getHead().getChildren(), new InstanceofPredicate(StyleContainer.class));
- if (styleContainer == null) {
- styleContainer = new StyleContainer();
- document.addToHead(styleContainer);
- }
- StyleOptimizerVisitor visitor = new StyleOptimizerVisitor(device, styleContainer);
- document.accept(visitor);
- RenderedDocument renderedDocument = documentRenderer.renderDocument(document, device);
- writeDocument(renderedDocument, response);
- } else {
- buffered.writeTo(response.getOutputStream());
- }
- }
-
- private boolean isWngDocumentCreated(ServletRequest request) {
- return request.getAttribute(Constants.ATT_DOCUMENT) != null;
- }
-
- private Document resolveDocument(ServletRequest request) throws ComponentException {
- Document document = (Document) request.getAttribute(Constants.ATT_DOCUMENT);
- ValidatorVisitor validatorVisitor = new ValidatorVisitor();
- document.accept(validatorVisitor);
- return document;
- }
-
- private void writeDocument(RenderedDocument renderedDocument, HttpServletResponse response) throws IOException {
- response.setContentType(renderedDocument.getContentType());
- response.getWriter().print(renderedDocument.getMarkup());
- response.getWriter().flush();
- }
-
-}
View
41 ...ile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/WngViewResolver.java
@@ -1,41 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.mobile.device.wurfl.wng;
-
-import java.util.Locale;
-
-import org.springframework.web.servlet.View;
-import org.springframework.web.servlet.ViewResolver;
-
-/**
- * Wraps View instances returned by a target ViewResolver in {@link WngView} decorators that build in WNG-awareness.
- * @author Keith Donald
- * @see WngView
- */
-public class WngViewResolver implements ViewResolver {
-
- private final ViewResolver target;
-
- public WngViewResolver(ViewResolver target) {
- this.target = target;
- }
-
- public View resolveViewName(String viewName, Locale locale) throws Exception {
- View view = target.resolveViewName(viewName, locale);
- return view != null ? new WngView(view) : null;
- }
-
-}
View
5 ...mobile-device/src/main/java/org/springframework/mobile/device/wurfl/wng/package-info.java
@@ -1,5 +0,0 @@
-/**
- * Integration with WURFL's "Wall NG" tag library.
- */
-package org.springframework.mobile.device.wurfl.wng;
-
View
BIN  spring-mobile-device/src/main/javadoc/doc-files/th-background.png
Deleted file not rendered
View
178 spring-mobile-device/src/main/javadoc/spring-javadoc.css
@@ -1,178 +0,0 @@
-/* stylesheet.css 2008/04/22 nicolekonicki */
-
-/*
- *
- * Spring-specific Javadoc style sheet
- *
- */
-
-
-
-.code
-{
- border: 1px solid black;
- background-color: #F4F4F4;
- padding: 5px;
-}
-
-body
-{
- font: 12px Verdana, Arial, Helvetica, "Bitstream Vera Sans", sans-serif;
- background-color: #fff;
- color: #333;
-}
-
-
-/* Link colors */
-a
-{
- color:#2c7b14;
- text-decoration:none;
-}
-
-a:hover
-{
- text-decoration:underline;
-}
-
-/* Headings */
-h1
-{
- font-size:28px;
- color:#007c00;
-}
-
-/* Table colors */
-
-table
-{
- border:none;
-}
-
-td
-{
- border:none;
- border-bottom:1px dotted #ddd;
-}
-
-th
-{
- border:none;
-}
-
-.TableHeadingColor th
-{
- background-color: #efffcb;
- background-image: url(doc-files/th-background.png);
- background-repeat: repeat-x;
- color:#fff;
- font-size:14px;
- height:26px;
-}
-
-.TableSubHeadingColor
-{
- background: #f7ffee;
-
-}
-.TableRowColor
-{
- background: #fff;
-}
-
-.TableRowColor a
-{
- border-bottom:none;
- color:#2c7b14;
- font-weight:normal;
-}
-
-tr.TableRowColor:hover
-{
- background:#eef2e1;
-}
-
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont
-{
- font-size: 120%;
- font-weight:bold;
-}
-
-.FrameTitleFont a
-{
- color: #333;
-}
-
-.FrameHeadingFont
-{
- font-weight: bold;
- font-size:95%;
-}
-
-.FrameItemFont
-{
- line-height:130%;
- font-size: 95%;
-}
-
-.FrameItemFont a
-{
- color:#333;
-}
-
-.FrameItemFont a:hover
-{
- color:#249901;
- border-bottom:none;
- text-decoration:underline;
-}
-
-/* Navigation bar fonts and colors */
-.NavBarCell1
-{
- background-color:#fff;
- border:none;
-}
-
-.NavBarCell1Rev
-{
- background-color:#e3faa5;
- border:1px solid #9ad00c;
- padding:0;
- margin:0;
-}
-
-.NavBarCell1 a
-{
- color:#333;
- text-decoration:none;
-}
-
-.NavBarFont1Rev
-{
-
-}
-
-.NavBarCell2
-{
- border:none;
-}
-
-.NavBarCell2 a
-{
- color:#249901;
- font-size:90%;
-}
-
-.NavBarCell3
-{
- border:none;
-}
-
-/* Override sizes in font tags */
-font
-{
- font: inherit !important;
-}
View
1  spring-mobile-device/src/main/resources/META-INF/spring.handlers
@@ -1 +0,0 @@
-http\://www.springframework.org/schema/mobile/device=org.springframework.mobile.device.config.DeviceNamespaceHandler
View
1  spring-mobile-device/src/main/resources/META-INF/spring.schemas
@@ -1 +0,0 @@
-http\://www.springframework.org/schema/mobile/device/spring-mobile-device-1.0.xsd=org/springframework/mobile/device/config/spring-mobile-device-1.0.xsd
View
42 .../src/main/resources/org/springframework/mobile/device/config/spring-mobile-device-1.0.xsd
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xsd:schema xmlns="http://www.springframework.org/schema/mobile/device"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:tool="http://www.springframework.org/schema/tool"
- targetNamespace="http://www.springframework.org/schema/mobile/device"
- elementFormDefault="qualified" attributeFormDefault="unqualified">
-
- <xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" />
- <xsd:import namespace="http://www.springframework.org/schema/tool" schemaLocation="http://www.springframework.org/schema/tool/spring-tool-3.0.xsd" />
-
- <xsd:element name="wurfl-device-resolver">
- <xsd:annotation>
- <xsd:documentation
- source="java:org.springframework.mobile.device.wurfl.WurflDeviceResolver"><![CDATA[
- Configures a WURFL-based device resolver implementation.
- ]]></xsd:documentation>
- </xsd:annotation>
- <xsd:complexType>
- <xsd:complexContent>
- <xsd:extension base="beans:identifiedType">
- <xsd:attribute name="root-location" use="required" type="xsd:string">
- <xsd:annotation>
- <xsd:documentation><![CDATA[
- The resource path to the XML file that defines the root WURFL device model. Required.
- ]]></xsd:documentation>
- </xsd:annotation>
- </xsd:attribute>
- <xsd:attribute name="patch-locations" type="xsd:string">
- <xsd:annotation>
- <xsd:documentation><![CDATA[
- Resource paths to one or more XML files that define patches that should be applied atop the root WURFL device model.
- Optional. If not specified, no patches are applied. Multiple patches may be specified as a comma-separated list,
- and the patches will be applied in the order they are specified.
- ]]></xsd:documentation>
- </xsd:annotation>
- </xsd:attribute>
- </xsd:extension>
- </xsd:complexContent>
- </xsd:complexType>
- </xsd:element>
-
-</xsd:schema>
View
25 ...ce/src/test/java/org/springframework/mobile/device/config/DeviceNamespaceHandlerTest.java
@@ -1,25 +0,0 @@
-package org.springframework.mobile.device.config;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.mobile.device.Device;
-import org.springframework.mobile.device.DeviceResolver;
-import org.springframework.mock.web.MockHttpServletRequest;
-
-public class DeviceNamespaceHandlerTest {
-
- @Test
- public void wurflDeviceResolutionService() throws Exception {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("org/springframework/mobile/device/config/device.xml");
- DeviceResolver service = context.getBean("root", DeviceResolver.class);
- MockHttpServletRequest request = new MockHttpServletRequest();
- Device device = service.resolveDevice(request);
- assertNotNull(device);
- assertTrue(device.isMobile());
- context.getBean("rootAndPatches", DeviceResolver.class);
- }
-
-}
View
60 ...c/test/java/org/springframework/mobile/device/wurfl/WurflDeviceResolutionServiceTest.java
@@ -1,60 +0,0 @@
-package org.springframework.mobile.device.wurfl;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collections;
-
-import net.sourceforge.wurfl.core.WURFLManager;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.mobile.device.Device;
-import org.springframework.mock.web.MockHttpServletRequest;
-
-public class WurflDeviceResolutionServiceTest {
-
- private WURFLManager manager;
-
- @Before
- public void setUp() throws Exception {
- WurflManagerFactoryBean factory = new WurflManagerFactoryBean(new ClassPathResource("test-wurfl.xml", getClass()));
- factory.afterPropertiesSet();
- manager = factory.getObject();
- }
-
- @Test
- public void resolveMobile() throws Exception {
- WurflDeviceResolver service = new WurflDeviceResolver(manager);
- MockHttpServletRequest request = new MockHttpServletRequest();
- request.addHeader("User-Agent", "AUDIOVOX-CDM180");
- Device device = service.resolveDevice(request);
- assertTrue(device.isMobile());
- }
-
- @Test
- public void resolveWebBrowserNoPatch() throws Exception {
- WurflDeviceResolver service = new WurflDeviceResolver(manager);
- MockHttpServletRequest request = new MockHttpServletRequest();
- request.addHeader("User-Agent", "Firefox");
- Device device = service.resolveDevice(request);
- assertTrue(device.isMobile());
- }
-
- @Test
- public void resolveWebBrowserPatch() throws Exception {
- WurflManagerFactoryBean factory = new WurflManagerFactoryBean(new ClassPathResource("test-wurfl.xml", getClass()));
- factory.setPatchLocations(Collections.singletonList(new ClassPathResource("test-wurfl-patch.xml", getClass())));
- factory.afterPropertiesSet();
- manager = factory.getObject();
-
- WurflDeviceResolver service = new WurflDeviceResolver(manager);
- MockHttpServletRequest request = new MockHttpServletRequest();
- request.addHeader("User-Agent", "Firefox");
- Device device = service.resolveDevice(request);
- System.out.println(device);
- assertFalse(device.isMobile());
- }
-
-}
View
25 ...ce/src/test/java/org/springframework/mobile/device/wurfl/WurflManagerFactoryBeanTest.java
@@ -1,25 +0,0 @@
-package org.springframework.mobile.device.wurfl;
-
-import java.util.Collections;
-
-import org.junit.Test;
-import org.springframework.core.io.ClassPathResource;
-
-public class WurflManagerFactoryBeanTest {
-
- @Test
- public void customRoot() throws Exception {
- WurflManagerFactoryBean factory = new WurflManagerFactoryBean(new ClassPathResource("test-wurfl.xml", getClass()));
- factory.afterPropertiesSet();
- factory.getObject();
- }
-
- @Test
- public void customRootAndPatches() throws Exception {
- WurflManagerFactoryBean factory = new WurflManagerFactoryBean(new ClassPathResource("test-wurfl.xml", getClass()));
- factory.setPatchLocations(Collections.singletonList(new ClassPathResource("test-wurfl-patch.xml", getClass())));
- factory.afterPropertiesSet();
- factory.getObject();
- }
-
-}
View
4 spring-mobile-device/src/test/resources/log4j.xml
@@ -31,10 +31,6 @@
<logger name="org.springframework.web">
<level value="info" />
</logger>
-
- <logger name="net.sourceforge.wurfl">
- <level value="info" />
- </logger>
<!-- Root Logger -->
<root>
View
19 spring-mobile-device/src/test/resources/org/springframework/mobile/device/config/device.xml
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:device="http://www.springframework.org/schema/mobile/device"
- xsi:schemaLocation="http://www.springframework.org/schema/mobile/device http://www.springframework.org/schema/mobile/device/spring-mobile-device-1.0.xsd
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
-
- <device:wurfl-device-resolver id="root" root-location="classpath:org/springframework/mobile/device/wurfl/test-wurfl.xml" />
-
- <device:wurfl-device-resolver id="rootAndPatches" root-location="classpath:org/springframework/mobile/device/wurfl/test-wurfl.xml"
- patch-locations="classpath:org/springframework/mobile/device/wurfl/test-wurfl-patch.xml" />
-
- <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor">
- <constructor-arg>
- <device:wurfl-device-resolver root-location="classpath:org/springframework/mobile/device/wurfl/test-wurfl.xml" />
- </constructor-arg>
- </bean>
-
-</beans>
View
13 ...le-device/src/test/resources/org/springframework/mobile/device/wurfl/test-wurfl-patch.xml
@@ -1,13 +0,0 @@
-<wurfl_patch>
- <version>
- <last_updated>September 11, 2010</last_updated>
- </version>
- <devices>
- <!-- Web browsers -->
- <device user_agent="Firefox" fall_back="generic_web_browser" id="firefox">
- <group id="product_info">
- <capability name="brand_name" value="firefox" />
- </group>
- </device>
- </devices>
-</wurfl_patch>
View
806 ...g-mobile-device/src/test/resources/org/springframework/mobile/device/wurfl/test-wurfl.xml
@@ -1,806 +0,0 @@
-<wurfl>
- <version>
- <ver>www.wurflpro.com - 2010-10-20 14:30:49</ver>
- <last_updated>Wed Oct 20 14:36:19 -0500 2010</last_updated>
- <official_url>http://wurfl.sourceforge.net/</official_url>
- <maintainers>
- <maintainer name="Luca Passani" email="luca.passani at gmail point com" home_page="http://www.wurfl.com"/>
- </maintainers>
- <authors>
- <author name="Luca Passani" email="luca.passani at gmail point com" home_page="http://www.wurfl.com"/>
- </authors>
- <statement>
- <![CDATA[
-
- Dear Developer, the WURFL file contains information about the
- capabilities of mobile devices, capabilities and features.
- The main scope of this file is to collect as
- many information as we can about all the existing wireless devices
- that access mobile pages so that developers will be able to build better
- applications and better services for the users.
- This project is open-source and is intended for developers working
- with the WAP environment. All the information listed here has been
- collected by many different people from many different
- countries. You are allowed to use WURFL in any of your applications,
- free or commercial. The only thing required is to make public any
- modification to this file, following the original
- spirit and idea of the creators of this project. This will help WURFL
- to grow better and better every day. The use of WURFL is at your own risk,
- there is no warranty that all agents and
- capabilities are correct. All the information, as stated, has been gathered
- by many users from many places around the world and as such there is
- no guarantee about the reliability of this
- information. Post any noteworthy modification and comment
- to the file on the WMLProgramming mailing list on Yahoo Groups:
- http://tech.groups.yahoo.com/group/wmlprogramming/ Alternatively,
- you can mail your modification to Luca Passani,
- the WURFL maintainer, at passani at eunet dot no
-
-Thank you
-
-WMLProgramming mailing list
-]]></statement>
- </version>
- <devices>
- <device id="generic" user_agent="" fall_back="root">
- <group id="product_info">
- <capability name="mobile_browser" value=""/>
- <capability name="nokia_feature_pack" value="0"/>
- <capability name="device_os" value=""/>
- <capability name="nokia_series" value="0"/>
- <capability name="has_qwerty_keyboard" value="false"/>
- <capability name="pointing_method" value=""/>
- <capability name="mobile_browser_version" value=""/>
- <capability name="is_tablet" value="false"/>
- <capability name="nokia_edition" value="0"/>
- <capability name="uaprof" value=""/>
- <capability name="can_skip_aligned_link_row" value="false"/>
- <capability name="device_claims_web_support" value="false"/>
- <capability name="ununiqueness_handler" value=""/>
- <capability name="model_name" value=""/>
- <capability name="device_os_version" value=""/>
- <capability name="uaprof2" value=""/>
- <capability name="is_wireless_device" value="true"/>
- <capability name="uaprof3" value=""/>
- <capability name="brand_name" value=""/>
- <capability name="model_extra_info" value=""/>
- <capability name="marketing_name" value=""/>
- <capability name="can_assign_phone_number" value="true"/>
- <capability name="release_date" value="2002_january"/>
- <capability name="unique" value="true"/>
- </group>
- <group id="wml_ui">
- <capability name="icons_on_menu_items_support" value="false"/>
- <capability name="opwv_wml_extensions_support" value="false"/>
- <capability name="built_in_back_button_support" value="false"/>
- <capability name="proportional_font" value="false"/>
- <capability name="insert_br_element_after_widget_recommended" value="false"/>
- <capability name="wizards_recommended" value="false"/>
- <capability name="wml_can_display_images_and_text_on_same_line" value="false"/>
- <capability name="softkey_support" value="false"/>
- <capability name="wml_make_phone_call_string" value="wtai://wp/mc;"/>
- <capability name="deck_prefetch_support" value="false"/>
- <capability name="menu_with_select_element_recommended" value="false"/>
- <capability name="numbered_menus" value="false"/>
- <capability name="card_title_support" value="true"/>
- <capability name="image_as_link_support" value="false"/>
- <capability name="wrap_mode_support" value="false"/>
- <capability name="table_support" value="true"/>
- <capability name="access_key_support" value="false"/>
- <capability name="wml_displays_image_in_center" value="false"/>
- <capability name="elective_forms_recommended" value="true"/>
- <capability name="times_square_mode_support" value="false"/>
- <capability name="break_list_of_links_with_br_element_recommended" value="true"/>
- <capability name="menu_with_list_of_links_recommended" value="true"/>
- </group>
- <group id="chtml_ui">
- <capability name="imode_region" value="none"/>
- <capability name="chtml_can_display_images_and_text_on_same_line" value="false"/>
- <capability name="chtml_displays_image_in_center" value="false"/>
- <capability name="chtml_make_phone_call_string" value="tel:"/>
- <capability name="chtml_table_support" value="false"/>
- <capability name="chtml_display_accesskey" value="false"/>
- <capability name="emoji" value="false"/>
- </group>
- <group id="xhtml_ui">
- <capability name="xhtml_preferred_charset" value="utf8"/>
- <capability name="xhtml_supports_css_cell_table_coloring" value="false"/>
- <capability name="xhtml_select_as_radiobutton" value="false"/>
- <capability name="xhtml_autoexpand_select" value="false"/>
- <capability name="xhtml_avoid_accesskeys" value="false"/>
- <capability name="accept_third_party_cookie" value="true"/>
- <capability name="xhtml_make_phone_call_string" value="tel:"/>
- <capability name="xhtml_allows_disabled_form_elements" value="false"/>
- <capability name="xhtml_supports_invisible_text" value="false"/>
- <capability name="xhtml_select_as_dropdown" value="false"/>
- <capability name="cookie_support" value="false"/>
- <capability name="xhtml_send_mms_string" value="none"/>
- <capability name="xhtml_table_support" value="false"/>
- <capability name="xhtml_display_accesskey" value="false"/>
- <capability name="xhtml_can_embed_video" value="none"/>
- <capability name="xhtml_supports_iframe" value="none"/>
- <capability name="xhtmlmp_preferred_mime_type" value="application/vnd.wap.xhtml+xml"/>
- <capability name="xhtml_supports_monospace_font" value="false"/>
- <capability name="xhtml_supports_inline_input" value="false"/>
- <capability name="xhtml_supports_forms_in_table" value="false"/>
- <capability name="xhtml_document_title_support" value="true"/>
- <capability name="xhtml_support_wml2_namespace" value="false"/>
- <capability name="xhtml_readable_background_color1" value="#FFFFFF"/>
- <capability name="xhtml_format_as_attribute" value="false"/>
- <capability name="xhtml_supports_table_for_layout" value="false"/>
- <capability name="xhtml_readable_background_color2" value="#FFFFFF"/>
- <capability name="xhtml_select_as_popup" value="false"/>
- <capability name="xhtml_send_sms_string" value="none"/>
- <capability name="xhtml_format_as_css_property" value="false"/>
- <capability name="xhtml_file_upload" value="not_supported"/>
- <capability name="xhtml_honors_bgcolor" value="false"/>
- <capability name="opwv_xhtml_extensions_support" value="false"/>
- <capability name="xhtml_marquee_as_css_property" value="false"/>
- <capability name="xhtml_nowrap_mode" value="false"/>
- </group>
- <group id="ajax">
- <capability name="ajax_preferred_geoloc_api" value="none"/>
- <capability name="ajax_xhr_type" value="none"/>
- <capability name="ajax_support_getelementbyid" value="false"/>
- <capability name="ajax_support_event_listener" value="false"/>
- <capability name="ajax_manipulate_dom" value="false"/>
- <capability name="ajax_support_javascript" value="false"/>
- <capability name="ajax_support_inner_html" value="false"/>
- <capability name="ajax_manipulate_css" value="false"/>
- <capability name="ajax_support_events" value="false"/>
- </group>
- <group id="markup">
- <capability name="html_web_3_2" value="false"/>
- <capability name="html_wi_imode_htmlx_1" value="false"/>
- <capability name="html_wi_imode_html_1" value="false"/>
- <capability name="html_wi_oma_xhtmlmp_1_0" value="true"/>
- <capability name="html_wi_imode_html_2" value="false"/>
- <capability name="html_wi_w3_xhtmlbasic" value="true"/>
- <capability name="html_wi_imode_compact_generic" value="false"/>
- <capability name="html_wi_imode_html_3" value="false"/>
- <capability name="wml_1_1" value="true"/>
- <capability name="html_wi_imode_html_4" value="false"/>
- <capability name="wml_1_2" value="false"/>
- <capability name="html_wi_imode_html_5" value="false"/>
- <capability name="wml_1_3" value="false"/>
- <capability name="preferred_markup" value="html_wi_oma_xhtmlmp_1_0"/>
- <capability name="xhtml_support_level" value="1"/>
- <capability name="voicexml" value="false"/>
- <capability name="html_wi_imode_htmlx_1_1" value="false"/>
- <capability name="multipart_support" value="false"/>
- <capability name="html_web_4_0" value="false"/>
- </group>
- <group id="cache">
- <capability name="time_to_live_support" value="false"/>
- <capability name="total_cache_disable_support" value="false"/>
- </group>
- <group id="display">
- <capability name="physical_screen_height" value="27"/>
- <capability name="columns" value="11"/>
- <capability name="dual_orientation" value="false"/>
- <capability name="physical_screen_width" value="27"/>
- <capability name="rows" value="6"/>
- <capability name="max_image_width" value="90"/>
- <capability name="resolution_height" value="40"/>
- <capability name="resolution_width" value="90"/>
- <capability name="max_image_height" value="35"/>
- </group>
- <group id="image_format">
- <capability name="greyscale" value="false"/>
- <capability name="jpg" value="false"/>
- <capability name="gif" value="true"/>
- <capability name="transparent_png_index" value="false"/>
- <capability name="epoc_bmp" value="false"/>
- <capability name="bmp" value="false"/>
- <capability name="wbmp" value="true"/>
- <capability name="gif_animated" value="false"/>
- <capability name="colors" value="256"/>
- <capability name="svgt_1_1_plus" value="false"/>
- <capability name="svgt_1_1" value="false"/>
- <capability name="transparent_png_alpha" value="false"/>
- <capability name="png" value="false"/>
- <capability name="tiff" value="false"/>
- </group>
- <group id="bugs">
- <capability name="emptyok" value="false"/>
- <capability name="empty_option_value_support" value="true"/>
- <capability name="basic_authentication_support" value="true"/>
- <capability name="post_method_support" value="true"/>
- </group>
- <group id="wta">
- <capability name="nokia_voice_call" value="false"/>
- <capability name="wta_pdc" value="false"/>
- <capability name="wta_voice_call" value="false"/>
- <capability name="wta_misc" value="false"/>
- <capability name="wta_phonebook" value="false"/>
- </group>
- <group id="security">
- <capability name="phone_id_provided" value="false"/>
- <capability name="https_support" value="true"/>
- </group>
- <group id="bearer">
- <capability name="sdio" value="false"/>
- <capability name="wifi" value="false"/>
- <capability name="has_cellular_radio" value="true"/>
- <capability name="max_data_rate" value="9"/>
- <capability name="vpn" value="false"/>
- </group>
- <group id="storage">
- <capability name="max_length_of_username" value="0"/>
- <capability name="max_url_length_bookmark" value="0"/>
- <capability name="max_no_of_bookmarks" value="0"/>
- <capability name="max_deck_size" value="4000"/>
- <capability name="max_url_length_cached_page" value="0"/>
- <capability name="max_length_of_password" value="0"/>
- <capability name="max_no_of_connection_settings" value="0"/>
- <capability name="max_url_length_in_requests" value="128"/>
- <capability name="max_object_size" value="0"/>
- <capability name="max_url_length_homepage" value="0"/>
- </group>
- <group id="object_download">
- <capability name="video" value="false"/>
- <capability name="picture_bmp" value="false"/>
- <capability name="picture" value="false"/>
- <capability name="wallpaper_df_size_limit" value="0"/>
- <capability name="picture_preferred_width" value="0"/>
- <capability name="wallpaper_oma_size_limit" value="0"/>
- <capability name="picture_greyscale" value="false"/>
- <capability name="inline_support" value="false"/>
- <capability name="ringtone_qcelp" value="false"/>
- <capability name="screensaver_oma_size_limit" value="0"/>
- <capability name="screensaver_wbmp" value="false"/>
- <capability name="picture_resize" value="none"/>
- <capability name="picture_preferred_height" value="0"/>
- <capability name="ringtone_rmf" value="false"/>
- <capability name="wallpaper_wbmp" value="false"/>
- <capability name="wallpaper_jpg" value="false"/>
- <capability name="screensaver_bmp" value="false"/>
- <capability name="screensaver_max_width" value="0"/>
- <capability name="picture_inline_size_limit" value="0"/>
- <capability name="picture_colors" value="2"/>
- <capability name="ringtone_midi_polyphonic" value="false"/>
- <capability name="ringtone_midi_monophonic" value="false"/>
- <capability name="screensaver_preferred_height" value="0"/>
- <capability name="ringtone_voices" value="1"/>
- <capability name="ringtone_3gpp" value="false"/>
- <capability name="oma_support" value="false"/>
- <capability name="ringtone_inline_size_limit" value="0"/>
- <capability name="wallpaper_preferred_width" value="0"/>
- <capability name="wallpaper_greyscale" value="false"/>
- <capability name="screensaver_preferred_width" value="0"/>
- <capability name="wallpaper_preferred_height" value="0"/>
- <capability name="picture_max_width" value="0"/>
- <capability name="picture_jpg" value="false"/>
- <capability name="ringtone_aac" value="false"/>
- <capability name="ringtone_oma_size_limit" value="0"/>
- <capability name="wallpaper_directdownload_size_limit" value="0"/>
- <capability name="screensaver_inline_size_limit" value="0"/>
- <capability name="ringtone_xmf" value="false"/>
- <capability name="picture_max_height" value="0"/>
- <capability name="screensaver_max_height" value="0"/>
- <capability name="ringtone_mp3" value="false"/>
- <capability name="wallpaper_png" value="false"/>
- <capability name="screensaver_jpg" value="false"/>
- <capability name="ringtone_directdownload_size_limit" value="0"/>
- <capability name="wallpaper_max_width" value="0"/>
- <capability name="wallpaper_max_height" value="0"/>
- <capability name="screensaver" value="false"/>
- <capability name="ringtone_wav" value="false"/>
- <capability name="wallpaper_gif" value="false"/>
- <capability name="screensaver_directdownload_size_limit" value="0"/>
- <capability name="picture_df_size_limit" value="0"/>
- <capability name="wallpaper_tiff" value="false"/>
- <capability name="screensaver_df_size_limit" value="0"/>
- <capability name="ringtone_awb" value="false"/>
- <capability name="ringtone" value="false"/>
- <capability name="wallpaper_inline_size_limit" value="0"/>
- <capability name="picture_directdownload_size_limit" value="0"/>
- <capability name="picture_png" value="false"/>
- <capability name="wallpaper_bmp" value="false"/>
- <capability name="picture_wbmp" value="false"/>
- <capability name="ringtone_df_size_limit" value="0"/>
- <capability name="picture_oma_size_limit" value="0"/>
- <capability name="picture_gif" value="false"/>
- <capability name="screensaver_png" value="false"/>
- <capability name="wallpaper_resize" value="none"/>
- <capability name="screensaver_greyscale" value="false"/>
- <capability name="ringtone_mmf" value="false"/>
- <capability name="ringtone_amr" value="false"/>
- <capability name="wallpaper" value="false"/>
- <capability name="ringtone_digiplug" value="false"/>
- <capability name="ringtone_spmidi" value="false"/>
- <capability name="ringtone_compactmidi" value="false"/>
- <capability name="ringtone_imelody" value="false"/>
- <capability name="screensaver_resize" value="none"/>
- <capability name="wallpaper_colors" value="2"/>
- <capability name="directdownload_support" value="false"/>
- <capability name="downloadfun_support" value="false"/>
- <capability name="screensaver_colors" value="2"/>
- <capability name="screensaver_gif" value="false"/>
- </group>
- <group id="drm">
- <capability name="oma_v_1_0_combined_delivery" value="false"/>
- <capability name="oma_v_1_0_separate_delivery" value="false"/>
- <capability name="oma_v_1_0_forwardlock" value="false"/>
- </group>
- <group id="streaming">
- <capability name="streaming_vcodec_mpeg4_asp" value="-1"/>
- <capability name="streaming_video_size_limit" value="0"/>
- <capability name="streaming_mov" value="false"/>
- <capability name="streaming_wmv" value="none"/>
- <capability name="streaming_acodec_aac" value="none"/>
- <capability name="streaming_vcodec_h263_0" value="-1"/>
- <capability name="streaming_real_media" value="none"/>
- <capability name="streaming_3g2" value="false"/>
- <capability name="streaming_3gpp" value="false"/>
- <capability name="streaming_acodec_amr" value="none"/>
- <capability name="streaming_vcodec_h264_bp" value="-1"/>
- <capability name="streaming_vcodec_h263_3" value="-1"/>
- <capability name="streaming_preferred_protocol" value="rtsp"/>
- <capability name="streaming_vcodec_mpeg4_sp" value="-1"/>
- <capability name="streaming_flv" value="false"/>
- <capability name="streaming_video" value="false"/>
- <capability name="streaming_mp4" value="false"/>
- </group>
- <group id="wap_push">
- <capability name="expiration_date" value="false"/>
- <capability name="utf8_support" value="false"/>
- <capability name="connectionless_cache_operation" value="false"/>
- <capability name="connectionless_service_load" value="false"/>
- <capability name="iso8859_support" value="false"/>
- <capability name="connectionoriented_confirmed_service_indication" value="false"/>
- <capability name="connectionless_service_indication" value="false"/>
- <capability name="ascii_support" value="false"/>
- <capability name="connectionoriented_confirmed_cache_operation" value="false"/>
- <capability name="connectionoriented_confirmed_service_load" value="false"/>
- <capability name="wap_push_support" value="false"/>
- <capability name="connectionoriented_unconfirmed_cache_operation" value="false"/>
- <capability name="connectionoriented_unconfirmed_service_load" value="false"/>
- <capability name="connectionoriented_unconfirmed_service_indication" value="false"/>
- </group>
- <group id="j2me">
- <capability name="doja_1_5" value="false"/>
- <capability name="j2me_datefield_broken" value="false"/>
- <capability name="j2me_clear_key_code" value="0"/>
- <capability name="j2me_right_softkey_code" value="0"/>
- <capability name="j2me_heap_size" value="0"/>
- <capability name="j2me_canvas_width" value="0"/>
- <capability name="j2me_motorola_lwt" value="false"/>
- <capability name="doja_3_5" value="false"/>
- <capability name="j2me_wbmp" value="false"/>
- <capability name="j2me_rmf" value="false"/>
- <capability name="j2me_wma" value="false"/>
- <capability name="j2me_left_softkey_code" value="0"/>
- <capability name="j2me_jtwi" value="false"/>
- <capability name="j2me_jpg" value="false"/>
- <capability name="j2me_return_key_code" value="0"/>
- <capability name="j2me_real8" value="false"/>
- <capability name="j2me_max_record_store_size" value="0"/>
- <capability name="j2me_realmedia" value="false"/>
- <capability name="j2me_midp_1_0" value="false"/>
- <capability name="j2me_bmp3" value="false"/>
- <capability name="j2me_midi" value="false"/>
- <capability name="j2me_btapi" value="false"/>
- <capability name="j2me_locapi" value="false"/>
- <capability name="j2me_siemens_extension" value="false"/>
- <capability name="j2me_h263" value="false"/>
- <capability name="j2me_audio_capture_enabled" value="false"/>
- <capability name="j2me_midp_2_0" value="false"/>
- <capability name="j2me_datefield_no_accepts_null_date" value="false"/>
- <capability name="j2me_aac" value="false"/>
- <capability name="j2me_capture_image_formats" value="none"/>
- <capability name="j2me_select_key_code" value="0"/>
- <capability name="j2me_xmf" value="false"/>
- <capability name="j2me_photo_capture_enabled" value="false"/>
- <capability name="j2me_realaudio" value="false"/>
- <capability name="j2me_realvideo" value="false"/>
- <capability name="j2me_mp3" value="false"/>
- <capability name="j2me_png" value="false"/>
- <capability name="j2me_au" value="false"/>
- <capability name="j2me_screen_width" value="0"/>
- <capability name="j2me_mp4" value="false"/>
- <capability name="j2me_mmapi_1_0" value="false"/>
- <capability name="j2me_http" value="false"/>
- <capability name="j2me_imelody" value="false"/>
- <capability name="j2me_socket" value="false"/>
- <capability name="j2me_3dapi" value="false"/>
- <capability name="j2me_bits_per_pixel" value="0"/>
- <capability name="j2me_mmapi_1_1" value="false"/>
- <capability name="j2me_udp" value="false"/>
- <capability name="j2me_wav" value="false"/>
- <capability name="j2me_middle_softkey_code" value="0"/>
- <capability name="j2me_svgt" value="false"/>
- <capability name="j2me_gif" value="false"/>
- <capability name="j2me_siemens_color_game" value="false"/>
- <capability name="j2me_max_jar_size" value="0"/>
- <capability name="j2me_wmapi_1_0" value="false"/>
- <capability name="j2me_nokia_ui" value="false"/>
- <capability name="j2me_screen_height" value="0"/>
- <capability name="j2me_wmapi_1_1" value="false"/>
- <capability name="j2me_wmapi_2_0" value="false"/>
- <capability name="doja_1_0" value="false"/>
- <capability name="j2me_serial" value="false"/>
- <capability name="doja_2_0" value="false"/>
- <capability name="j2me_bmp" value="false"/>
- <capability name="j2me_amr" value="false"/>
- <capability name="j2me_gif89a" value="false"/>
- <capability name="j2me_cldc_1_0" value="false"/>
- <capability name="doja_2_1" value="false"/>
- <capability name="doja_3_0" value="false"/>
- <capability name="j2me_cldc_1_1" value="false"/>
- <capability name="doja_2_2" value="false"/>
- <capability name="doja_4_0" value="false"/>
- <capability name="j2me_3gpp" value="false"/>
- <capability name="j2me_video_capture_enabled" value="false"/>
- <capability name="j2me_canvas_height" value="0"/>
- <capability name="j2me_https" value="false"/>
- <capability name="j2me_mpeg4" value="false"/>
- <capability name="j2me_storage_size" value="0"/>
- </group>
- <group id="mms">
- <capability name="mms_3gpp" value="false"/>
- <capability name="mms_wbxml" value="false"/>
- <capability name="mms_symbian_install" value="false"/>
- <capability name="mms_png" value="false"/>
- <capability name="mms_max_size" value="0"/>
- <capability name="mms_rmf" value="false"/>
- <capability name="mms_nokia_operatorlogo" value="false"/>
- <capability name="mms_max_width" value="0"/>
- <capability name="mms_max_frame_rate" value="0"/>
- <capability name="mms_wml" value="false"/>
- <capability name="mms_evrc" value="false"/>
- <capability name="mms_spmidi" value="false"/>
- <capability name="mms_gif_static" value="false"/>
- <capability name="mms_max_height" value="0"/>
- <capability name="sender" value="false"/>
- <capability name="mms_video" value="false"/>
- <capability name="mms_vcard" value="false"/>
- <capability name="mms_nokia_3dscreensaver" value="false"/>
- <capability name="mms_qcelp" value="false"/>
- <capability name="mms_midi_polyphonic" value="false"/>
- <capability name="mms_wav" value="false"/>
- <capability name="mms_jpeg_progressive" value="false"/>
- <capability name="mms_jad" value="false"/>
- <capability name="mms_nokia_ringingtone" value="false"/>
- <capability name="built_in_recorder" value="false"/>
- <capability name="mms_midi_monophonic" value="false"/>
- <capability name="mms_3gpp2" value="false"/>
- <capability name="mms_wmlc" value="false"/>
- <capability name="mms_nokia_wallpaper" value="false"/>
- <capability name="mms_bmp" value="false"/>
- <capability name="mms_vcalendar" value="false"/>
- <capability name="mms_jar" value="false"/>
- <capability name="mms_ota_bitmap" value="false"/>
- <capability name="mms_mp3" value="false"/>
- <capability name="mms_mmf" value="false"/>
- <capability name="mms_amr" value="false"/>
- <capability name="mms_wbmp" value="false"/>
- <capability name="built_in_camera" value="false"/>
- <capability name="receiver" value="false"/>
- <capability name="mms_mp4" value="false"/>
- <capability name="mms_xmf" value="false"/>
- <capability name="mms_jpeg_baseline" value="false"/>
- <capability name="mms_midi_polyphonic_voices" value="0"/>
- <capability name="mms_gif_animated" value="false"/>
- </group>
- <group id="sms">
- <capability name="ems" value="false"/>
- <capability name="text_imelody" value="false"/>
- <capability name="nokiaring" value="false"/>
- <capability name="siemens_logo_height" value="29"/>
- <capability name="ems_variablesizedpictures" value="false"/>
- <capability name="sckl_groupgraphic" value="false"/>
- <capability name="siemens_ota" value="false"/>
- <capability name="sagem_v1" value="false"/>
- <capability name="largeoperatorlogo" value="false"/>
- <capability name="sagem_v2" value="false"/>
- <capability name="ems_version" value="0"/>
- <capability name="ems_odi" value="false"/>
- <capability name="nokiavcal" value="false"/>
- <capability name="operatorlogo" value="false"/>
- <capability name="siemens_logo_width" value="101"/>
- <capability name="ems_imelody" value="false"/>
- <capability name="sckl_vcard" value="false"/>
- <capability name="siemens_screensaver_width" value="101"/>
- <capability name="sckl_operatorlogo" value="false"/>
- <capability name="panasonic" value="false"/>
- <capability name="ems_upi" value="false"/>
- <capability name="nokiavcard" value="false"/>
- <capability name="callericon" value="false"/>
- <capability name="sms_enabled" value="true"/>
- <capability name="gprtf" value="false"/>
- <capability name="siemens_screensaver_height" value="50"/>
- <capability name="sckl_ringtone" value="false"/>
- <capability name="picturemessage" value="false"/>
- <capability name="sckl_vcalendar" value="false"/>
- </group>
- <group id="sound_format">
- <capability name="rmf" value="false"/>
- <capability name="qcelp" value="false"/>
- <capability name="awb" value="false"/>
- <capability name="smf" value="false"/>
- <capability name="wav" value="false"/>
- <capability name="nokia_ringtone" value="false"/>
- <capability name="aac" value="false"/>
- <capability name="digiplug" value="false"/>
- <capability name="sp_midi" value="false"/>
- <capability name="compactmidi" value="false"/>
- <capability name="voices" value="1"/>
- <capability name="mp3" value="false"/>
- <capability name="mld" value="false"/>
- <capability name="evrc" value="false"/>
- <capability name="amr" value="false"/>
- <capability name="xmf" value="false"/>
- <capability name="mmf" value="false"/>
- <capability name="imelody" value="false"/>
- <capability name="midi_monophonic" value="false"/>
- <capability name="au" value="false"/>
- <capability name="midi_polyphonic" value="false"/>
- </group>
- <group id="flash_lite">
- <capability name="flash_lite_version" value=""/>
- <capability name="fl_wallpaper" value="false"/>
- <capability name="fl_browser" value="false"/>
- <capability name="fl_screensaver" value="false"/>
- <capability name="fl_standalone" value="false"/>
- <capability name="full_flash_support" value="false"/>
- <capability name="fl_sub_lcd" value="false"/>
- </group>
- <group id="css">
- <capability name="css_gradient" value="none"/>
- <capability name="css_border_image" value="none"/>
- <capability name="css_rounded_corners" value="none"/>
- <capability name="css_spriting" value="false"/>
- <capability name="css_supports_width_as_percentage" value="true"/>
- </group>
- <group id="transcoding">
- <capability name="is_transcoder" value="false"/>
- <capability name="transcoder_ua_header" value="user-agent"/>
- </group>
- <group id="rss">
- <capability name="rss_support" value="false"/>
- </group>
- <group id="pdf">
- <capability name="pdf_support" value="false"/>
- </group>
- <group id="playback">
- <capability name="playback_oma_size_limit" value="0"/>
- <capability name="playback_acodec_aac" value="none"/>
- <capability name="playback_vcodec_h263_3" value="-1"/>
- <capability name="playback_vcodec_mpeg4_asp" value="-1"/>
- <capability name="playback_mp4" value="false"/>
- <capability name="playback_3gpp" value="false"/>
- <capability name="playback_df_size_limit" value="0"/>
- <capability name="playback_acodec_amr" value="none"/>
- <capability name="playback_mov" value="false"/>
- <capability name="playback_wmv" value="none"/>
- <capability name="playback_acodec_qcelp" value="false"/>
- <capability name="progressive_download" value="false"/>
- <capability name="playback_directdownload_size_limit" value="0"/>
- <capability name="playback_real_media" value="none"/>
- <capability name="playback_3g2" value="false"/>
- <capability name="playback_vcodec_mpeg4_sp" value="-1"/>
- <capability name="playback_vcodec_h263_0" value="-1"/>
- <capability name="playback_inline_size_limit" value="0"/>
- <capability name="hinted_progressive_download" value="false"/>
- <capability name="playback_vcodec_h264_bp" value="-1"/>
- </group>
- <group id="html_ui">
- <capability name="canvas_support" value="none"/>
- <capability name="viewport_width" value=""/>
- <capability name="html_preferred_dtd" value="html4"/>
- <capability name="viewport_supported" value="false"/>
- <capability name="viewport_minimum_scale" value=""/>
- <capability name="viewport_initial_scale" value=""/>
- <capability name="mobileoptimized" value="false"/>
- <capability name="viewport_maximum_scale" value=""/>
- <capability name="viewport_userscalable" value=""/>
- <capability name="image_inlining" value="false"/>
- <capability name="handheldfriendly" value="false"/>
- </group>
- </device>
- <device id="generic_xhtml" user_agent="DO_NOT_MATCH_MOZILLA" fall_back="generic">
- <group id="markup">
- <capability name="html_wi_oma_xhtmlmp_1_0" value="true"/>
- <capability name="html_wi_w3_xhtmlbasic" value="true"/>
- <capability name="preferred_markup" value="html_wi_oma_xhtmlmp_1_0"/>
- <capability name="xhtml_support_level" value="1"/>
- </group>
- <group id="xhtml_ui">
- <capability name="xhtml_make_phone_call_string" value="tel:"/>
- <capability name="cookie_support" value="true"/>
- <capability name="xhtml_table_support" value="true"/>
- <capability name="xhtmlmp_preferred_mime_type" value="application/vnd.wap.xhtml+xml"/>
- </group>
- <group id="display">
- <capability name="max_image_width" value="120"/>
- <capability name="resolution_height" value="92"/>
- <capability name="resolution_width" value="128"/>
- <capability name="max_image_height" value="92"/>
- </group>
- <group id="image_format">
- <capability name="jpg" value="true"/>
- <capability name="gif" value="true"/>
- <capability name="gif_animated" value="true"/>
- <capability name="png" value="true"/>
- <capability name="colors" value="256"/>
- </group>
- <group id="storage">
- <capability name="max_deck_size" value="10000"/>
- <capability name="max_url_length_in_requests" value="256"/>
- </group>
- <group id="product_info">
- <capability name="can_skip_aligned_link_row" value="true"/>
- <capability name="release_date" value="2002_july"/>
- </group>
- </device>
- <device id="chtml_generic" user_agent="DO_NOT_MATCH_GENERIC_HTML" fall_back="generic">
- <group id="markup">
- <capability name="html_wi_oma_xhtmlmp_1_0" value="true"/>
- <capability name="html_wi_imode_compact_generic" value="true"/>
- <capability name="wml_1_1" value="true"/>
- <capability name="preferred_markup" value="html_wi_imode_compact_generic"/>
- <capability name="xhtml_support_level" value="1"/>
- </group>
- </device>
- <device id="audiovox_cdm180_ver1" user_agent="AUDIOVOX-CDM180" fall_back="generic" actual_device_root="true">
- <group id="product_info">
- <capability name="mobile_browser" value="Openwave Mobile Browser"/>
- <capability name="model_name" value="CDM-180"/>
- <capability name="brand_name" value="Audiovox"/>
- </group>
- <group id="display">
- <capability name="max_image_width" value="152"/>
- <capability name="resolution_height" value="128"/>
- <capability name="resolution_width" value="160"/>
- <capability name="max_image_height" value="108"/>
- </group>
- <group id="image_format">
- <capability name="jpg" value="true"/>
- <capability name="gif" value="true"/>
- <capability name="gif_animated" value="true"/>
- <capability name="colors" value="262144"/>
- </group>
- <group id="object_download">
- <capability name="screensaver_jpg" value="true"/>
- <capability name="screensaver_preferred_width" value="160"/>
- <capability name="ringtone_voices" value="32"/>
- <capability name="directdownload_support" value="true"/>
- <capability name="screensaver_max_height" value="128"/>
- <capability name="wallpaper_colors" value="18"/>
- <capability name="wallpaper_max_height" value="128"/>
- <capability name="wallpaper" value="true"/>
- <capability name="screensaver_directdownload_size_limit" value="128000"/>
- <capability name="screensaver_gif" value="true"/>
- <capability name="screensaver_max_width" value="160"/>
- <capability name="wallpaper_directdownload_size_limit" value="128000"/>
- <capability name="wallpaper_max_width" value="160"/>
- <capability name="ringtone_midi_monophonic" value="true"/>
- <capability name="wallpaper_jpg" value="true"/>
- <capability name="wallpaper_preferred_width" value="160"/>
- <capability name="screensaver_preferred_height" value="128"/>
- <capability name="wallpaper_preferred_height" value="128"/>
- <capability name="ringtone" value="true"/>
- <capability name="wallpaper_gif" value="true"/>
- <capability name="ringtone_directdownload_size_limit" value="128000"/>
- <capability name="ringtone_midi_polyphonic" value="true"/>
- <capability name="screensaver" value="true"/>
- <capability name="ringtone_spmidi" value="true"/>
- <capability name="screensaver_colors" value="18"/>
- </group>
- <group id="drm">
- <capability name="oma_v_1_0_forwardlock" value="true"/>
- </group>
- <group id="mms">
- <capability name="mms_gif_static" value="true"/>
- <capability name="sender" value="true"/>
- <capability name="mms_midi_polyphonic" value="true"/>
- <capability name="mms_jpeg_progressive" value="true"/>
- <capability name="mms_midi_monophonic" value="true"/>
- <capability name="receiver" value="true"/>
- <capability name="mms_jpeg_baseline" value="true"/>
- <capability name="mms_midi_polyphonic_voices" value="32"/>
- <capability name="mms_gif_animated" value="true"/>
- </group>
- <group id="sound_format">
- <capability name="voices" value="32"/>
- <capability name="midi_monophonic" value="true"/>
- <capability name="midi_polyphonic" value="true"/>
- </group>
- <group id="markup">
- <capability name="xhtml_support_level" value="-1"/>
- <capability name="preferred_markup" value="wml_1_1"/>
- </group>
- <group id="streaming">
- <capability name="streaming_real_media" value="none"/>
- </group>
- </device>
- <device id="generic_web_browser" user_agent="Mozilla/4.0" fall_back="generic_xhtml">
- <group id="product_info">
- <capability name="has_qwerty_keyboard" value="true"/>
- <capability name="pointing_method" value="touchscreen"/>
- <capability name="model_name" value=""/>
- <capability name="can_skip_aligned_link_row" value="true"/>
- <capability name="device_claims_web_support" value="true"/>
- <capability name="is_wireless_device" value="false"/>
- <capability name="brand_name" value="Desktop"/>
- <capability name="can_assign_phone_number" value="false"/>
- <capability name="release_date" value="1994_january"/>
- </group>
- <group id="display">
- <capability name="physical_screen_height" value="400"/>
- <capability name="columns" value="120"/>
- <capability name="physical_screen_width" value="400"/>
- <capability name="rows" value="200"/>
- <capability name="max_image_width" value="600"/>
- <capability name="resolution_height" value="480"/>
- <capability name="resolution_width" value="640"/>
- <capability name="max_image_height" value="600"/>
- </group>
- <group id="markup">
- <capability name="html_web_3_2" value="true"/>
- <capability name="html_wi_oma_xhtmlmp_1_0" value="false"/>
- <capability name="wml_1_1" value="false"/>
- <capability name="xhtml_support_level" value="4"/>
- <capability name="preferred_markup" value="html_web_4_0"/>
- <capability name="html_web_4_0" value="true"/>
- </group>
- <group id="chtml_ui">
- <capability name="chtml_table_support" value="true"/>
- </group>
- <group id="xhtml_ui">
- <capability name="xhtml_select_as_radiobutton" value="true"/>
- <capability name="xhtml_avoid_accesskeys" value="true"/>
- <capability name="xhtml_select_as_dropdown" value="true"/>
- <capability name="xhtml_supports_iframe" value="full"/>
- <capability name="xhtml_supports_forms_in_table" value="true"/>
- <capability name="xhtmlmp_preferred_mime_type" value="text/html"/>
- <capability name="xhtml_select_as_popup" value="true"/>