package com.akjava.gwt.lib.client;
import com.akjava.gwt.lib.client.MultiImageElementLoader.MultiImageElementListener;
import com.google.common.base.Ascii;
import com.google.common.collect.Lists;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.typedarrays.shared.ArrayBuffer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.Navigator;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
import com.google.gwt.xhr.client.XMLHttpRequest.ResponseType;
public class BrowserUtils {
public static native String getUserAgent() /*-{
return navigator.userAgent.toLowerCase();
}-*/;
public static boolean isChrome(){
return getUserAgent().indexOf("chrome")!=-1;
}
public static boolean isFirefox(){
return getUserAgent().indexOf("firefox")!=-1;
}
public final native static boolean isIOS()/*-{
return navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false ;
}-*/;
public static boolean isIE(){
String agent=Window.Navigator.getUserAgent().toLowerCase();
return agent.indexOf("msie")!=-1 || agent.indexOf("trident")!=-1;
}
public static boolean isIAndroid(){
String agent=Navigator.getUserAgent();
if(Ascii.toLowerCase(agent).indexOf("android")!=-1){
return true;
}else{
return false;
}
}
public interface LoadBinaryListener{
public void onLoadBinaryFile(ArrayBuffer buffer);
public void onFaild(int states,String statesText);
}
public interface LoadTextListener{
public void onLoadTextFile(String text);
public void onFaild(int states,String statesText);
}
public static void loadBinaryFile(String url,final LoadBinaryListener listener) {
XMLHttpRequest request=XMLHttpRequest.create();
request.setResponseType(ResponseType.ArrayBuffer);
request.setOnReadyStateChange(new ReadyStateChangeHandler() {
@Override
public void onReadyStateChange(XMLHttpRequest xhr) {
if(xhr.getResponseArrayBuffer()==null){//pre loading
return;
}
if(xhr.getStatus()==200){
ArrayBuffer arrayBufer=xhr.getResponseArrayBuffer();
listener.onLoadBinaryFile(arrayBufer);
}else{
listener.onFaild(xhr.getStatus(),xhr.getStatusText());
}
}
});
request.open("GET",url);
request.send();
}
public static void loadImageFile(String url,final ImageElementListener listener){
new ImageElementLoader().load(url, listener);
}
public static void loadImageFiles(Iterable<String> urls,final MultiImageElementListener listener){
new MultiImageElementLoader().loadImages(Lists.newArrayList(urls), listener);
}
public static void loadTextFile(String url,final LoadTextListener listener){
try {
new RequestBuilder(RequestBuilder.GET, url).sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
listener.onLoadTextFile(response.getText());
}
@Override
public void onError(Request request, Throwable exception) {
listener.onFaild(0,exception.getMessage());
}
});
} catch (RequestException e) {
listener.onFaild(0, e.getMessage());
}
}
}