ch.unifr.pai.twice.layout.client.mobile.MobileUtils.java Source code

Java tutorial

Introduction

Here is the source code for ch.unifr.pai.twice.layout.client.mobile.MobileUtils.java

Source

package ch.unifr.pai.twice.layout.client.mobile;

/*
 * Copyright 2013 Oliver Schmid
 * 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.
 */
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.LinkElement;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;

/**
 * Utility functionalities for mobile use
 * 
 * @author Oliver Schmid
 * 
 */
public class MobileUtils {

    /**
     * Add necessary html tags to ensure unified initial zoom levels of the web page, fullscreen establishment and add proprietary tags (e.g.
     * "apple-mobile-web-app-capable" for extended functionalities).
     * 
     * The main purpose is to establish a "native" look of the application even within the boundaries of the web browser.
     */
    public static void preparePage() {
        RootPanel.getBodyElement().getStyle().setHeight(100, Unit.PCT);
        RootPanel.getBodyElement().getStyle().setOverflow(Overflow.HIDDEN);
        RootPanel.getBodyElement().getStyle().setMargin(0, Unit.PX);
        RootPanel.getBodyElement().getStyle().setPadding(0, Unit.PX);
        Document.get().getDocumentElement().getStyle().setProperty("minHeight", "300px");
        Document.get().getDocumentElement().getStyle().setHeight(100, Unit.PCT);
        NodeList<Element> tags = Document.get().getElementsByTagName("head");
        Element head;
        if (tags.getLength() > 0) {
            head = tags.getItem(0);
        } else {
            head = DOM.createElement("head");
            Document.get().insertFirst(head);
        }
        Element meta = DOM.createElement("meta");
        meta.setAttribute("name", "viewport");
        meta.setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0");
        head.appendChild(meta);
        LinkElement e = Document.get().createLinkElement();
        e.setRel("stylesheet");
        e.setHref(GWT.getModuleBaseURL() + "master.css");
        head.appendChild(e);

        Element iphoneFullscreen = DOM.createElement("meta");
        iphoneFullscreen.setAttribute("name", "apple-touch-fullscreen");
        iphoneFullscreen.setAttribute("content", "yes");
        head.appendChild(iphoneFullscreen);

        Element iphoneWebAppCapable = DOM.createElement("meta");
        iphoneWebAppCapable.setAttribute("name", "apple-mobile-web-app-capable");
        iphoneWebAppCapable.setAttribute("content", "yes");
        head.appendChild(iphoneWebAppCapable);

        Scheduler.get().scheduleDeferred(new ScheduledCommand() {

            @Override
            public void execute() {
                Window.scrollTo(0, 1);
            }
        });
    }
}