/* Copyright (c) 2010 Zhihua (Dennis) Jiang * * 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 com.gwtmobile.phonegap.kitchensink.client; import java.util.Date; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.HTMLPanel; import com.gwtmobile.phonegap.client.App; import com.gwtmobile.phonegap.client.App.LoadUrlOptions; import com.gwtmobile.phonegap.client.Events; import com.gwtmobile.phonegap.client.Events.Callback; import com.gwtmobile.phonegap.client.Notification; import com.gwtmobile.phonegap.client.Notification.ConfirmCallback; import com.gwtmobile.phonegap.client.Storage; import com.gwtmobile.ui.client.page.Page; import com.gwtmobile.ui.client.page.PageHistory; import com.gwtmobile.ui.client.utils.Utils; import com.gwtmobile.ui.client.widgets.Button; import com.gwtmobile.ui.client.widgets.HeaderPanel; public class KitchenSink implements EntryPoint { public static MainUi mainUi; @Override public void onModuleLoad() { if (Utils.isAndroid() || Utils.isIOS()) { if (Utils.isAndroid()) { Events.onBackButton(new Events.Callback() { @Override public void onEventFired() { onBackKeyDown(); } }); } Events.onDeviceReady(new Callback() { @Override public void onEventFired() { new Timer() { @Override public void run() { if (mainUi == null) { Utils.Console("Loading main ui..."); mainUi = new MainUi(); Page.load(mainUi); } else { this.cancel(); } } }.scheduleRepeating(50); } }); } else { mainUi = new MainUi(); Page.load(mainUi); } } public void onBackKeyDown() { if (PageHistory.Instance.from() == null) { String showed = Storage.LocalStorage.getItem("ShowRatingDialog"); if (showed == null) { Notification.confirm("If you think GWT Mobile PhoneGap is useful, " + "do you want to give it a good rating and comment?", new ConfirmCallback() { @Override public void onComplete(int selection) { switch (selection) { case 1: //sure App.loadUrl("market://details?id=com.gwtmobile.phonegap", LoadUrlOptions.newInstance().openExternal(true)); case 2: //nope Storage.LocalStorage.setItem("ShowRatingDialog", new Date().toString()); Storage.LocalStorage.setItem("ShowRatingSelection", selection + ""); break; case 3: //later } App.exitApp(); } }, "Rate the app", "Sure!,Nope,Later"); } else { App.exitApp(); } } else { if (!PageHistory.Instance.current().getClass().toString().endsWith(".EventUi")) { // emulate click on the header back button for page transition to show. emulateClickOnBackButton(); } } } protected void emulateClickOnBackButton() { HTMLPanel current = (HTMLPanel) PageHistory.Instance.current().getWidget(); HeaderPanel header = (HeaderPanel) current.getWidget(0); Button left = header.getLeftButton(); NativeEvent event = Document.get().createClickEvent(1, 1, 1, 1, 1, false, false, false, false); left.getElement().dispatchEvent(event); } // private native void doToast(String msg) /*-{ // $wnd.PhoneGap.exec(null, null, "GwtMobile", "toast", [msg]); // }-*/; // // private native void requestFocus() /*-{ // $wnd.PhoneGap.exec(null, null, "GwtMobile", "requestFocus", []); // }-*/; }