Java tutorial
/* * Copyright 2008 Eckhart Arnold (eckhart_arnold@hotmail.com). * * 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 de.eckhartarnold.client; // import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.UIObject; /** * Some tool box functions used at several places in the code. Usually, these * provide workarounds for known issues and browsers incompatibilities. * */ public final class Toolbox { /** Constants user device classes */ public final static int PC = 1, PAD = 2, PHONE = 3; /** true, if the user device reacts to tough events */ private static boolean hasTouchScreen; /** stores the device type */ private static int userDeviceType; /** stores the pixel density (dots per inch) of the user's screen */ private static int userDPI; /** stores the user's screen size in inches */ private static float userScreenSize; /** substrings of navigator.userAgent that indicate a handheld device. */ private static final String[] handheld_markers = { "iPhone", "Android", "Opera Mobi", "Opera Mini", "BlackBerry", "IEMobile", "MSIEMobile", "Windows Phone", "Symbian", "Maemo", "Midori", "Windows CE", "WindowsCE", "Smartphone", "240x320", "320x320", "160x160", "webOS" }; static { /* determine the device type. As of now tablet computers are always * classified as smartphones. */ String userAgent = Window.Navigator.getUserAgent().toLowerCase(); userDeviceType = PC; hasTouchScreen = false; for (String marker : handheld_markers) { if (userAgent.contains(marker.toLowerCase())) { userDeviceType = PHONE; hasTouchScreen = true; break; } } if (Document.get().getDocumentElement().getAttribute("ontouchstart").length() > 0) { hasTouchScreen = true; } if (userDeviceType == PC) { userScreenSize = 22.0f; userDPI = 100; } else if (userDeviceType == PHONE) { userScreenSize = 4.0f; userDPI = 200; } else { userScreenSize = 10.0f; userDPI = 150; } } /** * Returns the offset height of an UI object. For some reason, this is often * zero in non-quirks mode. In this case the offset height will be guessed * with a very crude algorithm based on the client window's size. * @param uiobject the UIObject, the height of which shall be determined * @return the (assumed) offset height of an UI object. */ public static int getOffsetHeight(UIObject uiobject) { int height = uiobject.getOffsetHeight(); if (height == 0) { int clientW = Window.getClientWidth(); int clientH = Window.getClientHeight(); int width = uiobject.getOffsetWidth(); height = clientH * width / clientW; } return height; } /** * Returns the offset width of an UI object. Usually, the same as * <code>uiobject.getOffsetWidth()</code> * @param uiobject the UIObject for which the width shall be determined * @return the offset width of uiobject. */ public static int getOffsetWidth(UIObject uiobject) { return uiobject.getOffsetWidth(); } /** * Determines the kind of device (personal computer, smartphone or * touchpad) that the user has. * @return constant describing the device; either PC, PAD, or PHONE. */ public static int getUserDeviceType() { return userDeviceType; } /** * Returns the pixel density of the user's display in dots per inch. * (Warning: As of now, the returned value is not very reliable) * @return pixel density in dots per inch */ public static int getUserDPI() { return userDPI; } /** * Returns the user's device's screen size in inches. (Most of the * time this will be just an informed guess.) * @return screen size of the user's device in inches. */ public static float getUserScreenSize() { return userScreenSize; } }