?? deviceconfigdetector.java
字號:
package mobi.javabeans.browserDetector;
/**
* DeviceConfigDetector is a helper class to detect WAP browser capabilities.
*
* @author Xinyi Zhang
* @version 1.0, 10/20/2006
* @see MobileDeviceConfig
*/
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
public class DeviceConfigDetector {
private static final int user_agent_limit = 200;
private static final int accept_limit = 1200;
private static final int accept_charset_limit = 200;
private static final int accept_language_limit = 1200;
public DeviceConfigDetector() {
}
public static final DeviceConfig detectCapabilities(
HttpServletRequest request) {
String userAgent = request.getHeader("user-agent");
String accept = request.getHeader("accept");
String acceptCharset = request.getHeader("accept-charset");
String acceptLanguage = request.getHeader("accept-language");
return detectCapabilities(userAgent, accept, acceptCharset,
acceptLanguage);
}
public static final DeviceConfig detectCapabilities(String userAgent,
String accept, String acceptCharset, String acceptLanguage) {
if (userAgent == null)
userAgent = "";
if (userAgent.length() > user_agent_limit)
userAgent = userAgent.substring(0, user_agent_limit);
if (accept == null)
accept = "";
if (accept.length() > accept_limit)
accept = accept.substring(0, accept_limit);
if (acceptCharset == null)
acceptCharset = "";
if (acceptCharset.length() > accept_charset_limit)
acceptCharset = acceptCharset.substring(0, accept_charset_limit);
if (acceptLanguage == null)
acceptLanguage = "";
if (acceptLanguage.length() > accept_language_limit)
acceptLanguage = acceptLanguage.substring(0, accept_language_limit);
//
// printParams(userAgent, accept, acceptCharset, acceptLanguage);
//
DeviceConfig config = new DeviceConfig();
// Default, non-mobile browser
config.setUser_agent(userAgent);
config.setAccept(accept);
config.setAccept_charset(acceptCharset);
config.setAccept_language(acceptLanguage);
//
config.setCldc(getCLDC(userAgent));
config.setMidp(getMIDP(userAgent));
//
config.setSupported_XHTMLMP(detectFeatureSupport(accept,
BrowserConstants.MIME_XHTML_MP));
config.setSupported_HTML(detectFeatureSupport(accept,
BrowserConstants.MIME_HTML));
config.setSupported_XHTML(detectFeatureSupport(accept,
BrowserConstants.MIME_XHTML));
config.setSupported_WML(detectFeatureSupport(accept,
BrowserConstants.MIME_WML));
config.setSupported_WBMP(detectFeatureSupport(accept,
BrowserConstants.MIME_WBMP));
config.setSupported_GIF(detectFeatureSupport(accept,
BrowserConstants.MIME_GIF));
config.setSupported_JPEG((detectFeatureSupport(accept,
BrowserConstants.MIME_JPEG)));
config.setSupported_PNG(detectFeatureSupport(accept,
BrowserConstants.MIME_PNG));
config.setSupported_PDF(detectFeatureSupport(accept,
BrowserConstants.MIME_PDF));
config.setSupported_CSS(detectFeatureSupport(accept,
BrowserConstants.MIME_CSS));
config.setSupported_JavaScript(detectFeatureSupport(accept,
BrowserConstants.MIME_JAVASCRIPT));
config.setBrowser(getBrowserType(userAgent));
config.setLanguages(getLanguages(acceptLanguage));
config.setManufacturer(getManufacturer(userAgent, config.getBrowser()));
//
config.setMobileBrowser(detectMobileBrowser(config));
// special rules;
config = specialRule_10_AcceptAll(accept, config);
config = specialRule_20_MANUFACTURER_of_MSIE(config);
config = specialRule_30_MANUFACTURER_of_Firefox(config);
config = specialRule_40_MANUFACTURER_of_BlackBerry(config);
config = specialRule_50_IPhone(config);
config = specialRule_60_Opera(config);
config = specialRule_70_PlayStation(config);
config = specialRule_100_Special_Mobile_Browsers(config);
config = specialRule_200_Search_Engine_Robot(config);
return config;
}
public static final boolean detectFeatureSupport(DeviceConfig config,
String mime) {
String accept = config.getAccept();
return detectFeatureSupport(accept, mime);
}
public static final boolean detectFeatureSupport(String accept, String mime) {
if (accept.indexOf(mime) != -1) {
return true;
} else {
return false;
}
}
public static final boolean detectMobileBrowser(DeviceConfig config) {
boolean isMobileBrowser = false;
String browserType = config.getBrowser();
if (config.isSupported_XHTMLMP()) {
isMobileBrowser = true;
} else if (browserType.equals(BrowserConstants.BROWSER_UP)) {
isMobileBrowser = true;
} else if (browserType.equals(BrowserConstants.BROWSER_UP_LINK)) {
isMobileBrowser = true;
} else if (browserType.equals(BrowserConstants.BROWSER_NOKIAMOBILE)) {
isMobileBrowser = true;
} else if (browserType.equals(BrowserConstants.BROWSER_NOKIA)) {
isMobileBrowser = true;
} else if (config.getManufacturer().equalsIgnoreCase(
BrowserConstants.MANUFACTURER_MOTOROLA)) {
isMobileBrowser = true;
} else if (browserType.equals(BrowserConstants.BROWSER_OBIGO)) {
isMobileBrowser = true;
} else if (config.getManufacturer().equalsIgnoreCase(
BrowserConstants.MANUFACTURER_SONY_ERICSSON)) {
isMobileBrowser = true;
} else if (config.getBrowser().equals(BrowserConstants.BROWSER_EZWAP)) {
isMobileBrowser = true;
} else if (config.getBrowser()
.equals(BrowserConstants.BROWSER_JBROWSER)) {
isMobileBrowser = true;
} else if (config.getUser_agent().indexOf(
BrowserConstants.DEVICE_CELLPHONE_1) != -1) {
isMobileBrowser = true;
} else if (config.getUser_agent().indexOf(
BrowserConstants.DEVICE_CELLPHONE_2) != -1) {
isMobileBrowser = true;
} else if (config.getManufacturer().equals(
BrowserConstants.MANUFACTURER_SAGEM)) {
isMobileBrowser = true;
}
return isMobileBrowser;
}
public static final boolean isTheLanguageSupported(DeviceConfig config,
String language) {
String acceptLanguage = config.getAccept_language();
return isTheLanguageSupported(acceptLanguage, language);
}
public static final boolean isTheLanguageSupported(String acceptLanguage,
String language) {
if (acceptLanguage.indexOf(language) != -1) {
return true;
} else {
return false;
}
}
public static final String getBrowserType(DeviceConfig config) {
String userAgent = config.getUser_agent();
return getBrowserType(userAgent);
}
public static String getManufacturer(DeviceConfig config) {
String userAgent = config.getUser_agent();
return getManufacturer(userAgent, config.getBrowser());
}
public static final String getBrowserType(String userAgent) {
if (userAgent.indexOf(BrowserConstants.BROWSER_UP) != -1) {
return BrowserConstants.BROWSER_UP;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_PSION) != -1) {
return BrowserConstants.BROWSER_PSION;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_UP_LINK) != -1) {
return BrowserConstants.BROWSER_UP_LINK;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_NOKIAMOBILE) != -1) {
return BrowserConstants.BROWSER_NOKIAMOBILE;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_OPERA) != -1) {
return BrowserConstants.BROWSER_OPERA;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_O2) != -1) {
return BrowserConstants.BROWSER_O2;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_OBIGO) != -1) {
return BrowserConstants.BROWSER_OBIGO;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_BLAZER) != -1) {
return BrowserConstants.BROWSER_BLAZER;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_FIREFOX) != -1) {
return BrowserConstants.BROWSER_FIREFOX;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_IE) != -1) {
return BrowserConstants.BROWSER_IE;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_AVANTGO) != -1) {
return BrowserConstants.BROWSER_AVANTGO;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_DOCOMO) != -1) {
return BrowserConstants.BROWSER_DOCOMO;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_KDDI) != -1) {
return BrowserConstants.BROWSER_KDDI;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_IPAQ) != -1) {
return BrowserConstants.BROWSER_IPAQ;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_NOKIA) != -1) {
return BrowserConstants.BROWSER_NOKIA;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_SAFARI) != -1) {
return BrowserConstants.BROWSER_SAFARI;
} else if (userAgent.indexOf(BrowserConstants.OS_Symbian) != -1) {
return BrowserConstants.OS_Symbian;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_AMAYA) != -1) {
return BrowserConstants.BROWSER_AMAYA;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_AMIGA_VOYAGER) != -1) {
return BrowserConstants.BROWSER_AMIGA_VOYAGER;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_AMIGA_AWEB) != -1) {
return BrowserConstants.BROWSER_AMIGA_AWEB;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_BLUEFISH) != -1) {
return BrowserConstants.BROWSER_BLUEFISH;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_BROWSEX) != -1) {
return BrowserConstants.BROWSER_BROWSEX;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_CAMINO) != -1) {
return BrowserConstants.BROWSER_CAMINO;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_CHARON) != -1) {
return BrowserConstants.BROWSER_CHARON;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_CHIMERA) != -1) {
return BrowserConstants.BROWSER_CHIMERA;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_CURL) != -1) {
return BrowserConstants.BROWSER_CURL;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_DEMOCRACY) != -1) {
return BrowserConstants.BROWSER_DEMOCRACY;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_DILLO) != -1) {
return BrowserConstants.BROWSER_DILLO;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_MOZILLA) != -1) {
return BrowserConstants.BROWSER_MOZILLA;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_KBROWSER) != -1) {
return BrowserConstants.BROWSER_KBROWSER;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_CCWAP) != -1) {
return BrowserConstants.BROWSER_CCWAP;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_EZWAP) != -1) {
return BrowserConstants.BROWSER_EZWAP;
} else if (userAgent.indexOf(BrowserConstants.BROWSER_JBROWSER) != -1) {
return BrowserConstants.BROWSER_JBROWSER;
} else {
return BrowserConstants.UNKNOWN;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -